Thread (6 messages) 6 messages, 4 authors, 2020-03-06

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,
Qu
quoted
 		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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help