Fix but when assembling v1 arrays
Because raid_disk and disk.number are not longer in-sync, it needed some work. Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
This commit is contained in:
parent
dab6685f3d
commit
6a41304b05
22
Assemble.c
22
Assemble.c
|
@ -101,6 +101,7 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
|
|||
int uptodate;
|
||||
int state;
|
||||
int raid_disk;
|
||||
int disk_nr;
|
||||
} *devices;
|
||||
int *best = NULL; /* indexed by raid_disk */
|
||||
unsigned int bestcnt = 0;
|
||||
|
@ -182,7 +183,7 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
|
|||
|
||||
if (ident->devices &&
|
||||
!match_oneof(ident->devices, devname)) {
|
||||
if (inargv || verbose > 0)
|
||||
if ((inargv && verbose>=0) || verbose > 0)
|
||||
fprintf(stderr, Name ": %s is not one of %s\n", devname, ident->devices);
|
||||
continue;
|
||||
}
|
||||
|
@ -194,7 +195,7 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
|
|||
|
||||
dfd = open(devname, O_RDONLY|O_EXCL, 0);
|
||||
if (dfd < 0) {
|
||||
if (inargv || verbose > 0)
|
||||
if ((inargv && verbose >= 0) || verbose > 0)
|
||||
fprintf(stderr, Name ": cannot open device %s: %s\n",
|
||||
devname, strerror(errno));
|
||||
} else if (fstat(dfd, &stb)< 0) {
|
||||
|
@ -207,10 +208,10 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
|
|||
devname);
|
||||
close(dfd);
|
||||
} else if (!tst && (tst = guess_super(dfd)) == NULL) {
|
||||
if (inargv || verbose > 0)
|
||||
if ((inargv && verbose >= 0) || verbose > 0)
|
||||
fprintf(stderr, Name ": no recogniseable superblock\n");
|
||||
} else if (tst->ss->load_super(tst,dfd, &super, NULL)) {
|
||||
if (inargv || verbose > 0)
|
||||
if ((inargv && verbose >= 0) || verbose > 0)
|
||||
fprintf( stderr, Name ": no RAID superblock on %s\n",
|
||||
devname);
|
||||
close(dfd);
|
||||
|
@ -221,35 +222,35 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
|
|||
|
||||
if (ident->uuid_set &&
|
||||
(!super || same_uuid(info.uuid, ident->uuid, tst->ss->swapuuid)==0)) {
|
||||
if (inargv || verbose > 0)
|
||||
if ((inargv && verbose >= 0) || verbose > 0)
|
||||
fprintf(stderr, Name ": %s has wrong uuid.\n",
|
||||
devname);
|
||||
continue;
|
||||
}
|
||||
if (ident->name[0] &&
|
||||
(!super || strncmp(ident2.name, ident->name, 32)!=0)) {
|
||||
if (inargv || verbose > 0)
|
||||
if ((inargv && verbose >= 0) || verbose > 0)
|
||||
fprintf(stderr, Name ": %s has wrong name.\n",
|
||||
devname);
|
||||
continue;
|
||||
}
|
||||
if (ident->super_minor != UnSet &&
|
||||
(!super || ident->super_minor != info.array.md_minor)) {
|
||||
if (inargv || verbose > 0)
|
||||
if ((inargv && verbose >= 0) || verbose > 0)
|
||||
fprintf(stderr, Name ": %s has wrong super-minor.\n",
|
||||
devname);
|
||||
continue;
|
||||
}
|
||||
if (ident->level != UnSet &&
|
||||
(!super|| ident->level != info.array.level)) {
|
||||
if (inargv || verbose > 0)
|
||||
if ((inargv && verbose >= 0) || verbose > 0)
|
||||
fprintf(stderr, Name ": %s has wrong raid level.\n",
|
||||
devname);
|
||||
continue;
|
||||
}
|
||||
if (ident->raid_disks != UnSet &&
|
||||
(!super || ident->raid_disks!= info.array.raid_disks)) {
|
||||
if (inargv || verbose > 0)
|
||||
if ((inargv && verbose >= 0) || verbose > 0)
|
||||
fprintf(stderr, Name ": %s requires wrong number of drives.\n",
|
||||
devname);
|
||||
continue;
|
||||
|
@ -305,6 +306,7 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
|
|||
devices[devcnt].oldminor = info.disk.minor;
|
||||
devices[devcnt].events = info.events;
|
||||
devices[devcnt].raid_disk = info.disk.raid_disk;
|
||||
devices[devcnt].disk_nr = info.disk.number;
|
||||
devices[devcnt].uptodate = 0;
|
||||
devices[devcnt].state = info.disk.state;
|
||||
if (most_recent < devcnt) {
|
||||
|
@ -484,7 +486,7 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
|
|||
continue;
|
||||
if (!devices[j].uptodate)
|
||||
continue;
|
||||
info.disk.number = i;
|
||||
info.disk.number = devices[j].disk_nr;
|
||||
info.disk.raid_disk = i;
|
||||
info.disk.state = desired_state;
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
# create a simple mirror
|
||||
# test version0, version1, and no super
|
||||
# test resync and recovery.
|
||||
set -e
|
||||
|
||||
mdadm -CR $md0 -l 1 -n2 $dev0 $dev1
|
||||
check resync
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
set -ex
|
||||
|
||||
# Create some raid10 arrays, all with 6 devices and one spare
|
||||
devs="$dev0 $dev1 $dev2 $dev3 $dev4 $dev5 $dev6"
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
|
||||
set -e
|
||||
|
||||
# create a raid5, fail and remove a drive during initial sync
|
||||
# Add two more, fail and remove one
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
|
||||
set -e
|
||||
# Make a raid1, add a device, then remove it again.
|
||||
|
||||
mdadm -CR $md0 -l1 -n2 -x1 $dev0 $dev1 $dev2
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
|
||||
set -e
|
||||
|
||||
# create a small raid1 array, make it larger. Then make it smaller
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
|
||||
set -e
|
||||
|
||||
# create a small raid5 array, make it larger. Then make it smaller
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
|
||||
set -e
|
||||
|
||||
# create a small raid6 array, make it larger. Then make it smaller
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
set -e
|
||||
|
||||
# create a raid5 array and assemble it in various ways,
|
||||
# including with missing devices.
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
set -e
|
||||
|
||||
# create a raid0, re-assemble with a different super-minor
|
||||
mdadm -CR $md0 -l0 -n3 $dev0 $dev1 $dev2
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
set -e
|
||||
|
||||
#
|
||||
# create a raid1 with a bitmap file
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
set -e
|
||||
|
||||
#
|
||||
# create a raid1 array, add an external bitmap
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
set -e
|
||||
|
||||
#
|
||||
# create a raid1 with an internal bitmap
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
set -e
|
||||
|
||||
#
|
||||
# create a raid1 with 3 devices and a bitmap file
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
set -e
|
||||
|
||||
# make a raid5 array, byte swap the superblocks, then assemble...
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
set -e
|
||||
|
||||
# create a raid1 array with a wrmostly device
|
||||
|
||||
|
|
Loading…
Reference in New Issue