]> www.infradead.org Git - users/jedix/linux-maple.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 3 Aug 2015 16:29:06 +0000 (09:29 -0700)
commit3bf9ad4c48534dd0d7f201e315c340069a244664
treee8c67d1dbdbfb91a308d77694192b91a5c83cb77
parent0906f9b902c18323bd82945a272432ba3330191a
dm cache: fix race when issuing a POLICY_REPLACE operation

commit fb4100ae7f312c3d614b37621c2b17b3b7cf65f8 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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