From: NeilBrown Date: Tue, 2 Jun 2009 05:28:36 +0000 (+1000) Subject: Merge branch 'master' into devel-3.0 X-Git-Tag: mdadm-3.0~2 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=commitdiff_plain;h=3b435195fc34ba447c8ca8fa2f90cd6d5ad88cdb Merge branch 'master' into devel-3.0 Conflicts: super0.c super1.c --- 3b435195fc34ba447c8ca8fa2f90cd6d5ad88cdb diff --cc Manage.c index 594adeff,fa4bb60f..3aa09bcb --- a/Manage.c +++ b/Manage.c @@@ -460,14 -315,9 +464,14 @@@ int Manage_subdevs(char *devname, int f return 1; case 'a': /* add the device */ - + if (tst->subarray[0]) { + fprintf(stderr, Name ": Cannot add disks to a" + " \'member\' array, perform this" + " operation on the parent container\n"); + return 1; + } /* Make sure it isn't in use (in 2.6 or later) */ - tfd = open(dv->devname, O_RDONLY|O_EXCL|O_DIRECT); - tfd = dev_open(dv->devname, O_RDONLY|O_EXCL); ++ tfd = dev_open(dv->devname, O_RDONLY|O_EXCL|O_DIRECT); if (tfd < 0) { fprintf(stderr, Name ": Cannot open %s: %s\n", dv->devname, strerror(errno)); @@@ -619,21 -462,12 +623,21 @@@ disc.minor = minor(stb.st_rdev); disc.number =j; disc.state = 0; - if (array.not_persistent==0) { + if (array.not_persistent==0 || tst->ss->external) { + int dfd; if (dv->writemostly == 1) disc.state |= 1 << MD_DISK_WRITEMOSTLY; - dfd = open(dv->devname, O_RDWR | O_EXCL|O_DIRECT); - tst->ss->add_to_super(tst, &disc); - if (tst->ss->write_init_super(tst, &disc, - dv->devname)) ++ dfd = dev_open(dv->devname, O_RDWR | O_EXCL|O_DIRECT); + if (tst->ss->add_to_super(tst, &disc, dfd, + dv->devname)) { + close(dfd); + return 1; + } + /* write_init_super will close 'dfd' */ + if (tst->ss->external) + /* mdmon will write the metadata */ + close(dfd); + else if (tst->ss->write_init_super(tst)) return 1; } else if (dv->re_add) { /* this had better be raid1.