@@ -1448,6 +1448,18 @@ int Manage_subdevs(char *devname, int fd,
int rv, err = 0;
int mj, mn;
+ if (tst->ss->external && dv->disposition == 'A') {
+ pr_err("Cannot re-add member device %s to %s, it is not supported for external metadata, aborting.\n",
+ dv->devname, fd2devnm(fd));
+ goto abort;
+ }
+
+ if (array.not_persistent == 1 && dv->disposition == 'A') {
+ pr_err("Cannot re-add member device %s to %s, array is not persistent, aborting.\n",
+ dv->devname, fd2devnm(fd));
+ goto abort;
+ }
+
raid_slot = -1;
if (dv->disposition == 'c') {
rv = parse_cluster_confirm_arg(dv->devname, &dv->devname, &raid_slot);
@@ -1,7 +1,6 @@
#
-# create a raid1, remove a drive, and readd it.
-# resync should be instant.
-# Then do some IO first. Resync should still be very fast
+# create a raid1 without superblock, remove a drive, and readd it.
+# readd should fail.
#
mdadm -B $md0 -l1 -n2 -d1 $dev1 $dev2
check resync
@@ -12,24 +11,8 @@ sleep 4
mdadm $md0 -f $dev2
sleep 1
mdadm $md0 -r $dev2
-mdadm $md0 --re-add $dev2
-check nosync
+if mdadm $md0 --re-add $dev2; then
+ err "re-add should fail"
+fi
-mdadm $md0 -f $dev2
-sleep 1
-mdadm $md0 -r $dev2
-testdev $md0 1 $size 1
-mdadm $md0 --re-add $dev2
-check wait
-cmp --bytes=$[$mdsize0*1024] $dev1 $dev2
-
-mdadm $md0 -f $dev2; sleep 1
-mdadm $md0 -r $dev2
-if dd if=/dev/zero of=$md0 ; then : ; fi
-blockdev --flushbufs $md0 # make sure writes have been sent
-mdadm $md0 --re-add $dev2
-check recovery
-check wait
-# should BLKFLSBUF and then read $dev1/$dev2...
-cmp --bytes=$[$mdsize0*1024] $file1 $file2
mdadm -S $md0