X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=blobdiff_plain;f=Assemble.c;h=794b00d43421909cc6f91582aa5c4fc777abd2ed;hp=cddb76fafbc56897ea0135ea1e827c618d795c4b;hb=feb716e9c3568a45b8815bf2c59e417d30635f89;hpb=aa88f531b468349982905ecacf11da2cb6678ce6 diff --git a/Assemble.c b/Assemble.c index cddb76fa..794b00d4 100644 --- a/Assemble.c +++ b/Assemble.c @@ -292,6 +292,33 @@ int Assemble(char *mddev, int mdfd, fprintf(stderr, Name ": updating superblock of %s with minor number %d\n", devname, super.md_minor); } + if (strcmp(update, "summaries") == 0) { + /* set nr_disks, active_disks, working_disks, + * failed_disks, spare_disks based on disks[] + * array in superblock. + * Also make sure extra slots aren't 'failed' + */ + super.nr_disks = super.active_disks = + super.working_disks = super.failed_disks = + super.spare_disks = 0; + for (i=0; i < MD_SB_DISKS ; i++) + if (super.disks[i].major || + super.disks[i].minor) { + int state = super.disks[i].state; + if (state & (1<= super.raid_disks && super.disks[i].number == 0) + super.disks[i].state = 0; + } super.sb_csum = calc_sb_csum(&super); dfd = open(devname, O_RDWR, 0); if (dfd < 0)