dm thin: wake worker when discard is prepared

When discards are prepared it is best to directly wake the worker that
will process them.  The worker will be woken anyway, via periodic
commit, but there is no reason to not wake_worker here.

Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
This commit is contained in:
Joe Thornber 2012-12-21 20:23:31 +00:00 committed by Alasdair G Kergon
parent e8088073c9
commit 563af186df

View File

@ -2676,10 +2676,13 @@ static int thin_endio(struct dm_target *ti,
if (h->all_io_entry) { if (h->all_io_entry) {
INIT_LIST_HEAD(&work); INIT_LIST_HEAD(&work);
dm_deferred_entry_dec(h->all_io_entry, &work); dm_deferred_entry_dec(h->all_io_entry, &work);
spin_lock_irqsave(&pool->lock, flags); if (!list_empty(&work)) {
list_for_each_entry_safe(m, tmp, &work, list) spin_lock_irqsave(&pool->lock, flags);
list_add(&m->list, &pool->prepared_discards); list_for_each_entry_safe(m, tmp, &work, list)
spin_unlock_irqrestore(&pool->lock, flags); list_add(&m->list, &pool->prepared_discards);
spin_unlock_irqrestore(&pool->lock, flags);
wake_worker(pool);
}
} }
mempool_free(h, pool->endio_hook_pool); mempool_free(h, pool->endio_hook_pool);