Re: [Linux-kernel-mentees] [PATCH] fs: btrfs: block-group.c: Fix suspicious RCU usage warning
From: Madhuparna Bhowmik <hidden>
Date: 2020-03-06 14:00:35
Also in:
linux-btrfs, lkml
On Fri, Mar 06, 2020 at 03:16:53PM +0800, Qu Wenruo wrote:
On 2020/3/6 下午2:52, madhuparnabhowmik10@gmail.com wrote:quoted
From: Madhuparna Bhowmik <redacted> The space_info list is rcu protected. Hence, it should be traversed with rcu_read_lock held. Warning: [ 29.104591] ============================= [ 29.104756] WARNING: suspicious RCU usage [ 29.105046] 5.6.0-rc4-next-20200305 #1 Not tainted [ 29.105231] ----------------------------- [ 29.105401] fs/btrfs/block-group.c:2011 RCU-list traversed in non-reader section!! Reported-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Madhuparna Bhowmik <redacted> --- fs/btrfs/block-group.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index 404e050ce8ee..9cabeef66f5b 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c@@ -1987,6 +1987,7 @@ int btrfs_read_block_groups(struct btrfs_fs_info *info)This function is only triggered at mount time, where no other rcu operation can happen.
Thanks Qu. Joel and Paul, what should we do in this case? Should we just pass cond = true or use list_for_each_entry instead? Thank you, Madhuparna
Thanks, Ququoted
btrfs_release_path(path); } + rcu_read_lock(); list_for_each_entry_rcu(space_info, &info->space_info, list) { if (!(btrfs_get_alloc_profile(info, space_info->flags) & (BTRFS_BLOCK_GROUP_RAID10 |@@ -2007,7 +2008,8 @@ int btrfs_read_block_groups(struct btrfs_fs_info *info) list) inc_block_group_ro(cache, 1); } - + rcu_read_unlock(); + btrfs_init_global_block_rsv(info); ret = check_chunk_block_group_mappings(info); error:
_______________________________________________ Linux-kernel-mentees mailing list Linux-kernel-mentees@lists.linuxfoundation.org https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees