Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

dm: Use rcu_dereference() for accessing rcu pointer

The map field in 'struct mapped_device' is an rcu pointer. Use rcu_dereference()
while accessing it.

Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>

authored by

Pranith Kumar and committed by
Mike Snitzer
33423974 42d6a8ce

+4 -4
+4 -4
drivers/md/dm.c
··· 2332 2332 2333 2333 merge_is_optional = dm_table_merge_is_optional(t); 2334 2334 2335 - old_map = md->map; 2335 + old_map = rcu_dereference(md->map); 2336 2336 rcu_assign_pointer(md->map, t); 2337 2337 md->immutable_target_type = dm_table_get_immutable_target_type(t); 2338 2338 ··· 2351 2351 */ 2352 2352 static struct dm_table *__unbind(struct mapped_device *md) 2353 2353 { 2354 - struct dm_table *map = md->map; 2354 + struct dm_table *map = rcu_dereference(md->map); 2355 2355 2356 2356 if (!map) 2357 2357 return NULL; ··· 2745 2745 goto out_unlock; 2746 2746 } 2747 2747 2748 - map = md->map; 2748 + map = rcu_dereference(md->map); 2749 2749 2750 2750 /* 2751 2751 * DMF_NOFLUSH_SUSPENDING must be set before presuspend. ··· 2839 2839 if (!dm_suspended_md(md)) 2840 2840 goto out; 2841 2841 2842 - map = md->map; 2842 + map = rcu_dereference(md->map); 2843 2843 if (!map || !dm_table_get_size(map)) 2844 2844 goto out; 2845 2845