diff options
author | Phong Tran <tranmanphong@gmail.com> | 2019-12-13 16:33:07 +0100 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2019-12-16 03:41:04 +0100 |
commit | 69000d82eee1b41d88afc75861153b7e514bb777 (patch) | |
tree | 90f4ee752cedf1a70ee1eafcf96791e83703859c /fs/ext4/block_validity.c | |
parent | ext4: validate the debug_want_extra_isize mount option at parse time (diff) | |
download | linux-69000d82eee1b41d88afc75861153b7e514bb777.tar.xz linux-69000d82eee1b41d88afc75861153b7e514bb777.zip |
ext4: use RCU API in debug_print_tree
struct ext4_sb_info.system_blks was marked __rcu.
But access the pointer without using RCU lock and dereference.
Sparse warning with __rcu notation:
block_validity.c:139:29: warning: incorrect type in argument 1 (different address spaces)
block_validity.c:139:29: expected struct rb_root const *
block_validity.c:139:29: got struct rb_root [noderef] <asn:4> *
Link: https://lore.kernel.org/r/20191213153306.30744-1-tranmanphong@gmail.com
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Phong Tran <tranmanphong@gmail.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/block_validity.c')
-rw-r--r-- | fs/ext4/block_validity.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/ext4/block_validity.c b/fs/ext4/block_validity.c index d4d4fdfac1a6..1ee04e76bbe0 100644 --- a/fs/ext4/block_validity.c +++ b/fs/ext4/block_validity.c @@ -133,10 +133,13 @@ static void debug_print_tree(struct ext4_sb_info *sbi) { struct rb_node *node; struct ext4_system_zone *entry; + struct ext4_system_blocks *system_blks; int first = 1; printk(KERN_INFO "System zones: "); - node = rb_first(&sbi->system_blks->root); + rcu_read_lock(); + system_blks = rcu_dereference(sbi->system_blks); + node = rb_first(&system_blks->root); while (node) { entry = rb_entry(node, struct ext4_system_zone, node); printk(KERN_CONT "%s%llu-%llu", first ? "" : ", ", @@ -144,6 +147,7 @@ static void debug_print_tree(struct ext4_sb_info *sbi) first = 0; node = rb_next(node); } + rcu_read_unlock(); printk(KERN_CONT "\n"); } |