summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2005-08-15 06:35:38 +0000
committerNeil Brown <neilb@suse.de>2005-08-15 06:35:38 +0000
commit6a41304b0577df0b75e866f295996220738baeb2 (patch)
treed9a0a5123b953e26e2716c5d889cc5100a0e5815
parentdab6685f3d9982b697d938d99737897ea8ac768c (diff)
downloadmdadm-6a41304b0577df0b75e866f295996220738baeb2.tar.gz
mdadm-6a41304b0577df0b75e866f295996220738baeb2.tar.xz
mdadm-6a41304b0577df0b75e866f295996220738baeb2.zip
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>
-rw-r--r--Assemble.c22
-rw-r--r--tests/00raid11
-rw-r--r--tests/00raid101
-rw-r--r--tests/01r5fail1
-rw-r--r--tests/02r1add1
-rw-r--r--tests/02r1grow1
-rw-r--r--tests/02r5grow1
-rw-r--r--tests/02r6grow1
-rw-r--r--tests/03r5assem1
-rw-r--r--tests/04r0update1
-rw-r--r--tests/05r1-bitmapfile1
-rw-r--r--tests/05r1-grow-external1
-rw-r--r--tests/05r1-internalbitmap1
-rw-r--r--tests/05r1-n3-bitmapfile1
-rw-r--r--tests/06r5swap1
-rw-r--r--tests/06wrmostly1
16 files changed, 12 insertions, 25 deletions
diff --git a/Assemble.c b/Assemble.c
index 7ef1cd4..6a044b2 100644
--- a/Assemble.c
+++ b/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;
diff --git a/tests/00raid1 b/tests/00raid1
index 01e4241..af40da4 100644
--- a/tests/00raid1
+++ b/tests/00raid1
@@ -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
diff --git a/tests/00raid10 b/tests/00raid10
index fe781ba..6fffb74 100644
--- a/tests/00raid10
+++ b/tests/00raid10
@@ -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"
diff --git a/tests/01r5fail b/tests/01r5fail
index 5c76a0b..89cd561 100644
--- a/tests/01r5fail
+++ b/tests/01r5fail
@@ -1,5 +1,4 @@
-set -e
# create a raid5, fail and remove a drive during initial sync
# Add two more, fail and remove one
diff --git a/tests/02r1add b/tests/02r1add
index 6b2b212..c07ec97 100644
--- a/tests/02r1add
+++ b/tests/02r1add
@@ -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
diff --git a/tests/02r1grow b/tests/02r1grow
index e789707..e187b0a 100644
--- a/tests/02r1grow
+++ b/tests/02r1grow
@@ -1,5 +1,4 @@
-set -e
# create a small raid1 array, make it larger. Then make it smaller
diff --git a/tests/02r5grow b/tests/02r5grow
index b8de3d4..47bc83e 100644
--- a/tests/02r5grow
+++ b/tests/02r5grow
@@ -1,5 +1,4 @@
-set -e
# create a small raid5 array, make it larger. Then make it smaller
diff --git a/tests/02r6grow b/tests/02r6grow
index 6f4cce2..897f510 100644
--- a/tests/02r6grow
+++ b/tests/02r6grow
@@ -1,5 +1,4 @@
-set -e
# create a small raid6 array, make it larger. Then make it smaller
diff --git a/tests/03r5assem b/tests/03r5assem
index b2b0698..be26cf1 100644
--- a/tests/03r5assem
+++ b/tests/03r5assem
@@ -1,4 +1,3 @@
-set -e
# create a raid5 array and assemble it in various ways,
# including with missing devices.
diff --git a/tests/04r0update b/tests/04r0update
index 2a6939d..23c7d65 100644
--- a/tests/04r0update
+++ b/tests/04r0update
@@ -1,4 +1,3 @@
-set -e
# create a raid0, re-assemble with a different super-minor
mdadm -CR $md0 -l0 -n3 $dev0 $dev1 $dev2
diff --git a/tests/05r1-bitmapfile b/tests/05r1-bitmapfile
index ac952c2..d227576 100644
--- a/tests/05r1-bitmapfile
+++ b/tests/05r1-bitmapfile
@@ -1,4 +1,3 @@
-set -e
#
# create a raid1 with a bitmap file
diff --git a/tests/05r1-grow-external b/tests/05r1-grow-external
index 072dc3c..ba9b3e5 100644
--- a/tests/05r1-grow-external
+++ b/tests/05r1-grow-external
@@ -1,4 +1,3 @@
-set -e
#
# create a raid1 array, add an external bitmap
diff --git a/tests/05r1-internalbitmap b/tests/05r1-internalbitmap
index 0f8a43a..19549c5 100644
--- a/tests/05r1-internalbitmap
+++ b/tests/05r1-internalbitmap
@@ -1,4 +1,3 @@
-set -e
#
# create a raid1 with an internal bitmap
diff --git a/tests/05r1-n3-bitmapfile b/tests/05r1-n3-bitmapfile
index ec72dec..a76a919 100644
--- a/tests/05r1-n3-bitmapfile
+++ b/tests/05r1-n3-bitmapfile
@@ -1,4 +1,3 @@
-set -e
#
# create a raid1 with 3 devices and a bitmap file
diff --git a/tests/06r5swap b/tests/06r5swap
index e3aaa64..41e8be6 100644
--- a/tests/06r5swap
+++ b/tests/06r5swap
@@ -1,4 +1,3 @@
-set -e
# make a raid5 array, byte swap the superblocks, then assemble...
diff --git a/tests/06wrmostly b/tests/06wrmostly
index 929610c..34be60d 100644
--- a/tests/06wrmostly
+++ b/tests/06wrmostly
@@ -1,4 +1,3 @@
-set -e
# create a raid1 array with a wrmostly device