From 6a7f897752a24afb391b3766cc33be3e28a1074b Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Fri, 21 Dec 2012 20:23:31 +0000 Subject: [PATCH] --- yaml --- r: 347945 b: refs/heads/master c: 563af186df08002d2600c4e718ad8f3bde109f53 h: refs/heads/master i: 347943: 5d41052ed92f64a51d7426740b4936ee2633a17a v: v3 --- [refs] | 2 +- trunk/drivers/md/dm-thin.c | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 31ccc89e1a59..30c404a5b50c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e8088073c9610af017fd47fddd104a2c3afb32e8 +refs/heads/master: 563af186df08002d2600c4e718ad8f3bde109f53 diff --git a/trunk/drivers/md/dm-thin.c b/trunk/drivers/md/dm-thin.c index 41c9e81ba74a..aeb9e20f5978 100644 --- a/trunk/drivers/md/dm-thin.c +++ b/trunk/drivers/md/dm-thin.c @@ -2676,10 +2676,13 @@ static int thin_endio(struct dm_target *ti, if (h->all_io_entry) { INIT_LIST_HEAD(&work); dm_deferred_entry_dec(h->all_io_entry, &work); - spin_lock_irqsave(&pool->lock, flags); - list_for_each_entry_safe(m, tmp, &work, list) - list_add(&m->list, &pool->prepared_discards); - spin_unlock_irqrestore(&pool->lock, flags); + if (!list_empty(&work)) { + spin_lock_irqsave(&pool->lock, flags); + list_for_each_entry_safe(m, tmp, &work, list) + list_add(&m->list, &pool->prepared_discards); + spin_unlock_irqrestore(&pool->lock, flags); + wake_worker(pool); + } } mempool_free(h, pool->endio_hook_pool);