dm cache: wake the worker thread every time we free a migration object
authorJoe Thornber <ejt@redhat.com>
Wed, 27 May 2015 14:39:45 +0000 (15:39 +0100)
committerMike Snitzer <snitzer@redhat.com>
Thu, 11 Jun 2015 21:13:00 +0000 (17:13 -0400)
When the cache is idle, writeback work was only being issued every
second.  With this change outstanding writebacks are streamed
constantly.  This offers a writeback performance improvement.

Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-cache-target.c

index 7829d947ef011d5bb2faeac230c48da91280cbc4..6d36ed3c46a0c1f91328f3c3365a37d64509ab41 100644 (file)
@@ -418,10 +418,13 @@ static struct dm_cache_migration *alloc_migration(struct cache *cache)
 
 static void free_migration(struct dm_cache_migration *mg)
 {
-       if (atomic_dec_and_test(&mg->cache->nr_allocated_migrations))
-               wake_up(&mg->cache->migration_wait);
+       struct cache *cache = mg->cache;
+
+       if (atomic_dec_and_test(&cache->nr_allocated_migrations))
+               wake_up(&cache->migration_wait);
 
-       mempool_free(mg, mg->cache->migration_pool);
+       mempool_free(mg, cache->migration_pool);
+       wake_worker(cache);
 }
 
 static int prealloc_data_structs(struct cache *cache, struct prealloc *p)