diff options
author | Ojaswin Mujoo <ojaswin@linux.ibm.com> | 2023-05-30 18:03:47 +0530 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2023-06-26 19:34:56 -0400 |
commit | 4f3d1e4533b0982034f316ace85415d3bc57e3da (patch) | |
tree | e8d560cac382cfb9025631d9c81fa72494fb8a9a /arch/x86/tools | |
parent | 3c6296046c85333bc52555a670a9093d9e2657bb (diff) | |
download | linux-stable-4f3d1e4533b0982034f316ace85415d3bc57e3da.tar.gz linux-stable-4f3d1e4533b0982034f316ace85415d3bc57e3da.tar.bz2 linux-stable-4f3d1e4533b0982034f316ace85415d3bc57e3da.zip |
ext4: Ensure ext4_mb_prefetch_fini() is called for all prefetched BGs
Before this patch, the call stack in ext4_run_li_request is as follows:
/*
* nr = no. of BGs we want to fetch (=s_mb_prefetch)
* prefetch_ios = no. of BGs not uptodate after
* ext4_read_block_bitmap_nowait()
*/
next_group = ext4_mb_prefetch(sb, group, nr, prefetch_ios);
ext4_mb_prefetch_fini(sb, next_group prefetch_ios);
ext4_mb_prefetch_fini() will only try to initialize buddies for BGs in
range [next_group - prefetch_ios, next_group). This is incorrect since
sometimes (prefetch_ios < nr), which causes ext4_mb_prefetch_fini() to
incorrectly ignore some of the BGs that might need initialization. This
issue is more notable now with the previous patch enabling "fetching" of
BLOCK_UNINIT BGs which are marked buffer_uptodate by default.
Fix this by passing nr to ext4_mb_prefetch_fini() instead of
prefetch_ios so that it considers the right range of groups.
Similarly, make sure we don't pass nr=0 to ext4_mb_prefetch_fini() in
ext4_mb_regular_allocator() since we might have prefetched BLOCK_UNINIT
groups that would need buddy initialization.
Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/05e648ae04ec5b754207032823e9c1de9a54f87a.1685449706.git.ojaswin@linux.ibm.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'arch/x86/tools')
0 files changed, 0 insertions, 0 deletions