* [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 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
* [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
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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).