summaryrefslogtreecommitdiffstats
path: root/mdmon.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2008-11-20 14:51:42 +1100
committerNeilBrown <neilb@suse.de>2008-11-20 14:51:42 +1100
commite8a70c89585ddca2bcb4160808f64506c64df13b (patch)
tree056c7f8aa0eb9bc1b4b76132d419226c12095030 /mdmon.c
parentbf68e9d9ab185121b6004fc81b531bce8348726d (diff)
downloadmdadm-e8a70c89585ddca2bcb4160808f64506c64df13b.tar.gz
mdadm-e8a70c89585ddca2bcb4160808f64506c64df13b.tar.xz
mdadm-e8a70c89585ddca2bcb4160808f64506c64df13b.zip
mdmon: pass symbolic name to mdmon instead of device name.
Now that names in /dev are usually created (eventually) by udev, it isn't really safe to rely in finding a name in /dev to pass to mdmon to identify which array to monitor. And it isn't really necessary to have a name in /dev. So just pass the symbolic name, e.g. md127 or md123. Change util.c to pass that name, and change mdmon to process the name sensibly. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'mdmon.c')
-rw-r--r--mdmon.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/mdmon.c b/mdmon.c
index 5ee8346..73c244a 100644
--- a/mdmon.c
+++ b/mdmon.c
@@ -287,6 +287,8 @@ int main(int argc, char *argv[])
int ignore;
char *container_name = NULL;
char *switchroot = NULL;
+ int devnum;
+ char *devname;
switch (argc) {
case 2:
@@ -304,7 +306,14 @@ int main(int argc, char *argv[])
usage();
}
- mdfd = open(container_name, O_RDWR);
+ devnum = devname2devnum(container_name);
+ devname = devnum2devname(devnum);
+ if (strcmp(container_name, devname) != 0) {
+ fprintf(stderr, "mdmon: %s is not a valid md device name\n",
+ container_name);
+ exit(1);
+ }
+ mdfd = open_dev(devnum);
if (mdfd < 0) {
fprintf(stderr, "mdmon: %s: %s\n", container_name,
strerror(errno));
@@ -342,9 +351,8 @@ int main(int argc, char *argv[])
pfd[0] = pfd[1] = -1;
container = malloc(sizeof(*container));
- container->devnum = fd2devnum(mdfd);
- container->devname = devnum2devname(container->devnum);
- container->device_name = container_name;
+ container->devnum = devnum;
+ container->devname = devname;
container->arrays = NULL;
if (!container->devname) {
@@ -462,6 +470,7 @@ int main(int argc, char *argv[])
container_name);
exit(3);
}
+ close(mdfd);
/* Ok, this is close enough. We can say goodbye to our parent now.
*/