Fix for uevent devpath handling
authorBenjamin Marzinski <bmarzins@redhat.com>
Thu, 11 Dec 2008 22:03:28 +0000 (16:03 -0600)
committerChristophe Varoqui <christophe.varoqui@free.fr>
Thu, 11 Dec 2008 22:46:09 +0000 (23:46 +0100)
This is necessary to make uevents work on fedora, since devpath appears as
something like:
'/devices/pci0000:00/0000:00:0a.0/0000:06:00.0/host11/rport-11:0-1/target11:0:1/11:0:1:0/block/sdi'

It simply strips off the everything up to the /block.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
multipathd/main.c

index 7304056ec80991067f5948491cca4aa7be7b94c6..30dba5b118a0cde625f94de43c80637b5561acbf 100644 (file)
@@ -603,14 +603,20 @@ uxsock_trigger (char * str, char ** reply, int * len, void * trigger_data)
 static int
 uev_discard(char * devpath)
 {
+       char *tmp;
        char a[10], b[10];
 
        /*
         * keep only block devices, discard partitions
         */
-       if (sscanf(devpath, "/block/%10s", a) != 1 ||
-           sscanf(devpath, "/block/%10[^/]/%10s", a, b) == 2) {
-               condlog(4, "discard event on %s", devpath);
+       tmp = strstr(devpath, "/block/");
+       if (tmp == NULL){
+               condlog(0, "no /block/ in '%s'", devpath);
+               return 1;
+       }
+       if (sscanf(tmp, "/block/%10s", a) != 1 ||
+           sscanf(tmp, "/block/%10[^/]/%10s", a, b) == 2) {
+               condlog(0, "discard event on %s", devpath);
                return 1;
        }
        return 0;