* [PATCH md 000 of 2] Introduction @ 2005-05-13 4:51 NeilBrown 2005-05-13 4:51 ` [PATCH md 002 of 2] Make sure recovery happens when add_new_disk is used for hot_add NeilBrown 2005-05-13 4:51 ` [PATCH md 001 of 2] Cause md/raid1 to "repack" working devices when number of drives is changed NeilBrown 0 siblings, 2 replies; 5+ messages in thread From: NeilBrown @ 2005-05-13 4:51 UTC (permalink / raw) To: Andrew Morton; +Cc: linux-raid Hi again, two more patches for md follow. Both raid1 related. These are happy to sit in the queue for after 2.6.12. Thanks, NeilBrown [PATCH md 001 of 2] Cause md/raid1 to "repack" working devices when number of drives is changed. [PATCH md 002 of 2] Make sure recovery happens when add_new_disk is used for hot_add ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH md 002 of 2] Make sure recovery happens when add_new_disk is used for hot_add 2005-05-13 4:51 [PATCH md 000 of 2] Introduction NeilBrown @ 2005-05-13 4:51 ` NeilBrown 2005-05-20 0:44 ` [PATCH 1/1] md: fix hot add for non-persistent superblock arrays Paul Clements 2005-05-13 4:51 ` [PATCH md 001 of 2] Cause md/raid1 to "repack" working devices when number of drives is changed NeilBrown 1 sibling, 1 reply; 5+ messages in thread From: NeilBrown @ 2005-05-13 4:51 UTC (permalink / raw) To: Andrew Morton; +Cc: linux-raid Currently if add_new_disk is used to hot-add a drive to a degraded array, recovery doesn't start ... because we didn't tell it to. Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au> ### Diffstat output ./drivers/md/md.c | 2 ++ 1 files changed, 2 insertions(+) diff ./drivers/md/md.c~current~ ./drivers/md/md.c --- ./drivers/md/md.c~current~ 2005-05-13 14:47:35.000000000 +1000 +++ ./drivers/md/md.c 2005-05-13 14:48:22.000000000 +1000 @@ -2232,6 +2232,8 @@ static int add_new_disk(mddev_t * mddev, err = bind_rdev_to_array(rdev, mddev); if (err) export_rdev(rdev); + + set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); if (mddev->thread) md_wakeup_thread(mddev->thread); return err; ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/1] md: fix hot add for non-persistent superblock arrays 2005-05-13 4:51 ` [PATCH md 002 of 2] Make sure recovery happens when add_new_disk is used for hot_add NeilBrown @ 2005-05-20 0:44 ` Paul Clements 2005-05-24 5:01 ` Neil Brown 0 siblings, 1 reply; 5+ messages in thread From: Paul Clements @ 2005-05-20 0:44 UTC (permalink / raw) To: NeilBrown; +Cc: linux-raid [-- Attachment #1: Type: text/plain, Size: 181 bytes --] Neil, hot add is not working for non-persistent superblock arrays (md is trying, and failing, to read a superblock from the new disk)... attached patch fixes it... Thanks, Paul [-- Attachment #2: md_non_persistent_hot_add.diff --] [-- Type: text/plain, Size: 742 bytes --] Signed-Off-By: Paul Clements <paul.clements@steeleye.com> md.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) diff -purN --exclude-from /export/public/clemep/tmp/dontdiff linux-2.6.12-rc1-mm2-PRISTINE/drivers/md/md.c linux-2.6.12-rc1-mm2/drivers/md/md.c --- linux-2.6.12-rc1-mm2-PRISTINE/drivers/md/md.c Fri Mar 25 14:33:36 2005 +++ linux-2.6.12-rc1-mm2/drivers/md/md.c Thu May 19 16:29:44 2005 @@ -2218,7 +2218,8 @@ static int add_new_disk(mddev_t * mddev, mdname(mddev)); return -EINVAL; } - rdev = md_import_device(dev, mddev->major_version, + rdev = md_import_device(dev, mddev->persistent ? + mddev->major_version : -1, mddev->minor_version); if (IS_ERR(rdev)) { printk(KERN_WARNING ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/1] md: fix hot add for non-persistent superblock arrays 2005-05-20 0:44 ` [PATCH 1/1] md: fix hot add for non-persistent superblock arrays Paul Clements @ 2005-05-24 5:01 ` Neil Brown 0 siblings, 0 replies; 5+ messages in thread From: Neil Brown @ 2005-05-24 5:01 UTC (permalink / raw) To: Paul Clements; +Cc: linux-raid On Thursday May 19, paul.clements@steeleye.com wrote: > Neil, > > hot add is not working for non-persistent superblock arrays (md is > trying, and failing, to read a superblock from the new disk)... > > attached patch fixes it... Yep, that looks good, thanks. NeilBrown > > Thanks, > Paul > > Signed-Off-By: Paul Clements <paul.clements@steeleye.com> > > md.c | 3 ++- > 1 files changed, 2 insertions(+), 1 deletion(-) > diff -purN --exclude-from /export/public/clemep/tmp/dontdiff linux-2.6.12-rc1-mm2-PRISTINE/drivers/md/md.c linux-2.6.12-rc1-mm2/drivers/md/md.c > --- linux-2.6.12-rc1-mm2-PRISTINE/drivers/md/md.c Fri Mar 25 14:33:36 2005 > +++ linux-2.6.12-rc1-mm2/drivers/md/md.c Thu May 19 16:29:44 2005 > @@ -2218,7 +2218,8 @@ static int add_new_disk(mddev_t * mddev, > mdname(mddev)); > return -EINVAL; > } > - rdev = md_import_device(dev, mddev->major_version, > + rdev = md_import_device(dev, mddev->persistent ? > + mddev->major_version : -1, > mddev->minor_version); > if (IS_ERR(rdev)) { > printk(KERN_WARNING ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH md 001 of 2] Cause md/raid1 to "repack" working devices when number of drives is changed. 2005-05-13 4:51 [PATCH md 000 of 2] Introduction NeilBrown 2005-05-13 4:51 ` [PATCH md 002 of 2] Make sure recovery happens when add_new_disk is used for hot_add NeilBrown @ 2005-05-13 4:51 ` NeilBrown 1 sibling, 0 replies; 5+ messages in thread From: NeilBrown @ 2005-05-13 4:51 UTC (permalink / raw) To: Andrew Morton; +Cc: linux-raid i.e. missing or failed drives are moved to the end of the list. The means a 3 drive md array with the first drive missing can be shrunk to a two drive array. Currently that isn't possible. Also, the "last_used" device number might be out-of-range after the number of devices is reduced, so we set it to 0. Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au> ### Diffstat output ./drivers/md/raid1.c | 24 +++++++++++++++++++----- 1 files changed, 19 insertions(+), 5 deletions(-) diff ./drivers/md/raid1.c~current~ ./drivers/md/raid1.c --- ./drivers/md/raid1.c~current~ 2005-05-13 14:47:35.000000000 +1000 +++ ./drivers/md/raid1.c 2005-05-13 14:47:44.000000000 +1000 @@ -1485,17 +1485,26 @@ static int raid1_reshape(mddev_t *mddev, * We allocate a new r1bio_pool if we can. * Then raise a device barrier and wait until all IO stops. * Then resize conf->mirrors and swap in the new r1bio pool. + * + * At the same time, we "pack" the devices so that all the missing + * devices have the higher raid_disk numbers. */ mempool_t *newpool, *oldpool; struct pool_info *newpoolinfo; mirror_info_t *newmirrors; conf_t *conf = mddev_to_conf(mddev); + int cnt; - int d; + int d, d2; - for (d= raid_disks; d < conf->raid_disks; d++) - if (conf->mirrors[d].rdev) + if (raid_disks < conf->raid_disks) { + cnt=0; + for (d= 0; d < conf->raid_disks; d++) + if (conf->mirrors[d].rdev) + cnt++; + if (cnt > raid_disks) return -EBUSY; + } newpoolinfo = kmalloc(sizeof(*newpoolinfo), GFP_KERNEL); if (!newpoolinfo) @@ -1526,8 +1535,12 @@ static int raid1_reshape(mddev_t *mddev, /* ok, everything is stopped */ oldpool = conf->r1bio_pool; conf->r1bio_pool = newpool; - for (d=0; d < raid_disks && d < conf->raid_disks; d++) - newmirrors[d] = conf->mirrors[d]; + + for (d=d2=0; d < conf->raid_disks; d++) + if (conf->mirrors[d].rdev) { + conf->mirrors[d].rdev->raid_disk = d2; + newmirrors[d2++].rdev = conf->mirrors[d].rdev; + } kfree(conf->mirrors); conf->mirrors = newmirrors; kfree(conf->poolinfo); @@ -1536,6 +1549,7 @@ static int raid1_reshape(mddev_t *mddev, mddev->degraded += (raid_disks - conf->raid_disks); conf->raid_disks = mddev->raid_disks = raid_disks; + conf->last_used = 0; /* just make sure it is in-range */ spin_lock_irq(&conf->resync_lock); conf->barrier--; spin_unlock_irq(&conf->resync_lock); ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2005-05-24 5:01 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2005-05-13 4:51 [PATCH md 000 of 2] Introduction NeilBrown 2005-05-13 4:51 ` [PATCH md 002 of 2] Make sure recovery happens when add_new_disk is used for hot_add NeilBrown 2005-05-20 0:44 ` [PATCH 1/1] md: fix hot add for non-persistent superblock arrays Paul Clements 2005-05-24 5:01 ` Neil Brown 2005-05-13 4:51 ` [PATCH md 001 of 2] Cause md/raid1 to "repack" working devices when number of drives is changed NeilBrown
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.