aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/dm-thin.c11
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);