Name ": IMSM checksum %x != %x on %s\n",
check_sum, __le32_to_cpu(super->anchor->check_sum),
devname);
- return 2;
+ return 3;
}
/* FIXME the BBM log is disk specific so we cannot use this global
char nm[20];
int dfd;
int rv;
+ int devnum = fd2devnum(fd);
+ int retry;
/* check if this disk is a member of an active array */
sra = sysfs_read(fd, 0, GET_LEVEL|GET_VERSION|GET_DEVS|GET_STATE);
return 2;
}
rv = load_imsm_mpb(dfd, super, NULL);
+
+ /* retry the load if we might have raced against mdmon */
+ if (rv == 3 && mdmon_running(devnum))
+ for (retry = 0; retry < 3; retry++) {
+ usleep(3000);
+ rv = load_imsm_mpb(dfd, super, NULL);
+ if (rv != 3)
+ break;
+ }
if (!keep_fd)
close(dfd);
if (rv == 0) {
}
} else {
free_imsm(super);
- return 2;
+ return rv;
}
}
}
*sbp = super;
- st->container_dev = fd2devnum(fd);
+ st->container_dev = devnum;
if (st->ss == NULL) {
st->ss = &super_imsm;
st->minor_version = 0;