diff options
author | Mikulas Patocka <mpatocka@redhat.com> | 2010-08-12 04:13:51 +0100 |
---|---|---|
committer | Alasdair G Kergon <agk@redhat.com> | 2010-08-12 04:13:51 +0100 |
commit | c24110450650f17f7d3ba4fbe01f01ac5a115456 (patch) | |
tree | 8b5bff17f77c995099d93b2b4a32bc306962a0bf /drivers/md/dm-exception-store.c | |
parent | 1e5554c8428bc7209a83e2d07ca724be4d981ce3 (diff) | |
download | blackbird-op-linux-c24110450650f17f7d3ba4fbe01f01ac5a115456.tar.gz blackbird-op-linux-c24110450650f17f7d3ba4fbe01f01ac5a115456.zip |
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.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/md/dm-exception-store.c b/drivers/md/dm-exception-store.c index 2b7907b6dd09..0bdb201c2c2a 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; } |