On Sun, 13 Jun 2010 15:15:08 -0400 Jérôme Poulin <jeromepoulin@xxxxxxxxx> wrote: > I had problems reshaping my RAID6 down 1 disk today and found a > problem in Grow.c: > > diff -udpr mdadm-3.1.2/Grow.c mdadm-3.1.2-critical-section/Grow.c > --- mdadm-3.1.2/Grow.c 2010-03-09 23:31:39.000000000 -0500 > +++ mdadm-3.1.2-critical-section/Grow.c 2010-06-13 14:57:44.000000000 -0400 > @@ -497,7 +497,7 @@ int Grow_reshape(char *devname, int fd, > int rv = 0; > struct supertype *st; > > - int nchunk, ochunk; > + unsigned long nchunk, ochunk; > int nlayout, olayout; > int ndisks, odisks; > int ndata, odata; > > > After changing this I was able to re-shape the array, it seems it was > overflowing and I had a message saying: > root@billsshack:~/mdadm-3.1.2/ > ./mdadm --grow /dev/md0 > --raid-devices=6 --backup-file=/mnt/data1/md-raid6-grow-backup.bak > mdadm: Need to backup 4503599627350016K of critical section.. > mdadm: /dev/md0: Something wrong - reshape aborted > > Now it works: > root@billsshack:~/mdadm-3.1.2/ > ./mdadm --grow /dev/md0 > --raid-devices=6 --backup-file=/mnt/data1/md-raid6-grow-backup.bak > mdadm: Need to backup 20480K of critical section.. > root@billsshack:~/mdadm-3.1.2/ > cat /proc/mdstat > Personalities : [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] > [faulty] [linear] > md0 : active raid6 dm-6[0] dm-8[5] dm-5[4] dm-3[3] dm-4[2] dm-7[1] > 7814041600 blocks super 0.91 level 6, 1024k chunk, algorithm 2 > [6/5] [UUUUUU] > [>....................] reshape = 0.0% (33792/1953510400) > finish=1926.0min speed=16896K/sec > > > Here's a nice output of GDB: > Breakpoint 1, Grow_reshape (devname=0x7fffffffe390 "/dev/md0", > fd=5, quiet=0, > backup_file=0x7fffffffe3b8 > "/mnt/data1/md-raid6-grow-backup.bak", size=1953510400, level=65534, > layout_str=0x0, chunksize=0, raid_disks=6) at Grow.c:939 > 939 blocks = ochunk/512 * nchunk/512 * odata > * ndata / a; > (gdb) p ochunk/512 > $9 = 2048 > (gdb) p ochunk/512 * nchunk/512 > $10 = -4194304 Thanks. I fixed this bug a slightly different way - blocks = ochunk/512 * nchunk/512 * odata * ndata / a; + blocks = (ochunk/512) * (nchunk/512) * odata * ndata / a; See http://neil.brown.name/git?p=mdadm;a=commitdiff;h=200871adf9e15d5ad985f28c349fd89c386ef48a I guess it is time to release a 3.1.3... Thanks, NeilBrown > (gdb) p nchunk > $11 = 1048576 > (gdb) p ochunk > $12 = 1048576 > (gdb) p ochunk/512 > $13 = 2048 > (gdb) p nchunk/512 > $14 = 2048 > (gdb) p 2048*2048 > $15 = 4194304 > (gdb) p 2048*2048*odata > $16 = 20971520 > (gdb) p 2048*2048*odata*ndata > $17 = 83886080 > (gdb) p 2048*2048*odata*ndata/a > $18 = 40960 > (gdb) p ochunk/512 * nchunk/512 * odata * ndata / a > $19 = 9007199254700032 > (gdb) p ochunk/512 * nchunk/512 > $20 = -4194304 > (gdb) > -- > To unsubscribe from this list: send the line "unsubscribe linux-raid" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html