dm cache: fix problematic dual use of a single migration count variable
authorJoe Thornber <ejt@redhat.com>
Fri, 23 Jan 2015 10:16:16 +0000 (10:16 +0000)
committerJiri Slaby <jslaby@suse.cz>
Thu, 29 Jan 2015 14:45:00 +0000 (15:45 +0100)
commit8dc75a54f3dc579f615840c4200b17b17665bce7
tree7a214c803226209c070f02e91b206935fd148e8a
parenta3d35a1cfa10472d5c73df43badda7618407c4f6
dm cache: fix problematic dual use of a single migration count variable

commit a59db67656021fa212e9b95a583f13c34eb67cd9 upstream.

Introduce a new variable to count the number of allocated migration
structures.  The existing variable cache->nr_migrations became
overloaded.  It was used to:

 i) track of the number of migrations in flight for the purposes of
    quiescing during suspend.

 ii) to estimate the amount of background IO occuring.

Recent discard changes meant that REQ_DISCARD bios are processed with
a migration.  Discards are not background IO so nr_migrations was not
incremented.  However this could cause quiescing to complete early.

(i) is now handled with a new variable cache->nr_allocated_migrations.
cache->nr_migrations has been renamed cache->nr_io_migrations.
cleanup_migration() is now called free_io_migration(), since it
decrements that variable.

Also, remove the unused cache->next_migration variable that got replaced
with with prealloc_structs a while ago.

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