[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[dm-devel] [PATCH] multipath assumes pathnames are block devices



-----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]