imsm: add verbose flag to compare_super
IMSM does more than comparing metadata and errors reported directly from compare_super_imsm can be useful. Add verbose flag to compare_super method and make all not critical error printing configurable. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
This commit is contained in:
parent
49b69533e8
commit
c7b8547c70
|
@ -435,7 +435,7 @@ static int select_devices(struct mddev_dev *devlist,
|
|||
|
||||
if (st->ss != tst->ss ||
|
||||
st->minor_version != tst->minor_version ||
|
||||
st->ss->compare_super(st, tst) != 0) {
|
||||
st->ss->compare_super(st, tst, 1) != 0) {
|
||||
/* Some mismatch. If exactly one array matches this host,
|
||||
* we can resolve on that one.
|
||||
* Or, if we are auto assembling, we just ignore the second
|
||||
|
|
|
@ -130,7 +130,7 @@ int Examine(struct mddev_dev *devlist,
|
|||
char *d;
|
||||
for (ap = arrays; ap; ap = ap->next) {
|
||||
if (st->ss == ap->st->ss &&
|
||||
st->ss->compare_super(ap->st, st) == 0)
|
||||
st->ss->compare_super(ap->st, st, 0) == 0)
|
||||
break;
|
||||
}
|
||||
if (!ap) {
|
||||
|
|
|
@ -400,7 +400,7 @@ int Incremental(struct mddev_dev *devlist, struct context *c,
|
|||
}
|
||||
st2 = dup_super(st);
|
||||
if (st2->ss->load_super(st2, dfd2, NULL) ||
|
||||
st->ss->compare_super(st, st2) != 0) {
|
||||
st->ss->compare_super(st, st2, 1) != 0) {
|
||||
pr_err("metadata mismatch between %s and chosen array %s\n",
|
||||
devname, chosen_name);
|
||||
close(dfd2);
|
||||
|
|
3
mdadm.h
3
mdadm.h
|
@ -966,7 +966,8 @@ extern struct superswitch {
|
|||
* moved in, otherwise the superblock in 'st' is compared with
|
||||
* 'tst'.
|
||||
*/
|
||||
int (*compare_super)(struct supertype *st, struct supertype *tst);
|
||||
int (*compare_super)(struct supertype *st, struct supertype *tst,
|
||||
int verbose);
|
||||
/* Load metadata from a single device. If 'devname' is not NULL
|
||||
* print error messages as appropriate */
|
||||
int (*load_super)(struct supertype *st, int fd, char *devname);
|
||||
|
|
|
@ -3914,7 +3914,8 @@ static int store_super_ddf(struct supertype *st, int fd)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int compare_super_ddf(struct supertype *st, struct supertype *tst)
|
||||
static int compare_super_ddf(struct supertype *st, struct supertype *tst,
|
||||
int verbose)
|
||||
{
|
||||
/*
|
||||
* return:
|
||||
|
|
|
@ -3815,7 +3815,8 @@ static void imsm_copy_dev(struct imsm_dev *dest, struct imsm_dev *src)
|
|||
memcpy(dest, src, sizeof_imsm_dev(src, 0));
|
||||
}
|
||||
|
||||
static int compare_super_imsm(struct supertype *st, struct supertype *tst)
|
||||
static int compare_super_imsm(struct supertype *st, struct supertype *tst,
|
||||
int verbose)
|
||||
{
|
||||
/*
|
||||
* return:
|
||||
|
@ -3838,18 +3839,20 @@ static int compare_super_imsm(struct supertype *st, struct supertype *tst)
|
|||
*/
|
||||
if (!check_env("IMSM_NO_PLATFORM") && first->hba && sec->hba) {
|
||||
if (first->hba->type != sec->hba->type) {
|
||||
fprintf(stderr,
|
||||
"HBAs of devices do not match %s != %s\n",
|
||||
get_sys_dev_type(first->hba->type),
|
||||
get_sys_dev_type(sec->hba->type));
|
||||
if (verbose)
|
||||
pr_err("HBAs of devices do not match %s != %s\n",
|
||||
get_sys_dev_type(first->hba->type),
|
||||
get_sys_dev_type(sec->hba->type));
|
||||
return 3;
|
||||
}
|
||||
|
||||
if (first->orom != sec->orom) {
|
||||
fprintf(stderr,
|
||||
"HBAs of devices do not match %s != %s\n",
|
||||
first->hba->pci_id, sec->hba->pci_id);
|
||||
if (verbose)
|
||||
pr_err("HBAs of devices do not match %s != %s\n",
|
||||
first->hba->pci_id, sec->hba->pci_id);
|
||||
return 3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* if an anchor does not have num_raid_devs set then it is a free
|
||||
|
@ -6948,7 +6951,7 @@ count_volumes_list(struct md_list *devlist, char *homehost,
|
|||
|
||||
if (st->ss != tst->ss ||
|
||||
st->minor_version != tst->minor_version ||
|
||||
st->ss->compare_super(st, tst) != 0) {
|
||||
st->ss->compare_super(st, tst, 1) != 0) {
|
||||
/* Some mismatch. If exactly one array matches this host,
|
||||
* we can resolve on that one.
|
||||
* Or, if we are auto assembling, we just ignore the second
|
||||
|
|
3
super0.c
3
super0.c
|
@ -926,7 +926,8 @@ static int write_init_super0(struct supertype *st)
|
|||
return rv;
|
||||
}
|
||||
|
||||
static int compare_super0(struct supertype *st, struct supertype *tst)
|
||||
static int compare_super0(struct supertype *st, struct supertype *tst,
|
||||
int verbose)
|
||||
{
|
||||
/*
|
||||
* return:
|
||||
|
|
Loading…
Reference in New Issue