Message ID | 20250415231635.83960-4-dave@stgolabs.net (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | fs/buffer: split pagecache lookups into atomic or blocking | expand |
On Tue 15-04-25 16:16:31, Davidlohr Bueso wrote: > Convert to the new nonatomic flavor to benefit from potential performance > benefits and adapt in the future vs migration such that semantics > are kept. > > Convert write_boundary_block() which already takes the buffer > lock as well as bdev_getblk() depending on the respective gpf flags. > There are no changes in semantics. > > Suggested-by: Jan Kara <jack@suse.cz> > Signed-off-by: Davidlohr Bueso <dave@stgolabs.net> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > fs/buffer.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/fs/buffer.c b/fs/buffer.c > index 64034638ee2c..f8e63885604b 100644 > --- a/fs/buffer.c > +++ b/fs/buffer.c > @@ -658,7 +658,9 @@ EXPORT_SYMBOL(generic_buffers_fsync); > void write_boundary_block(struct block_device *bdev, > sector_t bblock, unsigned blocksize) > { > - struct buffer_head *bh = __find_get_block(bdev, bblock + 1, blocksize); > + struct buffer_head *bh; > + > + bh = __find_get_block_nonatomic(bdev, bblock + 1, blocksize); > if (bh) { > if (buffer_dirty(bh)) > write_dirty_buffer(bh, 0); > @@ -1440,8 +1442,12 @@ EXPORT_SYMBOL(__find_get_block_nonatomic); > struct buffer_head *bdev_getblk(struct block_device *bdev, sector_t block, > unsigned size, gfp_t gfp) > { > - struct buffer_head *bh = __find_get_block(bdev, block, size); > + struct buffer_head *bh; > + > + if (gfpflags_allow_blocking(gfp)) > + bh = __find_get_block_nonatomic(bdev, block, size); > + else > + bh = __find_get_block(bdev, block, size); > > might_alloc(gfp); > if (bh) > -- > 2.39.5 >
diff --git a/fs/buffer.c b/fs/buffer.c index 64034638ee2c..f8e63885604b 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -658,7 +658,9 @@ EXPORT_SYMBOL(generic_buffers_fsync); void write_boundary_block(struct block_device *bdev, sector_t bblock, unsigned blocksize) { - struct buffer_head *bh = __find_get_block(bdev, bblock + 1, blocksize); + struct buffer_head *bh; + + bh = __find_get_block_nonatomic(bdev, bblock + 1, blocksize); if (bh) { if (buffer_dirty(bh)) write_dirty_buffer(bh, 0); @@ -1440,8 +1442,12 @@ EXPORT_SYMBOL(__find_get_block_nonatomic); struct buffer_head *bdev_getblk(struct block_device *bdev, sector_t block, unsigned size, gfp_t gfp) { - struct buffer_head *bh = __find_get_block(bdev, block, size); + struct buffer_head *bh; + + if (gfpflags_allow_blocking(gfp)) + bh = __find_get_block_nonatomic(bdev, block, size); + else + bh = __find_get_block(bdev, block, size); might_alloc(gfp); if (bh) --
Convert to the new nonatomic flavor to benefit from potential performance benefits and adapt in the future vs migration such that semantics are kept. Convert write_boundary_block() which already takes the buffer lock as well as bdev_getblk() depending on the respective gpf flags. There are no changes in semantics. Suggested-by: Jan Kara <jack@suse.cz> Signed-off-by: Davidlohr Bueso <dave@stgolabs.net> --- fs/buffer.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 2.39.5