]> git.baikalelectronics.ru Git - kernel.git/commit
dm cache: fix race when issuing a POLICY_REPLACE operation
authorJoe Thornber <ejt@redhat.com>
Wed, 20 May 2015 09:30:32 +0000 (10:30 +0100)
committerMike Snitzer <snitzer@redhat.com>
Fri, 29 May 2015 18:19:03 +0000 (14:19 -0400)
commit5af18cd0fb55371ded67dd0698745e0ab333fc93
tree076d909add3b63a14d43474fc1395d339fef2a86
parentd92b2ea992cb3bc7ae49adb8e5e81876a1e56c7d
dm cache: fix race when issuing a POLICY_REPLACE operation

There is a race between a policy deciding to replace a cache entry,
the core target writing back any dirty data from this block, and other
IO threads doing IO to the same block.

This sort of problem is avoided most of the time by the core target
grabbing a bio prison cell before making the request to the policy.
But for a demotion the core target doesn't know which block will be
demoted, so can't do this in advance.

Fix this demotion race by introducing a callback to the policy interface
that allows the policy to grab the cell on behalf of the core target.

Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Cc: stable@vger.kernel.org
drivers/md/dm-cache-policy-cleaner.c
drivers/md/dm-cache-policy-internal.h
drivers/md/dm-cache-policy-mq.c
drivers/md/dm-cache-policy.h
drivers/md/dm-cache-target.c