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@xxxxxxxxxx> Oh, right. Thanks for fixing this. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > 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 <jack@xxxxxxxx> SUSE Labs, CR