]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fs: buffer: use clear_and_wake_up_bit() in unlock_buffer()
authorAgatha Isabelle Moreira <code@agatha.dev>
Wed, 20 May 2026 19:58:16 +0000 (16:58 -0300)
committerChristian Brauner <brauner@kernel.org>
Wed, 27 May 2026 13:11:02 +0000 (15:11 +0200)
Use `clear_and_wake_up_bit()` in `unlock_buffer()`, since the helper was
introduced in 'commit 8236b0ae31c83 ("bdi: wake up concurrent
wb_shutdown() callers.")' as a generic way of doing the same sequence of
operations:
        clear_bit_unlock();
smp_mb__after_atomic();
wake_up_bit();

The helper was implemented to avoid bugs caused by forgetting to call
`wake_up_bit()` after `clear_bit_unlock()`.

Since `unlock_buffer()` predates git and was last modified in
'commit 4e857c58efeb9 ("arch: Mass conversion of smp_mb__*()")', years
before `clear_and_wake_up_bit()`, it still uses the open-coded sequence.

Replace the open-coded sequence with the helper to avoid duplicate code
and reduce code paths to maintain.

Suggested-by: shuo chen <1289151713@qq.com>
Link: https://lore.kernel.org/kernelnewbies/agzoqV835-co4kAN@guidai/T/#t
Signed-off-by: Agatha Isabelle Moreira <code@agatha.dev>
Link: https://patch.msgid.link/ag4SD-mkmn5IbuN7@guidai
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
fs/buffer.c

index b0b3792b1496ecbe92154e408dab3859db254c3b..4348b240bd97f958595f426a18188b61eeb791d7 100644 (file)
@@ -74,9 +74,7 @@ EXPORT_SYMBOL(__lock_buffer);
 
 void unlock_buffer(struct buffer_head *bh)
 {
-       clear_bit_unlock(BH_Lock, &bh->b_state);
-       smp_mb__after_atomic();
-       wake_up_bit(&bh->b_state, BH_Lock);
+       clear_and_wake_up_bit(BH_Lock, &bh->b_state);
 }
 EXPORT_SYMBOL(unlock_buffer);