dm stripe: fix size test
authorMikulas Patocka <mpatocka@redhat.com>
Fri, 27 Jul 2012 14:08:00 +0000 (15:08 +0100)
committerAlasdair G Kergon <agk@redhat.com>
Fri, 27 Jul 2012 14:08:00 +0000 (15:08 +0100)
dm-stripe is supposed to ensure that all the space allocated to the
stripes is fully used and that all stripes are the same size.  This
patch fixes the test.  It checks that device length is divisible by the
chunk size and checks that the resulting quotient is divisible by the
number of stripes (which is equivalent to testing if device length is
divisible by chunk_size * stripes).

Previously, the code only tested that the number of sectors in the target
was divisible by each of the chunk size and the number of stripes
separately, which could leave entire stripes unused.

(A setup that genuinely needs some stripes to be shorter than others
can be created by concatenating striped targets.)

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Documentation/device-mapper/striped.txt
drivers/md/dm-stripe.c

index f34d3236b9da838e0a3e81516e135b914f5577ee..953fe1d68068fd5b94ee1143f0969102d96be809 100644 (file)
@@ -16,8 +16,7 @@ Parameters: <num devs> <chunk size> [<dev path> <offset>]+
     <offset>: Starting sector within the device.
 
 One or more underlying devices can be specified. The striped device size must
-be a multiple of the chunk size and a multiple of the number of underlying
-devices.
+be a multiple of the chunk size multiplied by the number of underlying devices.
 
 
 Example scripts
index 183db5d3e48e4d6f57074c7642be2f36b44c985b..1f6316ed2b318a8906ecbbcde69f488c165885dd 100644 (file)
@@ -132,7 +132,6 @@ static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
                return -EINVAL;
        }
 
-       width = ti->len;
        if (sector_div(width, stripes)) {
                ti->error = "Target length not divisible by "
                    "number of stripes";