[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
[dm-devel] [PATCH] multipath assumes pathnames are block devices
- From: "Bryn M. Reeves" <breeves redhat com>
- To: device-mapper development <dm-devel redhat com>
- Subject: [dm-devel] [PATCH] multipath assumes pathnames are block devices
- Date: Mon, 15 Jan 2007 20:36:15 +0000
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
When a name is passed on the multipath command line, multipath assumes
it is a block device if it appears in the filesystem:
multipath/main.c:386:
if (filepresent(conf->dev))
conf->dev_type = DEV_DEVNODE;
else if (sscanf(conf->dev, "%d:%d", &i, &i) == 2)
conf->dev_type = DEV_DEVT;
else
conf->dev_type = DEV_DEVMAP;
This conflicts with the use of "-f" (flush map by name), in the case
that a file of the same name as the map exists in the current directory:
$ multipath -f mpath0
$ touch mpath0
$ multipath -f mpath0
must provide a map name to remove
The attached patch avoids this by adding a new function isblockdev() to
libmultipath/util.c and adding this to the DEV_DEVNODE condition. This
also means that we check for the case that what the user passed was a
character device, fifo etc.
It's probably also worth changing "-f" option to take an explicit
mapname argument, rather than just using argv[optind] after option
processing - I'll send another patch for that.
Kind regards,
Bryn.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org
iD8DBQFFq+W/6YSQoMYUY94RAojDAKDD+0xeACwY8S/ommZw6SX0pw8Z1gCcDzhV
ZkYc0ZtRHPxRQzk+JO5zDkU=
=azH8
-----END PGP SIGNATURE-----
diff -Nurp multipath-tools-0.4.7.orig/libmultipath/util.c multipath-tools-0.4.7/libmultipath/util.c
--- multipath-tools-0.4.7.orig/libmultipath/util.c 2007-01-15 20:21:05.000000000 +0000
+++ multipath-tools-0.4.7/libmultipath/util.c 2007-01-15 20:22:07.000000000 +0000
@@ -53,6 +53,16 @@ filepresent (char * run) {
}
int
+isblockdev (char * run) {
+ struct stat buf;
+
+ if(stat(run, &buf))
+ return 0;
+
+ return S_ISBLK(buf.st_mode);
+}
+
+int
get_word (char * sentence, char ** word)
{
char * p;
diff -Nurp multipath-tools-0.4.7.orig/multipath/main.c multipath-tools-0.4.7/multipath/main.c
--- multipath-tools-0.4.7.orig/multipath/main.c 2007-01-15 20:21:05.000000000 +0000
+++ multipath-tools-0.4.7/multipath/main.c 2007-01-15 20:22:07.000000000 +0000
@@ -383,7 +383,7 @@ main (int argc, char *argv[])
strncpy(conf->dev, argv[optind], FILE_NAME_SIZE);
- if (filepresent(conf->dev))
+ if (filepresent(conf->dev) && isblockdev(conf->dev))
conf->dev_type = DEV_DEVNODE;
else if (sscanf(conf->dev, "%d:%d", &i, &i) == 2)
conf->dev_type = DEV_DEVT;
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]