}
if (st && ! st->ss->validate_geometry(st, level, layout, raiddisks,
- chunk, size, NULL, NULL))
+ chunk, size, NULL, NULL, verbose>=0))
return 1;
/* now look at the subdevs */
st = superlist[i]->match_metadata_desc(name);
if (st && !st->ss->validate_geometry
(st, level, layout, raiddisks,
- chunk, size, dname, &freesize))
+ chunk, size, dname, &freesize,
+ verbose > 0))
st = NULL;
}
if (!st->ss->validate_geometry(st, level, layout,
raiddisks,
chunk, size, dname,
- &freesize)) {
+ &freesize,
+ verbose > 0)) {
fprintf(stderr,
Name ": %s is not suitable for "
if (!st->ss->validate_geometry(st, level, layout,
raiddisks,
chunk, minsize,
- NULL, NULL)) {
+ NULL, NULL, 0)) {
fprintf(stderr, Name ": devices too large for RAID level %d\n", level);
return 1;
}
( level <= 0 )
||
assume_clean
- )
+ ) {
info.array.state = 1; /* clean, but one+ drive will be missing*/
- else
+ info.resync_start = ~0ULL;
+ } else {
info.array.state = 0; /* not clean, but no errors */
-
+ info.resync_start = 0;
+ }
if (level == 10) {
/* for raid10, the bitmap size is the capacity of the array,
* which is array.size * raid_disks / ncopies;
total_slots = info.array.nr_disks;
st->ss->getinfo_super(st, &info);
- if (did_default)
- fprintf(stderr, Name ": Defaulting to version"
- " %s metadata\n", info.text_version);
+ if (did_default && verbose >= 0) {
+ if (info.text_version[0] == '/') {
+ int dnum = devname2devnum(info.text_version+1);
+ char *path;
+ int mdp = get_mdp_major();
+ struct mdinfo *mdi;
+ if (dnum > 0)
+ path = map_dev(MD_MAJOR, dnum, 1);
+ else
+ path = map_dev(mdp, (-1-dnum)<< 6, 1);
+
+ mdi = sysfs_read(-1, dnum, GET_VERSION);
+
+ fprintf(stderr, Name ": Creating array inside "
+ "%s container %s\n",
+ mdi?mdi->text_version:"managed", path);
+ sysfs_free(mdi);
+ } else
+ fprintf(stderr, Name ": Defaulting to version"
+ " %s metadata\n", info.text_version);
+ }
if (bitmap_file && vers < 9003) {
major_num = BITMAP_MAJOR_HOSTENDIAN;
return 1;
}
if (mdmon_running(st->container_dev)) {
- fprintf(stderr, Name ": mdmon already running "
- "for %s - sorry\n",
- devnum2devname(st->container_dev));
- return 1;
- }
- need_mdmon = 1;
+ if (verbose)
+ fprintf(stderr, Name ": reusing mdmon "
+ "for %s.\n",
+ devnum2devname(st->container_dev));
+ st->update_tail = &st->updates;
+ } else
+ need_mdmon = 1;
}
if ((vers % 100) < 2 ||
sra == NULL ||
}
if (dv == moved_disk && dnum != insert_point) break;
}
- if (pass == 1)
+ if (pass == 1) {
st->ss->write_init_super(st);
+ flush_metadata_updates(st);
+ }
}
free(infos);
st->ss->free_super(st);
if (verbose >= 0)
fprintf(stderr, Name ": array %s started.\n", mddev);
if (st->ss->external && st->subarray[0]) {
- if (need_mdmon) {
+ if (need_mdmon && !env_no_mdmon()) {
int dn = st->container_dev;
int i;
switch(fork()) {