[dm-devel] [PATCH 4/4] Test chunk size against both origin and snapshot sector size
Mike Snitzer
snitzer at redhat.com
Mon Mar 15 14:52:24 UTC 2010
On Mon, Mar 15 2010 at 2:04am -0400,
Mikulas Patocka <mpatocka at redhat.com> wrote:
> Test 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 unaligned to sector size is not allowed
> and causes immediate errors.
>
> Signed-off-by: Mikulas Patocka <mpatocka at redhat.com>
>
> ---
> drivers/md/dm-exception-store.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> Index: linux-2.6.34-rc1-devel/drivers/md/dm-exception-store.c
> ===================================================================
> --- linux-2.6.34-rc1-devel.orig/drivers/md/dm-exception-store.c 2010-03-12 14:38:31.000000000 +0100
> +++ linux-2.6.34-rc1-devel/drivers/md/dm-exception-store.c 2010-03-12 14:39:56.000000000 +0100
> @@ -173,7 +173,9 @@ int dm_exception_store_set_chunk_size(st
>
> /* 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;
> }
Shouldn't we split these checks out so that we can have more precise
error reporting? Ideally we'd share that chunk_size was not a multiple
of the "origin" or "snapshot" device's blocksize.
I was also thinking that we should avoid using %, e.g.:
(chunk_size & (bdev_logical_block_size(...) - 1))
but AFAIK bdev_logical_block_size() may not be a power of 2 (MD allows
for obscure non-power of 2 blocksizes doesn't it? Or is that just for
MD chunk and stripe size?).
Mike
More information about the dm-devel
mailing list