Assemble: don't assemble IMSM array without OROM.

If someone has an IMSM array, and disables RAID in the BIOS
and uses the devices for some other purpose, then they really don't
want mdadm to start syncing the array.

So don't assemble if OROM doesn't confirm it is OK.

There can still be problems for crash-dump not being able to find
the OROM.   Some explicit work-around might be needed for that
rather than a more general workaround that can corrupt data.

Signed-off-by: NeilBrown <neilb@suse.com>
This commit is contained in:
NeilBrown 2015-07-29 14:38:37 +10:00
parent 653299b699
commit 9f2e55a421
2 changed files with 5 additions and 6 deletions

View File

@ -1343,7 +1343,7 @@ try_again:
mddev ? mddev : "further assembly");
content = &info;
if (st)
if (st && c->force)
st->ignore_hw_compat = 1;
num_devs = select_devices(devlist, ident, &st, &content, c,
inargv, auto_assem);

View File

@ -130,8 +130,6 @@ int Incremental(struct mddev_dev *devlist, struct context *c,
if (must_be_container(dfd)) {
if (!st)
st = super_by_fd(dfd, NULL);
if (st)
st->ignore_hw_compat = 1;
if (st && st->ss->load_container)
rv = st->ss->load_container(st, dfd, NULL);
@ -204,7 +202,8 @@ int Incremental(struct mddev_dev *devlist, struct context *c,
NULL, c->verbose);
goto out;
}
st->ignore_hw_compat = 1;
st->ignore_hw_compat = 0;
if (st->ss->compare_super == NULL ||
st->ss->load_super(st, dfd, NULL)) {
if (c->verbose >= 0)
@ -1128,6 +1127,7 @@ static int partition_try_spare(char *devname, int *dfdp, struct dev_policy *pol,
if (st2 == NULL ||
st2->ss->load_super(st2, fd, NULL) < 0)
goto next;
st2->ignore_hw_compat = 0;
if (!st) {
/* Check domain policy again, this time referring to metadata */
@ -1354,8 +1354,7 @@ restart:
struct supertype *st = super_by_fd(mdfd, NULL);
int ret = 0;
struct map_ent *map = NULL;
if (st)
st->ignore_hw_compat = 1;
if (st && st->ss->load_container)
ret = st->ss->load_container(st, mdfd, NULL);
close(mdfd);