summaryrefslogtreecommitdiffstats
path: root/fs/ext4/file.c
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2017-09-07 01:21:24 +0200
committerLinus Torvalds <torvalds@linux-foundation.org>2017-09-07 02:27:26 +0200
commitc10f778ddfc161f5c58a8d6de4ad92235ea2eeba (patch)
tree703158abaa22046480a5abc7591a67ec7c18f8ed /fs/ext4/file.c
parentmm: implement find_get_pages_range() (diff)
downloadlinux-c10f778ddfc161f5c58a8d6de4ad92235ea2eeba.tar.xz
linux-c10f778ddfc161f5c58a8d6de4ad92235ea2eeba.zip
fs: fix performance regression in clean_bdev_aliases()
Commit e64855c6cfaa ("fs: Add helper to clean bdev aliases under a bh and use it") added a wrapper for clean_bdev_aliases() that invalidates bdev aliases underlying a single buffer head. However this has caused a performance regression for bonnie++ benchmark on ext4 filesystem when delayed allocation is turned off (ext3 mode) - average of 3 runs: Hmean SeqOut Char 164787.55 ( 0.00%) 107189.06 (-34.95%) Hmean SeqOut Block 219883.89 ( 0.00%) 168870.32 (-23.20%) The reason for this regression is that clean_bdev_aliases() is slower when called for a single block because pagevec_lookup() it uses will end up iterating through the radix tree until it finds a page (which may take a while) but we are only interested whether there's a page at a particular index. Fix the problem by using pagevec_lookup_range() instead which avoids the needless iteration. Fixes: e64855c6cfaa ("fs: Add helper to clean bdev aliases under a bh and use it") Link: http://lkml.kernel.org/r/20170726114704.7626-5-jack@suse.cz Signed-off-by: Jan Kara <jack@suse.cz> Cc: Jens Axboe <axboe@fb.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/ext4/file.c')
0 files changed, 0 insertions, 0 deletions