Message ID | 477327c2e21e253b56261f504a91603419bb167a.1710769876.git.tavianator@tavianator.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | extent_buffer read cleanups | expand |
在 2024/3/19 00:26, Tavian Barnes 写道: > We are clearing the bit and waking up any waiters in two different > places. Factor that code out into a static helper function. > > Signed-off-by: Tavian Barnes <tavianator@tavianator.com> Reviewed-by: Qu Wenruo <wqu@suse.com> Thanks, Qu > --- > fs/btrfs/extent_io.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c > index 61594eaf1f89..46173dcfde4f 100644 > --- a/fs/btrfs/extent_io.c > +++ b/fs/btrfs/extent_io.c > @@ -4270,6 +4270,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; > @@ -4304,9 +4311,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); > @@ -4340,9 +4345,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; > } >
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 61594eaf1f89..46173dcfde4f 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -4270,6 +4270,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; @@ -4304,9 +4311,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); @@ -4340,9 +4345,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; }
We are clearing the bit and waking up any waiters in two different places. Factor that code out into a static helper function. Signed-off-by: Tavian Barnes <tavianator@tavianator.com> --- fs/btrfs/extent_io.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)