Skip to content

Add rcu_sync infrastructure to avoid _expedited() in percpu-rwsem

Oleg Nesterov lkml 2 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest8 patches 8 repliesIn review
  2. v17 patches 14 repliesSuperseded

Changes from the cover letter

- whitespace fix in 1/8.

- remove EXPORT_SYMBOL() in 3/8, currently rcu_sync has no modular users.

- 5/8 is new. This ugly hack pairs with another one:
"shift percpu_counter_destroy() into destroy_super_work()"
https://git.kernel.org/cgit/linux/kernel/git/viro/vfs.git/commit/?h=for-next&id=853b39a7c82826b8413048feec7bf08e98ce7a84
They both will be reverted later.

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/8rcu: Create rcu_sync infrastructureinclude/linux/rcusync.h kernel/rcu/Makefile kernel/rcu/sync.c+172 -10 replies
2/8rcusync: Introduce struct rcu_sync_opsinclude/linux/rcusync.h kernel/rcu/sync.c+45 -580 replies
3/8rcusync: Add the CONFIG_PROVE_RCU checksinclude/linux/rcusync.h kernel/rcu/sync.c+26 -00 replies
4/8rcusync: Introduce rcu_sync_dtor()include/linux/rcusync.h kernel/rcu/sync.c+23 -00 replies
5/8percpu-rwsem: make percpu_free_rwsem() after kzalloc() safekernel/locking/percpu-rwsem.c+7 -00 replies
6/8percpu-rwsem: change it to rely on rss_sync infrastructureinclude/linux/percpu-rwsem.h kernel/locking/percpu-rwsem.c+9 -120 replies
7/8percpu-rwsem: fix the comments outdated by rcu_synckernel/locking/percpu-rwsem.c+11 -390 replies
8/8percpu-rwsem: cleanup the lockdep annotations in percpu_down_read()kernel/locking/percpu-rwsem.c+5 -50 replies

Reviews trailers per patch

4 of 8 patches have a Reviewed-by or Acked-by.

PatchPaul E. McKenney
1/8R-b
2/8R-b
3/8R-b
4/8R-b
5/8
6/8
7/8
8/8

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v2 thread

Cover letter [PATCH v2 0/8] Add rcu_sync infrastructure to avoid _expedited() in percpu-rwsem

Hello,

Now that sb->s_writers was changed to use percpu_rw_semaphore let me send v2.

Changes:

- whitespace fix in 1/8.

- remove EXPORT_SYMBOL() in 3/8, currently rcu_sync has no modular users.

- 5/8 is new. This ugly hack pairs with another one:
"shift percpu_counter_destroy() into destroy_super_work()"
https://git.kernel.org/cgit/linux/kernel/git/viro/vfs.git/commit/?h=for-next&id=853b39a7c82826b8413048feec7bf08e98ce7a84
They both will be reverted later.

The problem is that we have 2 series routed via different trees, RCU and VFS. We need this hack to ensure that this series won't break alloc_super() which currently assumes that destroy_super()->percpu_free_rwsem() is safe after kzalloc(). This way these 2 series do not depend on each other, we can test/change/revert/etc them independently.

We will add rcu_sync_dtor() into deactivate_locked_super() later and revert both hacks.
Oleg.

 include/linux/percpu-rwsem.h  |    3 +-
 include/linux/rcusync.h       |   56 +++++++++++++++
 kernel/locking/percpu-rwsem.c |   85 ++++++++---------------
 kernel/rcu/Makefile           |    2 +-
 kernel/rcu/sync.c             |  151 +++++++++++++++++++++++++++++++++++++++++
 5 files changed, 240 insertions(+), 57 deletions(-)