libmultipath: read path state directly from sysfs
authorHannes Reinecke <hare@suse.de>
Tue, 16 Jul 2013 07:13:21 +0000 (09:13 +0200)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Tue, 16 Jul 2013 19:50:42 +0000 (21:50 +0200)
The 'state' attribute of a SCSI device might change without
generating any udev events, so we need to read it directly
from sysfs.

Signed-off-by: Hannes Reinecke <hare@suse.de>
libmultipath/discovery.c

index 82f086b..c264c82 100644 (file)
@@ -165,7 +165,6 @@ declare_sysfs_get_str(cutype);
 declare_sysfs_get_str(vendor);
 declare_sysfs_get_str(model);
 declare_sysfs_get_str(rev);
-declare_sysfs_get_str(state);
 declare_sysfs_get_str(dev);
 
 int
@@ -831,7 +830,8 @@ path_offline (struct path * pp)
                return PATH_DOWN;
        }
 
-       if (sysfs_get_state(parent, buff, SCSI_STATE_SIZE))
+       memset(buff, 0x0, SCSI_STATE_SIZE);
+       if (sysfs_attr_get_value(parent, "state", buff, SCSI_STATE_SIZE) <= 0)
                return PATH_DOWN;
 
        condlog(3, "%s: path state = %s", pp->dev, buff);