libmultipath: check_rdac(): pre-check in hwtable
authorMartin Wilck <mwilck@suse.com>
Mon, 18 Mar 2019 11:24:44 +0000 (12:24 +0100)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Thu, 18 Apr 2019 11:07:34 +0000 (13:07 +0200)
Currently check_rdac() always runs an SG_IO for VPD 0xc9 to check
if the storage supports RDAC. This is an extra IO, and may cause
annoying error messages on the storage side for non-RDAC arrays.
Do not use the RDAC override for arrays that have legacy configuration
to use a checker other than "rdac". For "unkown" devices with no checker
configured in either the hwtable or multipath.conf, the VPD call will
be tried.

Cc: Steve.Schremmer@netapp.com
Cc: NetApp RDAC team <ng-eseries-upstream-maintainers@netapp.com>
Cc: Hannes Reinecke <hare@suse.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
libmultipath/propsel.c

index caf55b6..e6263e9 100644 (file)
@@ -478,9 +478,14 @@ check_rdac(struct path * pp)
 {
        int len;
        char buff[44];
+       const char *checker_name;
 
        if (pp->bus != SYSFS_BUS_SCSI)
                return 0;
+       /* Avoid ioctl if this is likely not an RDAC array */
+       if (__do_set_from_hwe(checker_name, pp, checker_name) &&
+           strcmp(checker_name, RDAC))
+               return 0;
        len = get_vpd_sgio(pp->fd, 0xC9, buff, 44);
        if (len <= 0)
                return 0;