diff options
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/dm-thin.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c index 41c9e81ba74a..aeb9e20f5978 100644 --- a/drivers/md/dm-thin.c +++ b/drivers/md/dm-thin.c | |||
@@ -2676,10 +2676,13 @@ static int thin_endio(struct dm_target *ti, | |||
2676 | if (h->all_io_entry) { | 2676 | if (h->all_io_entry) { |
2677 | INIT_LIST_HEAD(&work); | 2677 | INIT_LIST_HEAD(&work); |
2678 | dm_deferred_entry_dec(h->all_io_entry, &work); | 2678 | dm_deferred_entry_dec(h->all_io_entry, &work); |
2679 | spin_lock_irqsave(&pool->lock, flags); | 2679 | if (!list_empty(&work)) { |
2680 | list_for_each_entry_safe(m, tmp, &work, list) | 2680 | spin_lock_irqsave(&pool->lock, flags); |
2681 | list_add(&m->list, &pool->prepared_discards); | 2681 | list_for_each_entry_safe(m, tmp, &work, list) |
2682 | spin_unlock_irqrestore(&pool->lock, flags); | 2682 | list_add(&m->list, &pool->prepared_discards); |
2683 | spin_unlock_irqrestore(&pool->lock, flags); | ||
2684 | wake_worker(pool); | ||
2685 | } | ||
2683 | } | 2686 | } |
2684 | 2687 | ||
2685 | mempool_free(h, pool->endio_hook_pool); | 2688 | mempool_free(h, pool->endio_hook_pool); |