btrfs: add helper to clear EXTENT_BUFFER_READING
authorTavian Barnes <tavianator@tavianator.com>
Mon, 18 Mar 2024 13:56:53 +0000 (09:56 -0400)
committerDavid Sterba <dsterba@suse.com>
Tue, 7 May 2024 19:31:00 +0000 (21:31 +0200)
We are clearing the bit and waking up any waiters in two different
places.  Factor that code out into a static helper function.

Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Tavian Barnes <tavianator@tavianator.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c

index 7bc23e26a53063cb4c816c37138688541c3eb835..23bdd05b5cec951c7e57b0caa6c044ee5fdaef0d 100644 (file)
@@ -4260,6 +4260,13 @@ void set_extent_buffer_uptodate(struct extent_buffer *eb)
        }
 }
 
+static void clear_extent_buffer_reading(struct extent_buffer *eb)
+{
+       clear_bit(EXTENT_BUFFER_READING, &eb->bflags);
+       smp_mb__after_atomic();
+       wake_up_bit(&eb->bflags, EXTENT_BUFFER_READING);
+}
+
 static void end_bbio_meta_read(struct btrfs_bio *bbio)
 {
        struct extent_buffer *eb = bbio->private;
@@ -4294,9 +4301,7 @@ static void end_bbio_meta_read(struct btrfs_bio *bbio)
                bio_offset += len;
        }
 
-       clear_bit(EXTENT_BUFFER_READING, &eb->bflags);
-       smp_mb__after_atomic();
-       wake_up_bit(&eb->bflags, EXTENT_BUFFER_READING);
+       clear_extent_buffer_reading(eb);
        free_extent_buffer(eb);
 
        bio_put(&bbio->bio);
@@ -4330,9 +4335,7 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num,
         * will now be set, and we shouldn't read it in again.
         */
        if (unlikely(test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags))) {
-               clear_bit(EXTENT_BUFFER_READING, &eb->bflags);
-               smp_mb__after_atomic();
-               wake_up_bit(&eb->bflags, EXTENT_BUFFER_READING);
+               clear_extent_buffer_reading(eb);
                return 0;
        }