--- x/drivers/md/dm-table.c +++ y/drivers/md/dm-table.c @@ -400,8 +400,8 @@ int dm_get_device(struct dm_target *ti, if (r) return r; } - refcount_inc(&dd->count); out: + refcount_inc(&dd->count); *result = dd->dm_dev; return 0; } --- x/drivers/md/dm-snap.c +++ y/drivers/md/dm-snap.c @@ -1390,6 +1390,7 @@ static int snapshot_ctr(struct dm_target if (r) goto bad_read_metadata; + dm_put_device(ti, s->cow); return 0; bad_read_metadata: