X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=blobdiff_plain;f=util.c;h=fe46f3b02d9c20a58079e0f70f8b48d41308d1e5;hp=da61a0be60048a2ea7da3aeb6d1a2dc6471f5d48;hb=44d2e36556921e82a9fde02b554f799741c92531;hpb=8850ee3e1ea01d4ded658fd83002fd93a81d6e99 diff --git a/util.c b/util.c index da61a0be..fe46f3b0 100644 --- a/util.c +++ b/util.c @@ -1077,19 +1077,42 @@ int signal_mdmon(int devnum) int start_mdmon(int devnum) { int i; + int len; + char pathbuf[1024]; + char *paths[4] = { + pathbuf, + "/sbin/mdmon", + "mdmon", + NULL + }; if (env_no_mdmon()) return 0; + len = readlink("/proc/self/exe", pathbuf, sizeof(pathbuf)); + if (len > 0) { + char *sl; + pathbuf[len] = 0; + sl = strrchr(pathbuf, '/'); + if (sl) + sl++; + else + sl = pathbuf; + strcpy(sl, "mdmon"); + } else + pathbuf[0] = '\0'; + switch(fork()) { case 0: /* FIXME yuk. CLOSE_EXEC?? */ for (i=3; i < 100; i++) close(i); - execl("./mdmon", "mdmon", - map_dev(dev2major(devnum), - dev2minor(devnum), - 1), NULL); + for (i=0; paths[i]; i++) + if (paths[i][0]) + execl(paths[i], "mdmon", + map_dev(dev2major(devnum), + dev2minor(devnum), + 1), NULL); exit(1); case -1: fprintf(stderr, Name ": cannot run mdmon. " "Array remains readonly\n");