diff options
author | Davidlohr Bueso <dave@stgolabs.net> | 2025-05-15 10:39:22 -0700 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2025-05-21 09:34:28 +0200 |
commit | fb27226c389f499d04913023fbcfb7920fb0e475 (patch) | |
tree | 77e040e864833389be0e384ebc79c766c7d67c2c /fs/buffer.c | |
parent | a5806cd506af5a7c19bcd596e4708b5c464bfd21 (diff) |
fs/buffer: use sleeping lookup in __getblk_slowpath()
Just as with the fast path, call the lookup variant depending
on the gfp flags.
Signed-off-by: Davidlohr Bueso <dave@stgolabs.net>
Link: https://lore.kernel.org/20250515173925.147823-2-dave@stgolabs.net
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'fs/buffer.c')
-rw-r--r-- | fs/buffer.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/buffer.c b/fs/buffer.c index 7ba1807145aa..8563d949cd2c 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -1122,6 +1122,8 @@ static struct buffer_head * __getblk_slow(struct block_device *bdev, sector_t block, unsigned size, gfp_t gfp) { + bool blocking = gfpflags_allow_blocking(gfp); + /* Size must be multiple of hard sectorsize */ if (unlikely(size & (bdev_logical_block_size(bdev)-1) || (size < 512 || size > PAGE_SIZE))) { @@ -1137,7 +1139,10 @@ __getblk_slow(struct block_device *bdev, sector_t block, for (;;) { struct buffer_head *bh; - bh = __find_get_block(bdev, block, size); + if (blocking) + bh = __find_get_block_nonatomic(bdev, block, size); + else + bh = __find_get_block(bdev, block, size); if (bh) return bh; |