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 | 5 ++++- mdadm.c | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) --- mdadm-3.2.6.orig/Manage.c +++ mdadm-3.2.6/Manage.c @@ -231,7 +231,10 @@ int Manage_runstop(char *devname, int fd mdi = sysfs_read(fd, -1, GET_LEVEL|GET_VERSION); close(fd); count = 5; - while (((fd = open(devname, O_RDONLY|O_EXCL)) < 0 + while (((fd = (devname[0] =='/' + ?open(devname, O_RDONLY|O_EXCL) + :open_dev_flags(devname2devnum(devname), + O_RDONLY|O_EXCL))) < 0 || fd2devnum(fd) != devnum) && mdi && is_subarray(mdi->text_version) && mdmon_running(devname2devnum(mdi->text_version+1)) --- mdadm-3.2.6.orig/mdadm.c +++ mdadm-3.2.6/mdadm.c @@ -1623,7 +1623,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':