Re: [PATCH] ext4: recheck buffer uptodate bit under buffer lock
From: Jan Kara <jack@suse.cz>
Date: 2021-09-16 08:05:07
On Fri 10-09-21 16:03:16, Zhang Yi wrote:
Commit 8e33fadf945a ("ext4: remove an unnecessary if statement in
__ext4_get_inode_loc()") forget to recheck buffer's uptodate bit again
under buffer lock, which may overwrite the buffer if someone else have
already brought it uptodate and changed it.
Fixes: 8e33fadf945a ("ext4: remove an unnecessary if statement in __ext4_get_inode_loc()")
Signed-off-by: Zhang Yi <yi.zhang@huawei.com>Oh, right. Thanks for fixing this. Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> Honza
quoted hunk ↗ jump to hunk
--- fs/ext4/inode.c | 6 ++++++ 1 file changed, 6 insertions(+)diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index d18852d6029c..236adc647eb0 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c@@ -4340,6 +4340,12 @@ static int __ext4_get_inode_loc(struct super_block *sb, unsigned long ino, goto has_buffer; lock_buffer(bh); + if (ext4_buffer_uptodate(bh)) { + /* Someone brought it uptodate while we waited */ + unlock_buffer(bh); + goto has_buffer; + } + /* * If we have all information of the inode in memory and this * is the only valid inode in the block, we need not read the-- 2.31.1
-- Jan Kara [off-list ref] SUSE Labs, CR