dm cache: do not add migration to completed list before unhooking bio
authorMike Snitzer <snitzer@redhat.com>
Fri, 31 Jan 2014 19:30:37 +0000 (14:30 -0500)
committerMike Snitzer <snitzer@redhat.com>
Mon, 17 Feb 2014 16:00:05 +0000 (11:00 -0500)
commit80ae49aaed32af72630251eb06161b15cde15ac8
tree02d587182910cb2b259803535ff772a7545f519a
parentc6eda5e81c4fcc77185117255c7419eda771f67f
dm cache: do not add migration to completed list before unhooking bio

When completing an overwrite bio, in overwrite_endio(), the associated
migration should not be added to the 'completed_migrations' until the
bio's fields are restored with dm_unhook_bio().

Otherwise, do_worker() can race to process 'completed_migrations' before
dm_unhook_bio() -- so the bio's bi_end_io is incorrect.  This is
unlikely to cause any problems given the current code but should be
fixed on the basis of correctness.

Also, the cache's spinlock only needs to be held when manipulating the
'completed_migrations' list -- other changes don't need protection.

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