]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Create: round off size for RAID1 arrays.
authorNeilBrown <neilb@suse.de>
Thu, 22 Mar 2012 05:53:51 +0000 (16:53 +1100)
committerNeilBrown <neilb@suse.de>
Thu, 22 Mar 2012 05:53:51 +0000 (16:53 +1100)
RAID1 arrays don't have a chunk size, but if you ever convert
one to RAID5 you will need at least a small one >= 4K.
So round of size to a multiple of 64K.

This only affect Create, not "--grow --size=max".  The latter
is too hard and with smaller returns.

Signed-off-by: NeilBrown <neilb@suse.de>
18 files changed:
Create.c
tests/00raid1
tests/05r1-bitmapfile
tests/05r1-grow-external
tests/05r1-grow-internal
tests/05r1-grow-internal-1
tests/05r1-internalbitmap
tests/05r1-internalbitmap-v1a
tests/05r1-internalbitmap-v1b
tests/05r1-internalbitmap-v1c
tests/05r1-n3-bitmapfile
tests/05r1-re-add
tests/05r1-re-add-nosuper
tests/06wrmostly
tests/07autoassemble
tests/09imsm-assemble
tests/09imsm-create-fail-rebuild
tests/10ddf-create

index f73591fcd2d045de0130d2854c32f868ce670bb5..58d106877315828a88245cacaa967e2fffff280f 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -280,6 +280,13 @@ int Create(struct supertype *st, char *mddev,
 
        if (size == 0) {
                size = newsize / 2;
+               if (level == 1)
+                       /* If this is ever reshaped to RAID5, we will
+                        * need a chunksize.  So round it off a bit
+                        * now just to be safe
+                        */
+                       size &= ~(64ULL-1);
+
                if (size && verbose > 0)
                        fprintf(stderr, Name ": setting size to %lluK\n",
                                (unsigned long long)size);
@@ -482,6 +489,12 @@ int Create(struct supertype *st, char *mddev,
                                return 1;
                        }
                        size = minsize;
+                       if (level == 1)
+                               /* If this is ever reshaped to RAID5, we will
+                                * need a chunksize.  So round it off a bit
+                                * now just to be safe
+                                */
+                               size &= ~(64ULL-1);
                        if (verbose > 0)
                                fprintf(stderr, Name ": size set to %lluK\n", size);
                }
index e91c58665d5331d096a1a0d217f08c575b7388fc..eb9a658c6ccc68a28fd74ceda1a55fcfa3b1374f 100644 (file)
@@ -6,14 +6,14 @@
 mdadm -CR $md0 -l 1 -n2 $dev0 $dev1 
 check resync
 check raid1
-testdev $md0 1 $mdsize1a 1
+testdev $md0 1 $mdsize1a 64
 mdadm -S $md0
 
 # now with version-0.90 superblock, spare
 mdadm -CR $md0 -e0.90 --level=raid1 -n3 -x2 $dev0 missing missing $dev1 $dev2 
 check recovery
 check raid1
-testdev $md0 1 $mdsize0 1
+testdev $md0 1 $mdsize0 64
 mdadm -S $md0
 
 # now with no superblock
index 953613d71ae41a7e9dc766be6b7eff54b14611a2..e1fc3de83ed678a9ecf5baea57640b9553819c5e 100644 (file)
@@ -6,11 +6,11 @@ bmf=$targetdir/bitmap
 rm -f $bmf
 mdadm --create --run $md0 --level=1 -n2 --delay=1  --bitmap $bmf $dev1 $dev2  
 check wait
-testdev $md0 1 $mdsize1a 1
+testdev $md0 1 $mdsize1a 64
 mdadm -S $md0
 
 mdadm --assemble $md0 --bitmap=$bmf $dev1 $dev2
-testdev $md0 1 $mdsize1a 1
+testdev $md0 1 $mdsize1a 64
 dirty1=`mdadm -X $bmf | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 sleep 4
 dirty2=`mdadm -X $bmf | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
@@ -20,7 +20,7 @@ then  echo >&2 "ERROR bad 'dirty' counts: $dirty1 and $dirty2"
   exit 1
 fi
 mdadm $md0 -f $dev1
-testdev $md0 1 $mdsize1a 1
+testdev $md0 1 $mdsize1a 64
 sleep 4
 dirty3=`mdadm -X $bmf | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 if [ $dirty3 -lt 400 ]
index 0d93adbb5fc20b74ad5855f6bca2aa7455235400..496663695619c9020cd66672fba59710302e1a3f 100644 (file)
@@ -4,7 +4,7 @@
 #
 mdadm --create --run $md0 -l 1 -n 2 $dev1 $dev2
 check wait
-testdev $md0 1 $mdsize1a 1
+testdev $md0 1 $mdsize1a 64
 
 bmf=$targetdir/bm
 rm -f $bmf
@@ -14,7 +14,7 @@ dirty1=`mdadm -X $bmf | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 sleep 4
 dirty2=`mdadm -X $bmf | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 
-testdev $md0 1 $mdsize1a 1
+testdev $md0 1 $mdsize1a 64
 dirty3=`mdadm -X $bmf | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 sleep 4
 dirty4=`mdadm -X $bmf | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
index f1dbe8e221c636d6949c6e9f0e30bf8a3232f6df..a648b440508b77c396bb4ac748d41d1a3901b823 100644 (file)
@@ -4,7 +4,7 @@
 #
 mdadm --create --run $md0 -l 1 -n 2 $dev1 $dev2
 check wait
-testdev $md0 1 $mdsize1a 1
+testdev $md0 1 $mdsize1a 64
 
 #mdadm -E $dev1
 mdadm --grow $md0 --bitmap=internal --bitmap-chunk=4 --delay=1 || { mdadm -X $dev2 ; exit 1; }
@@ -12,7 +12,7 @@ dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 sleep 4
 dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 
-testdev $md0 1 $mdsize1a 1
+testdev $md0 1 $mdsize1a 64
 dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 sleep 4
 dirty4=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
index 7539fadf602702b4dbe5a15a16bba3896ce287d9..a110f3b0cb09876634a2e6e0b84208c32c64d54f 100644 (file)
@@ -4,7 +4,7 @@
 #
 mdadm --create --run $md0 -e1 -l 1 -n 2 $dev1 $dev2
 check wait
-testdev $md0 1 $mdsize1b 1
+testdev $md0 1 $mdsize1b 64
 
 #mdadm -E $dev1
 mdadm --grow $md0 --bitmap=internal --bitmap-chunk=4 --delay=1
@@ -12,7 +12,7 @@ dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 sleep 4
 dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 
-testdev $md0 1 $mdsize1b 1
+testdev $md0 1 $mdsize1b 64
 dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 sleep 4
 dirty4=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
index 68d65e428aa0c53f150d0e9c3f9fdf34f41a7b08..2bfeab8ebdf6e0a13caa050a1f8de46193e53107 100644 (file)
@@ -4,11 +4,11 @@
 #
 mdadm --create -e0.90 --run $md0 --level=1 -n2 --delay=1  --bitmap internal --bitmap-chunk=4 $dev1 $dev2  
 check wait
-testdev $md0 1 $mdsize0 1
+testdev $md0 1 $mdsize0 64
 mdadm -S $md0
 
 mdadm --assemble $md0 $dev1 $dev2
-testdev $md0 1 $mdsize0 1
+testdev $md0 1 $mdsize0 64
 dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 sleep 4
 dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
@@ -18,7 +18,7 @@ then  echo >&2 "ERROR bad 'dirty' counts: $dirty1 and $dirty2"
   exit 1
 fi
 mdadm $md0 -f $dev1
-testdev $md0 1 $mdsize0 1
+testdev $md0 1 $mdsize0 64
 sleep 4
 dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 if [ $dirty3 -lt 400 ]
index f9b08e8c94012b1525f272db3d5f8d9a75763f04..3fcb0249050567b733b57fc1ab8950c520799d8b 100644 (file)
@@ -5,11 +5,11 @@
 mdadm --create --run $md0 --metadata=1.0 --level=1 -n2 --delay=1  --bitmap internal --bitmap-chunk=4 $dev1 $dev2  
 check wait
 check bitmap
-testdev $md0 1 $mdsize1b 1
+testdev $md0 1 $mdsize1b 64
 mdadm -S $md0
 
 mdadm --assemble $md0 $dev1 $dev2
-testdev $md0 1 $mdsize1b 1
+testdev $md0 1 $mdsize1b 64
 dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 sleep 4
 dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
@@ -19,7 +19,7 @@ then  echo >&2 "ERROR bad 'dirty' counts: $dirty1 and $dirty2"
   exit 1
 fi
 mdadm $md0 -f $dev1
-testdev $md0 1 $mdsize1b 1
+testdev $md0 1 $mdsize1b 64
 sleep 4
 dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 if [ $dirty3 -lt 400 ]
index 268de57ec6651fe07b661f94b871eb5bf56689bc..1097536b280ad3598c7e1f52d5d06573cbc20084 100644 (file)
@@ -5,12 +5,12 @@
 mdadm --create --run $md0 --metadata=1.1 --level=1 -n2 --delay=1  --bitmap internal --bitmap-chunk=4 $dev1 $dev2  
 check wait
 check bitmap
-testdev $md0 1 $mdsize11 1
+testdev $md0 1 $mdsize11 64
 mdadm -S $md0
 
 mdadm --assemble $md0 $dev1 $dev2
 check bitmap
-testdev $md0 1 $mdsize11 1
+testdev $md0 1 $mdsize11 64
 dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 sleep 4
 dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
@@ -20,7 +20,7 @@ then  echo >&2 "ERROR bad 'dirty' counts: $dirty1 and $dirty2"
   exit 1
 fi
 mdadm $md0 -f $dev1
-testdev $md0 1 $mdsize11 1
+testdev $md0 1 $mdsize11 64
 sleep 4
 dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 if [ $dirty3 -lt 400 ]
index 9eb9a45427da9c48578eb6c9e0c81c91d6300c0b..f6bbcf6bfc15472aee7753b9f54cffc9c87bd9c6 100644 (file)
@@ -5,11 +5,11 @@
 mdadm --create --run $md0 --metadata=1.2 --level=1 -n2 --delay=1  --bitmap internal --bitmap-chunk 4 $dev1 $dev2  
 check wait
 check bitmap
-testdev $md0 1 $mdsize12 1
+testdev $md0 1 $mdsize12 64
 mdadm -S $md0
 
 mdadm --assemble $md0 $dev1 $dev2
-testdev $md0 1 $mdsize12 1
+testdev $md0 1 $mdsize12 64
 dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 sleep 4
 dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
@@ -19,7 +19,7 @@ then  echo >&2 "ERROR bad 'dirty' counts: $dirty1 and $dirty2"
   exit 1
 fi
 mdadm $md0 -f $dev1
-testdev $md0 1 $mdsize12 1
+testdev $md0 1 $mdsize12 64
 sleep 4
 dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 if [ $dirty3 -lt 400 ]
index 4b4f0f1c053efa9c55e0bf1d6469722b9b870da1..1bb9af16b115edba9df7ad0fa58739065c8a370f 100644 (file)
@@ -8,11 +8,11 @@ bmf=$targetdir/bitmap
 rm -f $bmf
 mdadm --create -e0.90 --run $md0 --level=1 -n3 --delay=1  --bitmap $bmf $dev1 $dev2 $dev3  
 check wait
-testdev $md0 1 $mdsize0 1
+testdev $md0 1 $mdsize0 64
 mdadm -S $md0
 
 mdadm --assemble $md0 --bitmap=$bmf $dev1 $dev2 $dev3
-testdev $md0 1 $mdsize0 1
+testdev $md0 1 $mdsize0 64
 dirty1=`mdadm -X $bmf | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 sleep 4
 dirty2=`mdadm -X $bmf | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
@@ -22,7 +22,7 @@ then  echo >&2 "ERROR bad 'dirty' counts: $dirty1 and $dirty2"
   exit 1
 fi
 mdadm $md0 -f $dev2
-testdev $md0 1 $mdsize0 1
+testdev $md0 1 $mdsize0 64
 sleep 4
 dirty3=`mdadm -X $bmf | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
 if [ $dirty3 -lt 400 ]
index 4cd5328ca46fa7274e83c30970e5ab9b70a805a8..44da89089271f00641b4786ec90803a3b8c8d69c 100644 (file)
@@ -8,7 +8,7 @@
 mdadm -CR $md0 -l1 -n2 -binternal --bitmap-chunk=4 -d1 $dev1 $dev2
 check resync
 check wait
-testdev $md0 1 $mdsize1a 1
+testdev $md0 1 $mdsize1a 64
 sleep 4
 
 mdadm $md0 -f $dev2
@@ -21,7 +21,7 @@ check nosync
 mdadm $md0 -f $dev2
 sleep 1
 mdadm $md0 -r $dev2
-testdev $md0 1 $mdsize1a 1
+testdev $md0 1 $mdsize1a 64
 mdadm $md0 -a $dev2
 check wait
 cmp --ignore-initial=$[16*512] --bytes=$[$mdsize0*1024] $dev1 $dev2
index 8025a6856b77a9c83df234fd62a124f580e03139..6fa276fb8417438d1519b1678447448d768991d3 100644 (file)
@@ -9,7 +9,7 @@ rm -f $bmf
 mdadm -B $md0 -l1 -n2 -b$bmf -d1 $dev1 $dev2
 check resync
 check wait
-testdev $md0 1 $size 1
+testdev $md0 1 $size 64
 sleep 4
 
 mdadm $md0 -f $dev2
@@ -21,7 +21,7 @@ check nosync
 mdadm $md0 -f $dev2
 sleep 1
 mdadm $md0 -r $dev2
-testdev $md0 1 $size 1
+testdev $md0 1 $size 64
 mdadm $md0 --re-add $dev2
 check wait
 cmp --bytes=$[$mdsize0*1024] $dev1 $dev2
index 99a48b79f8d1bb0023a7e19faf3649dfb62be9c0..f139a08e27898d5116fe7c273c3e54d596453d6e 100644 (file)
@@ -2,13 +2,13 @@
 # create a raid1 array with a wrmostly device
 
 mdadm -CR $md0 -l1 -n3 $dev0 $dev1 --write-mostly $dev2
-testdev $md0 1 $mdsize1a 1
+testdev $md0 1 $mdsize1a 64
 
 # unfortunately, we cannot measure if any read requests are going to $dev2
 
 mdadm -S $md0
 
 mdadm -CR $md0 -l1 -n3 --write-behind --bitmap=internal --bitmap-chunk=4 $dev0 $dev1 --write-mostly $dev2
-testdev $md0 1 $mdsize1a 1
+testdev $md0 1 $mdsize1a 64
 mdadm -S $md0
 
index 469497e2fede92a1ad9300f73f10e0e410bf096d..1d53d3fb7b4e88814847aeb609a23a9416875304 100644 (file)
@@ -8,8 +8,8 @@ mdadm -CR $md0 -l0 -n2 $md1 $md2  --homehost=testing
 
 mdadm -Ss
 mdadm -As -c /dev/null --homehost=testing -vvv
-testdev $md1 1 $mdsize1a 1
-testdev $md2 1 $mdsize1a 1
+testdev $md1 1 $mdsize1a 64
+testdev $md2 1 $mdsize1a 64
 testdev $md0 2 $mdsize11a 512
 mdadm -Ss
 
@@ -19,6 +19,6 @@ mdadm -CR $md1 -l1 -n2 $dev0 $dev1  --homehost=testing
 mdadm -CR $md0 -l0 -n2 $md1 $dev2  --homehost=testing
 mdadm -Ss
 mdadm -As -c /dev/null --homehost=testing -vvv
-testdev $md1 1 $mdsize1a 1
+testdev $md1 1 $mdsize1a 64
 testdev $md0 1 $[mdsize1a+mdsize11a-1024] 512
 mdadm -Ss
index dd9fd6e83336c00a161cbfc00c4673ce3de713b4..2a42369e349f602bcc1a770e2f0aff6e84d99d33 100644 (file)
@@ -49,7 +49,7 @@ mdadm -Ss
 # reassemble and make sure one of the families falls out
 mdadm -A $container $dev0 $dev1 $dev2 $dev3
 mdadm -IR $container
-testdev ${member}_0 1 $size 1
+testdev ${member}_0 1 $size 64
 if mdadm --remove $container $dev0 ; then
     # the dev[23] family won
     imsm_check_removal $container $dev1
@@ -69,5 +69,5 @@ mdadm -IR $container
 mdadm -A ${container}2 $dev2 $dev3 --update=uuid
 mdadm -IR ${container}2
 
-testdev ${member}_0 1 $size 1
-testdev ${member}_1 1 $size 1
+testdev ${member}_0 1 $size 64
+testdev ${member}_1 1 $size 64
index 3b288846a3d4511a5e83868e8ed693c2564e604e..448b03e3b4f570db809acba80f5a07d033f4353d 100644 (file)
@@ -42,7 +42,7 @@ level=1
 chunk=0
 mdadm -CR $member1 $dev0 $dev1 -n $num_disks -l $level -z $size
 imsm_check member $member1 $num_disks $level $size $size $offset $chunk
-testdev $member1 1 $size 1
+testdev $member1 1 $size 64
 check wait
 
 mdadm -Ss
index ad3996e3d2453c8abce550173e485c8c702a68b5..09256128e7c34d1cb344d9f8008b12dee42835a3 100644 (file)
@@ -18,7 +18,7 @@ mdadm -CR r1 -l1 -n2 /dev/md/ddf0
 mdadm -CR r5 -l5 -n3 /dev/md/ddf0
 testdev /dev/md/r0 5 5000 512
 # r0 will use 4608 due to chunk size, so that leaves 28160 for the rest
-testdev /dev/md/r1 1 28160 1
+testdev /dev/md/r1 1 28160 64
 testdev /dev/md/r5 2 28160 512
 dd if=/dev/sda of=/dev/md/r0 || true
 dd if=/dev/sda of=/dev/md/r1 || true