Viewing: ext4-race-in-ext4-destroy-inode.patch
commit 4b51f1df05c4219cd8f910ac8ad58e8de946bb56
Author: Alex Zhuravlev <bzzz@whamcloud.com>
AuthorDate: Wed Jan 31 08:16:12 2024 +0300
LU-17486 ldiskfs: fix race in ext4_destroy_inode
ext4_i_callback() can race with the access to i_reserved_data_blocks
in ext4_destroy_inode() when used with preemption-enabled kernel.
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Li Dongyang <dongyangli@ddn.com>
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Change-Id: I69c6bcfbb24e6c07d28ebcd2bdd9d9e6f06ec8d1
Reviewed-on: https://review.whamcloud.com/53868
Index: linux-4.18.0-32.el8.x86_64/fs/ext4/ext4.h
===================================================================
--- linux-4.18.0-32.el8.x86_64.orig/fs/ext4/super.c
+++ linux-4.18.0-32.el8.x86_64/fs/ext4/super.c
@@ -1186,13 +1186,14 @@ static void ext4_destroy_inode(struct in
true);
dump_stack();
}
- call_rcu(&inode->i_rcu, ext4_i_callback);
if (EXT4_I(inode)->i_reserved_data_blocks)
ext4_msg(inode->i_sb, KERN_ERR,
"Inode %lu (%p): i_reserved_data_blocks (%u) not cleared!",
inode->i_ino, EXT4_I(inode),
EXT4_I(inode)->i_reserved_data_blocks);
+
+ call_rcu(&inode->i_rcu, ext4_i_callback);
}
static void init_once(void *foo)