From: NeilBrown Subject: allow array to be stopped using kernel name References: bnc#821861 Upstream: v3.3 e.g. mdadm -S md6 Can be useful of udev is confused or dead. Signed-off-by: NeilBrown --- Manage.c | 6 +++++- mdadm.c | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) --- mdadm-3.2.2.orig/Manage.c +++ mdadm-3.2.2/Manage.c @@ -218,7 +218,11 @@ int Manage_runstop(char *devname, int fd * to stop is probably a bad idea. */ close(fd); - fd = open(devname, O_RDONLY|O_EXCL); + if (devname[0] == '/') + fd = open(devname, O_RDONLY|O_EXCL); + else + fd = open_dev_flags(devname2devnum(devname), + O_RDONLY|O_EXCL); if (fd < 0 || fd2devnum(fd) != devnum) { if (fd >= 0) close(fd); --- mdadm-3.2.2.orig/mdadm.c +++ mdadm-3.2.2/mdadm.c @@ -1602,7 +1602,20 @@ int main(int argc, char *argv[]) rv |= Update_subarray(dv->devname, subarray, update, &ident, quiet); continue; } - mdfd = open_mddev(dv->devname, 1); + if (dv->devname[0] == '/') + mdfd = open_mddev(dv->devname, 1); + else if (strncmp(dv->devname, "md", 2)==0) { + mdfd = open_dev_flags(devname2devnum(dv->devname), + O_RDONLY); + if (mdfd < 0) + fprintf(stderr, Name ": cannot open %s\n", + dv->devname); + } else { + mdfd = -1; + fprintf(stderr, Name ": %s is not a valid md device name.\n", + dv->devname); + } + if (mdfd>=0) { switch(dv->disposition) { case 'R':