Route all requests for origin to the merging snapshot. Signed-off-by: Mikulas Patocka --- drivers/md/dm-snap.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) Index: linux-2.6.26-rc5-devel/drivers/md/dm-snap.c =================================================================== --- linux-2.6.26-rc5-devel.orig/drivers/md/dm-snap.c 2008-06-17 01:20:09.000000000 +0200 +++ linux-2.6.26-rc5-devel/drivers/md/dm-snap.c 2008-06-17 01:20:14.000000000 +0200 @@ -1607,12 +1607,18 @@ { int r; struct dm_dev *dev = ti->private; + struct dm_snapshot *snap; down_read(&_origins_lock); - bio->bi_bdev = dev->bdev; - /* Only tell snapshots if this is a write */ - r = (bio_rw(bio) == WRITE) ? do_origin(dev, bio) : DM_MAPIO_REMAPPED; + snap = __find_merging_snapshot(dev->bdev); + if (snap) { + r = snapshot_merge_map(snap->ti, bio, map_context); + } else { + bio->bi_bdev = dev->bdev; + /* Only tell snapshots if this is a write */ + r = (bio_rw(bio) == WRITE) ? do_origin(dev, bio) : DM_MAPIO_REMAPPED; + } up_read(&_origins_lock); @@ -1667,6 +1673,7 @@ .ctr = origin_ctr, .dtr = origin_dtr, .map = origin_map, + .end_io = snapshot_end_io, .resume = origin_resume, .postsuspend = origin_postsuspend, .status = origin_status,