]> git.baikalelectronics.ru Git - kernel.git/commit
dm cache: fix race condition in the writeback mode overwrite_bio optimisation
authorJoe Thornber <ejt@redhat.com>
Fri, 10 Nov 2017 12:53:31 +0000 (07:53 -0500)
committerMike Snitzer <snitzer@redhat.com>
Fri, 10 Nov 2017 20:43:39 +0000 (15:43 -0500)
commit0d775ec9db57880527a4fc7171f49d2f1ffc87a1
tree55b36baaa68a1c813e457e4d20c734ba353886f5
parent909a6fc7566a74ea60bf6e0ffe3d3e21fc2adf03
dm cache: fix race condition in the writeback mode overwrite_bio optimisation

When a DM cache in writeback mode moves data between the slow and fast
device it can often avoid a copy if the triggering bio either:

i) covers the whole block (no point copying if we're about to overwrite it)
ii) the migration is a promotion and the origin block is currently discarded

Prior to this fix there was a race with case (ii).  The discard status
was checked with a shared lock held (rather than exclusive).  This meant
another bio could run in parallel and write data to the origin, removing
the discard state.  After the promotion the parallel write would have
been lost.

With this fix the discard status is re-checked once the exclusive lock
has been aquired.  If the block is no longer discarded it falls back to
the slower full copy path.

Fixes: 908856e35 ("dm cache: significant rework to leverage dm-bio-prison-v2")
Cc: stable@vger.kernel.org # v4.12+
Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-cache-target.c