Commit 69868beb authored by Mike Snitzer's avatar Mike Snitzer

dm ioctl: assert _hash_lock is held in __hash_remove

Also update dm_early_create() to take _hash_lock when calling both
__get_name_cell and __hash_remove -- given dm_early_create()'s early
boot usecase this locking isn't about correctness but it allows
lockdep_assert_held() to be added to __hash_remove.
Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
parent 76227f6d
...@@ -310,6 +310,8 @@ static struct dm_table *__hash_remove(struct hash_cell *hc) ...@@ -310,6 +310,8 @@ static struct dm_table *__hash_remove(struct hash_cell *hc)
struct dm_table *table; struct dm_table *table;
int srcu_idx; int srcu_idx;
lockdep_assert_held(&_hash_lock);
/* remove from the dev trees */ /* remove from the dev trees */
__unlink_name(hc); __unlink_name(hc);
__unlink_uuid(hc); __unlink_uuid(hc);
...@@ -2263,7 +2265,9 @@ int __init dm_early_create(struct dm_ioctl *dmi, ...@@ -2263,7 +2265,9 @@ int __init dm_early_create(struct dm_ioctl *dmi,
err_destroy_table: err_destroy_table:
dm_table_destroy(t); dm_table_destroy(t);
err_hash_remove: err_hash_remove:
down_write(&_hash_lock);
(void) __hash_remove(__get_name_cell(dmi->name)); (void) __hash_remove(__get_name_cell(dmi->name));
up_write(&_hash_lock);
/* release reference from __get_name_cell */ /* release reference from __get_name_cell */
dm_put(md); dm_put(md);
err_destroy_dm: err_destroy_dm:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment