|
@@ -3101,6 +3101,7 @@ static int thin_ctr(struct dm_target *ti, unsigned argc, char **argv)
|
|
|
struct thin_c *tc;
|
|
|
struct dm_dev *pool_dev, *origin_dev;
|
|
|
struct mapped_device *pool_md;
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
mutex_lock(&dm_thin_pool_table.mutex);
|
|
|
|
|
@@ -3191,9 +3192,9 @@ static int thin_ctr(struct dm_target *ti, unsigned argc, char **argv)
|
|
|
|
|
|
mutex_unlock(&dm_thin_pool_table.mutex);
|
|
|
|
|
|
- spin_lock(&tc->pool->lock);
|
|
|
+ spin_lock_irqsave(&tc->pool->lock, flags);
|
|
|
list_add_tail_rcu(&tc->list, &tc->pool->active_thins);
|
|
|
- spin_unlock(&tc->pool->lock);
|
|
|
+ spin_unlock_irqrestore(&tc->pool->lock, flags);
|
|
|
/*
|
|
|
* This synchronize_rcu() call is needed here otherwise we risk a
|
|
|
* wake_worker() call finding no bios to process (because the newly
|