<div dir="ltr"><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"> declare_sysfs_get_str(devtype)</span><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">;</span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<span style="font-family:arial,sans-serif;font-size:12.800000190734863px">-declare_sysfs_get_str(cutype)</span><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">;</span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<span style="font-family:arial,sans-serif;font-size:12.800000190734863px"> declare_sysfs_get_str(vendor);</span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px"><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"> declare_sysfs_get_str(model);</span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<span style="font-family:arial,sans-serif;font-size:12.800000190734863px"> declare_sysfs_get_str(rev);</span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px"><div><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br>
</span></div><div style><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">This part seems correct, as this function is not used anywhere, but orthogonal to the patch.</span></div><div style><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">Can you confirm this slip is safe ?</span></div>
<div style><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></span></div><div style><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">Best regards,</span></div><div style>
<span style="font-family:arial,sans-serif;font-size:12.800000190734863px">Christophe Varoqui</span></div><div style><font face="arial, sans-serif"><a href="http://www.opensvc.com">www.opensvc.com</a></font></div><div style>
<font face="arial, sans-serif"><br></font></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Nov 15, 2013 at 11:29 AM, Hannes Reinecke <span dir="ltr"><<a href="mailto:hare@suse.de" target="_blank">hare@suse.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Instead of returning hand-crafted error values from sysfs_get_XXX<br>
functions we should be using the standard error numbers.<br>
<br>
Signed-off-by: Hannes Reinecke <<a href="mailto:hare@suse.de">hare@suse.de</a>><br>
---<br>
 libmultipath/discovery.c   | 40 +++++++++++++++++++++-------------------<br>
 libmultipath/discovery.h   |  2 +-<br>
 libmultipath/propsel.c     |  2 +-<br>
 libmultipath/structs_vec.c |  3 +--<br>
 4 files changed, 24 insertions(+), 23 deletions(-)<br>
<br>
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c<br>
index 3292358..d5557d9 100644<br>
--- a/libmultipath/discovery.c<br>
+++ b/libmultipath/discovery.c<br>
@@ -140,31 +140,34 @@ path_discovery (vector pathvec, struct config * conf, int flag)<br>
 }<br>
<br>
 #define declare_sysfs_get_str(fname)                                   \<br>
