aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/dm-snap.c
diff options
context:
space:
mode:
authorAlasdair G Kergon <agk@redhat.com>2006-06-26 03:27:18 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-26 12:58:34 -0400
commitc51c2752491e5e771de6c8861a85ba46752d7888 (patch)
tree9371dab2a38e1a17bf91d9bc143b47b1c58c5fb7 /drivers/md/dm-snap.c
parentb877a96409a3a99f2ce27b3c6473c9b28298ac7c (diff)
[PATCH] dm snapshot: unify chunk_size
Persistent snapshots currently store a private copy of the chunk size. Userspace also supplies the chunk size when loading a snapshot. Ensure consistency by only storing the chunk_size in one place instead of two. Currently the two sizes will differ if the chunk size supplied by userspace does not match the chunk size an existing snapshot actually uses. Amongst other problems, this causes an incorrect 'percentage full' to be reported. The patch ensures consistency by only storing the chunk_size in one place, removing it from struct pstore. Some initialisation is delayed until the correct chunk_size is known. If read_header() discovers that the wrong chunk size was supplied, the 'area' buffer (which the header already got read into) is reinitialised to the correct size. [akpm: too late for 2.6.17 - suitable for 2.6.17.x after it has settled] Signed-off-by: Alasdair G Kergon <agk@redhat.com> Cc: <stable@kernel.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/md/dm-snap.c')
-rw-r--r--drivers/md/dm-snap.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
index 08312b46463a..b84bc1aae353 100644
--- a/drivers/md/dm-snap.c
+++ b/drivers/md/dm-snap.c
@@ -530,7 +530,7 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)
530 } 530 }
531 531
532 ti->private = s; 532 ti->private = s;
533 ti->split_io = chunk_size; 533 ti->split_io = s->chunk_size;
534 534
535 return 0; 535 return 0;
536 536
@@ -1204,7 +1204,7 @@ static int origin_status(struct dm_target *ti, status_type_t type, char *result,
1204 1204
1205static struct target_type origin_target = { 1205static struct target_type origin_target = {
1206 .name = "snapshot-origin", 1206 .name = "snapshot-origin",
1207 .version = {1, 1, 0}, 1207 .version = {1, 4, 0},
1208 .module = THIS_MODULE, 1208 .module = THIS_MODULE,
1209 .ctr = origin_ctr, 1209 .ctr = origin_ctr,
1210 .dtr = origin_dtr, 1210 .dtr = origin_dtr,
@@ -1215,7 +1215,7 @@ static struct target_type origin_target = {
1215 1215
1216static struct target_type snapshot_target = { 1216static struct target_type snapshot_target = {
1217 .name = "snapshot", 1217 .name = "snapshot",
1218 .version = {1, 1, 0}, 1218 .version = {1, 4, 0},
1219 .module = THIS_MODULE, 1219 .module = THIS_MODULE,
1220 .ctr = snapshot_ctr, 1220 .ctr = snapshot_ctr,
1221 .dtr = snapshot_dtr, 1221 .dtr = snapshot_dtr,