dm snapshot: merge consecutive chunks together
authorMike Snitzer <snitzer@redhat.com>
Thu, 10 Dec 2009 23:52:34 +0000 (23:52 +0000)
committerAlasdair G Kergon <agk@redhat.com>
Thu, 10 Dec 2009 23:52:34 +0000 (23:52 +0000)
commit8a2d528620e228ddfd0df9cec0a16e034ff8db1d
treeff93eac3e996df7bf046d08c7386d690c3fd5ee0
parent73dfd078cf8bfee4018fb22f1e2a24f2e05b69dc
dm snapshot: merge consecutive chunks together

s->store->type->prepare_merge returns the number of chunks that can be
copied linearly working backwards from the returned chunk number.

For example, if it returns 3 chunks with old_chunk == 10 and new_chunk
== 20, then chunk 20 can be copied to 10, chunk 19 to 9 and 18 to 8.

Until now kcopyd only copied one chunk at a time.  This patch now copies
the full set at once.

Consequently, snapshot_merge_process() needs to delay the merging of all
chunks if any have writes in progress, not just the first chunk in the
region that is to be merged.

snapshot-merge's performance is now comparable to the original
snapshot-origin target.

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
drivers/md/dm-snap.c