aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md
diff options
context:
space:
mode:
authorJoe Thornber <ejt@redhat.com>2014-11-28 04:48:25 -0500
committerMike Snitzer <snitzer@redhat.com>2014-12-01 11:30:13 -0500
commitf824a2af3dfbbb766c02e19df21f985bceadf0ee (patch)
tree64efe7b50085b22bf281825e34af5f8fc11a5372 /drivers/md
parent1e32134a5a404e80bfb47fad8a94e9bbfcbdacc5 (diff)
dm cache: fix spurious cell_defer when dealing with partial block at end of device
We never bother caching a partial block that is at the back end of the origin device. No cell ever gets locked, but the calling code was assuming it was and trying to release it. Now the code only releases if the cell has been set to a non NULL value. Signed-off-by: Joe Thornber <ejt@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com> Cc: stable@vger.kernel.org
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/dm-cache-target.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
index 1a090de0c4b8..1e96d7889f51 100644
--- a/drivers/md/dm-cache-target.c
+++ b/drivers/md/dm-cache-target.c
@@ -2690,11 +2690,11 @@ static int __cache_map(struct cache *cache, struct bio *bio, struct dm_bio_priso
2690static int cache_map(struct dm_target *ti, struct bio *bio) 2690static int cache_map(struct dm_target *ti, struct bio *bio)
2691{ 2691{
2692 int r; 2692 int r;
2693 struct dm_bio_prison_cell *cell; 2693 struct dm_bio_prison_cell *cell = NULL;
2694 struct cache *cache = ti->private; 2694 struct cache *cache = ti->private;
2695 2695
2696 r = __cache_map(cache, bio, &cell); 2696 r = __cache_map(cache, bio, &cell);
2697 if (r == DM_MAPIO_REMAPPED) { 2697 if (r == DM_MAPIO_REMAPPED && cell) {
2698 inc_ds(cache, bio, cell); 2698 inc_ds(cache, bio, cell);
2699 cell_defer(cache, cell, false); 2699 cell_defer(cache, cell, false);
2700 } 2700 }