summaryrefslogtreecommitdiffstats
path: root/drivers/md/dm-exception-store.c
diff options
context:
space:
mode:
authorMikulas Patocka <mpatocka@redhat.com>2010-08-12 04:13:51 +0100
committerAlasdair G Kergon <agk@redhat.com>2010-08-12 04:13:51 +0100
commitc24110450650f17f7d3ba4fbe01f01ac5a115456 (patch)
tree8b5bff17f77c995099d93b2b4a32bc306962a0bf /drivers/md/dm-exception-store.c
parent1e5554c8428bc7209a83e2d07ca724be4d981ce3 (diff)
downloadlinux-0-day-c24110450650f17f7d3ba4fbe01f01ac5a115456.tar.gz
linux-0-day-c24110450650f17f7d3ba4fbe01f01ac5a115456.tar.xz
dm snapshot: test chunk size against both origin and snapshot
Validate chunk size against both origin and snapshot sector size Don't allow chunk size smaller than either origin or snapshot logical sector size. Reading or writing data not aligned to sector size is not allowed and causes immediate errors. This requires us to open the origin before initialising the exception store and to export dm_snap_origin. Cc: stable@kernel.org Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Reviewed-by: Mike Snitzer <snitzer@redhat.com> Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Diffstat (limited to 'drivers/md/dm-exception-store.c')
-rw-r--r--drivers/md/dm-exception-store.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/md/dm-exception-store.c b/drivers/md/dm-exception-store.c
index 2b7907b6dd094..0bdb201c2c2af 100644
--- a/drivers/md/dm-exception-store.c
+++ b/drivers/md/dm-exception-store.c
@@ -173,7 +173,9 @@ int dm_exception_store_set_chunk_size(struct dm_exception_store *store,
/* Validate the chunk size against the device block size */
if (chunk_size %
- (bdev_logical_block_size(dm_snap_cow(store->snap)->bdev) >> 9)) {
+ (bdev_logical_block_size(dm_snap_cow(store->snap)->bdev) >> 9) ||
+ chunk_size %
+ (bdev_logical_block_size(dm_snap_origin(store->snap)->bdev) >> 9)) {
*error = "Chunk size is not a multiple of device blocksize";
return -EINVAL;
}