-extern int                                                             \<br>
+extern ssize_t                                                         \<br>
 sysfs_get_##fname (struct udev_device * udev, char * buff, size_t len) \<br>
 {                                                                      \<br>
+       ssize_t ret;                                                    \<br>
        const char * attr;                                              \<br>
        const char * devname;                                           \<br>
                                                                        \<br>
+       if (!udev)                                                      \<br>
+               return -ENOSYS;                                         \<br>
+                                                                       \<br>
        devname = udev_device_get_sysname(udev);                        \<br>
                                                                        \<br>
        attr = udev_device_get_sysattr_value(udev, #fname);             \<br>
        if (!attr) {                                                    \<br>
                condlog(3, "%s: attribute %s not found in sysfs",       \<br>
                        devname, #fname);                               \<br>
-               return 1;                                               \<br>
+               return -ENXIO;                                          \<br>
        }                                                               \<br>
        if (strlen(attr) > len) {                                       \<br>
                condlog(3, "%s: overflow in attribute %s",              \<br>
                        devname, #fname);                               \<br>
-               return 2;                                               \<br>
+               return -EINVAL;                                         \<br>
        }                                                               \<br>
-       strlcpy(buff, attr, len);                                       \<br>
-       return 0;                                                       \<br>
+       ret = strlcpy(buff, attr, len);                                 \<br>
+       return ret;                                                     \<br>
 }<br>
<br>
 declare_sysfs_get_str(devtype);<br>
-declare_sysfs_get_str(cutype);<br>
 declare_sysfs_get_str(vendor);<br>
 declare_sysfs_get_str(model);<br>
 declare_sysfs_get_str(rev);<br>
@@ -180,7 +183,7 @@ sysfs_get_timeout(struct path *pp, unsigned int *timeout)<br>
        unsigned int t;<br>
<br>
        if (!pp->udev || pp->bus != SYSFS_BUS_SCSI)<br>
-               return 1;<br>
+               return -ENOSYS;<br>
<br>
        parent = pp->udev;<br>
        while (parent) {<br>
@@ -192,7 +195,7 @@ sysfs_get_timeout(struct path *pp, unsigned int *timeout)<br>
        }<br>
        if (!attr) {<br>
                condlog(3, "%s: No timeout value in sysfs", pp->dev);<br>
-               return 1;<br>
+               return -ENXIO;<br>
        }<br>
<br>
        r = sscanf(attr, "%u\n", &t);<br>
@@ -200,7 +203,7 @@ sysfs_get_timeout(struct path *pp, unsigned int *timeout)<br>
        if (r != 1) {<br>
                condlog(3, "%s: Cannot parse timeout attribute '%s'",<br>
                        pp->dev, attr);<br>
-               return 1;<br>
+               return -EINVAL;<br>
        }<br>
<br>
        *timeout = t;<br>
@@ -650,17 +653,17 @@ scsi_sysfs_pathinfo (struct path * pp)<br>
        if (!attr_path || pp->sg_id.host_no == -1)<br>
                return 1;<br>
<br>
-       if (sysfs_get_vendor(parent, pp->vendor_id, SCSI_VENDOR_SIZE))<br>
+       if (sysfs_get_vendor(parent, pp->vendor_id, SCSI_VENDOR_SIZE) <= 0)<br>
                return 1;<br>
<br>
        condlog(3, "%s: vendor = %s", pp->dev, pp->vendor_id);<br>
<br>
-       if (sysfs_get_model(parent, pp->product_id, SCSI_PRODUCT_SIZE))<br>
+       if (sysfs_get_model(parent, pp->product_id, SCSI_PRODUCT_SIZE) <= 0)<br>
                return 1;<br>
<br>
        condlog(3, "%s: product = %s", pp->dev, pp->product_id);<br>
<br>
-       if (sysfs_get_rev(parent, pp->rev, SCSI_REV_SIZE))<br>
+       if (sysfs_get_rev(parent, pp->rev, SCSI_REV_SIZE) <= 0)<br>
                return 1;<br>
<br>
        condlog(3, "%s: rev = %s", pp->dev, pp->rev);<br>
@@ -712,7 +715,7 @@ ccw_sysfs_pathinfo (struct path * pp)<br>
<br>
        condlog(3, "%s: vendor = %s", pp->dev, pp->vendor_id);<br>
<br>
-       if (sysfs_get_devtype(parent, attr_buff, FILE_NAME_SIZE))<br>
+       if (sysfs_get_devtype(parent, attr_buff, FILE_NAME_SIZE) <= 0)<br>
                return 1;<br>
<br>
        if (!strncmp(attr_buff, "3370", 4)) {<br>
@@ -772,17 +775,17 @@ cciss_sysfs_pathinfo (struct path * pp)<br>
        if (!attr_path || pp->sg_id.host_no == -1)<br>
                return 1;<br>
<br>
-       if (sysfs_get_vendor(parent, pp->vendor_id, SCSI_VENDOR_SIZE))<br>
+       if (sysfs_get_vendor(parent, pp->vendor_id, SCSI_VENDOR_SIZE) <= 0)<br>
                return 1;<br>
<br>
        condlog(3, "%s: vendor = %s", pp->dev, pp->vendor_id);<br>
<br>
-       if (sysfs_get_model(parent, pp->product_id, SCSI_PRODUCT_SIZE))<br>
+       if (sysfs_get_model(parent, pp->product_id, SCSI_PRODUCT_SIZE) <= 0)<br>
                return 1;<br>
<br>
        condlog(3, "%s: product = %s", pp->dev, pp->product_id);<br>
<br>
-       if (sysfs_get_rev(parent, pp->rev, SCSI_REV_SIZE))<br>
+       if (sysfs_get_rev(parent, pp->rev, SCSI_REV_SIZE) <= 0)<br>
                return 1;<br>
<br>
        condlog(3, "%s: rev = %s", pp->dev, pp->rev);<br>
@@ -816,7 +819,7 @@ common_sysfs_pathinfo (struct path * pp)<br>
                condlog(4, "%s: udev not initialised", pp->dev);<br>
                return 1;<br>
        }<br>
-       if (sysfs_get_dev(pp->udev, pp->dev_t, BLK_DEV_SIZE)) {<br>
+       if (sysfs_get_dev(pp->udev, pp->dev_t, BLK_DEV_SIZE) <= 0) {<br>
                condlog(3, "%s: no 'dev' attribute in sysfs", pp->dev);<br>
                return 1;<br>
        }<br>
@@ -956,8 +959,7 @@ get_state (struct path * pp, int daemon)<br>
        if (daemon)<br>
                checker_set_async(c);<br>
        if (!conf->checker_timeout &&<br>
-           (pp->bus != SYSFS_BUS_SCSI ||<br>
-            sysfs_get_timeout(pp, &(c->timeout))))<br>
+           sysfs_get_timeout(pp, &(c->timeout)) <= 0)<br>
                c->timeout = DEF_TIMEOUT;<br>
        state = checker_check(c);<br>
        condlog(3, "%s: state = %s", pp->dev, checker_state_name(state));<br>
diff --git a/libmultipath/discovery.h b/libmultipath/discovery.h<br>
index d049ead..3d2d0ce 100644<br>
--- a/libmultipath/discovery.h<br>
+++ b/libmultipath/discovery.h<br>
@@ -26,7 +26,7 @@<br>
<br>
 struct config;<br>
<br>
-int sysfs_get_dev (struct udev_device *udev, char * buff, size_t len);<br>
+ssize_t sysfs_get_dev (struct udev_device *udev, char * buff, size_t len);<br>
 int path_discovery (vector pathvec, struct config * conf, int flag);<br>
<br>
 int do_tur (char *);<br>
diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c<br>
index e47d0ca..f092227 100644<br>
--- a/libmultipath/propsel.c<br>
+++ b/libmultipath/propsel.c<br>
@@ -351,7 +351,7 @@ out:<br>
                condlog(3, "%s: checker timeout = %u s (config file default)",<br>
                                pp->dev, c->timeout);<br>
        }<br>
-       else if (pp->udev && sysfs_get_timeout(pp, &c->timeout) == 0)<br>
+       else if (sysfs_get_timeout(pp, &c->timeout) > 0)<br>
                condlog(3, "%s: checker timeout = %u ms (sysfs setting)",<br>
                                pp->dev, c->timeout);<br>
        else {<br>
diff --git a/libmultipath/structs_vec.c b/libmultipath/structs_vec.c<br>
index 14ea1c7..abb2c56 100644<br>
--- a/libmultipath/structs_vec.c<br>
+++ b/libmultipath/structs_vec.c<br>
@@ -451,8 +451,7 @@ verify_paths(struct multipath * mpp, struct vectors * vecs, vector rpvec)<br>
                /*<br>
                 * see if path is in sysfs<br>
                 */<br>
-               if (!pp->udev || sysfs_get_dev(pp->udev, pp->dev_t,<br>
-                                              BLK_DEV_SIZE)) {<br>
+               if (sysfs_get_dev(pp->udev, pp->dev_t, BLK_DEV_SIZE) <= 0) {<br>
                        if (pp->state != PATH_DOWN) {<br>
                                condlog(1, "%s: removing valid path %s in state %d",<br>
                                        mpp->alias, pp->dev, pp->state);<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.8.1.4<br>
<br>
</font></span></blockquote></div><br></div>