Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 734a3fb2 authored by Joe Thornber's avatar Joe Thornber Committed by Greg Kroah-Hartman
Browse files

dm cache: fix spurious cell_defer when dealing with partial block at end of device



commit f824a2af3dfbbb766c02e19df21f985bceadf0ee upstream.

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: default avatarJoe Thornber <ejt@redhat.com>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 7a9cdc4c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -2554,11 +2554,11 @@ static int __cache_map(struct cache *cache, struct bio *bio, struct dm_bio_priso
static int cache_map(struct dm_target *ti, struct bio *bio)
{
	int r;
	struct dm_bio_prison_cell *cell;
	struct dm_bio_prison_cell *cell = NULL;
	struct cache *cache = ti->private;

	r = __cache_map(cache, bio, &cell);
	if (r == DM_MAPIO_REMAPPED) {
	if (r == DM_MAPIO_REMAPPED && cell) {
		inc_ds(cache, bio, cell);
		cell_defer(cache, cell, false);
	}