diff options
author | NeilBrown <neilb@suse.de> | 2008-11-20 14:51:42 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2008-11-20 14:51:42 +1100 |
commit | e8a70c89585ddca2bcb4160808f64506c64df13b (patch) | |
tree | 056c7f8aa0eb9bc1b4b76132d419226c12095030 /mdmon.c | |
parent | bf68e9d9ab185121b6004fc81b531bce8348726d (diff) | |
download | mdadm-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.c | 17 |
1 files changed, 13 insertions, 4 deletions
@@ -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. */ |