diff options
| author | Christian Brauner <brauner@kernel.org> | 2026-06-16 16:08:19 +0200 |
|---|---|---|
| committer | Christian Brauner <brauner@kernel.org> | 2026-06-29 10:31:51 +0200 |
| commit | 9c486f28994fdfc1a83f5f60129402cf4379957b (patch) | |
| tree | 7e3d9006138aea6366c2dda4feccbe27f1d3433f /include/linux/types.h | |
| parent | 3ec9800c2d33c783dd3b27d4cc3bb22b9385f828 (diff) | |
| download | linux-next-9c486f28994fdfc1a83f5f60129402cf4379957b.tar.gz linux-next-9c486f28994fdfc1a83f5f60129402cf4379957b.zip | |
super: take lock after last reference count
__put_super() required the caller to hold sb_lock, so put_super()
wrapped it. The per-device superblock table introduced later drops its
passive references from contexts that do not hold sb_lock, so make
put_super() self-locking: drop the count first and take sb_lock only for
the final list_del.
With the count now dropped outside sb_lock a superblock can briefly sit
on @super_blocks with s_passive == 0 before it is unlinked, so the list
walkers (__iterate_supers(), iterate_supers_type(), user_get_super())
switch to refcount_inc_not_zero() and skip it.
Link: https://patch.msgid.link/20260616-work-super-bdev_holder_global-v2-3-7df6b864028e@kernel.org
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
Diffstat (limited to 'include/linux/types.h')
0 files changed, 0 insertions, 0 deletions
