diff options
author | Davidlohr Bueso <dave@stgolabs.net> | 2025-05-15 10:39:23 -0700 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2025-05-21 09:34:29 +0200 |
commit | 98a6ca16333e10ce450b0ab516f4c3e5fe52ef31 (patch) | |
tree | 9004a39d39aa98d7e316f19e8d6a91504c81d8b7 | |
parent | fb27226c389f499d04913023fbcfb7920fb0e475 (diff) | |
download | linux-98a6ca16333e10ce450b0ab516f4c3e5fe52ef31.tar.gz linux-98a6ca16333e10ce450b0ab516f4c3e5fe52ef31.tar.bz2 linux-98a6ca16333e10ce450b0ab516f4c3e5fe52ef31.zip |
fs/buffer: avoid redundant lookup in getblk slowpath
__getblk_slow() already implies failing a first lookup
as the fastpath, so try to create the buffers immediately
and avoid the redundant lookup. This saves 5-10% of the
total cost/latency of the slowpath.
Signed-off-by: Davidlohr Bueso <dave@stgolabs.net>
Link: https://lore.kernel.org/20250515173925.147823-3-dave@stgolabs.net
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Christian Brauner <brauner@kernel.org>
-rw-r--r-- | fs/buffer.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/buffer.c b/fs/buffer.c index 8563d949cd2c..23773b750524 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -1139,15 +1139,15 @@ __getblk_slow(struct block_device *bdev, sector_t block, for (;;) { struct buffer_head *bh; + if (!grow_buffers(bdev, block, size, gfp)) + return NULL; + if (blocking) bh = __find_get_block_nonatomic(bdev, block, size); else bh = __find_get_block(bdev, block, size); if (bh) return bh; - - if (!grow_buffers(bdev, block, size, gfp)) - return NULL; } } |