From: Mikulas Patocka Date: Thu, 10 Dec 2009 23:52:36 +0000 (+0000) Subject: dm snapshot: use merge origin if snapshot invalid X-Git-Tag: v2.6.33-rc1~75^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d2fdb776e08d4231d7e86a879cc663a93913c202;p=profile%2Fcommon%2Fkernel-common.git dm snapshot: use merge origin if snapshot invalid If the snapshot we are merging became invalid (e.g. it ran out of space) redirect all I/O directly to the origin device. Signed-off-by: Mikulas Patocka Reviewed-by: Mike Snitzer Signed-off-by: Alasdair G Kergon --- diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c index 4c80e82..ee8eb28 100644 --- a/drivers/md/dm-snap.c +++ b/drivers/md/dm-snap.c @@ -1699,11 +1699,9 @@ static int snapshot_merge_map(struct dm_target *ti, struct bio *bio, down_write(&s->lock); - /* Full snapshots are not usable */ - if (!s->valid) { - r = -EIO; - goto out_unlock; - } + /* Full merging snapshots are redirected to the origin */ + if (!s->valid) + goto redirect_to_origin; /* If the block is already remapped - use that */ e = dm_lookup_exception(&s->complete, chunk); @@ -1726,6 +1724,7 @@ static int snapshot_merge_map(struct dm_target *ti, struct bio *bio, goto out_unlock; } +redirect_to_origin: bio->bi_bdev = s->origin->bdev; if (bio_rw(bio) == WRITE) {