From patchwork Wed Mar 7 23:21:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Wilck X-Patchwork-Id: 10265583 X-Patchwork-Delegate: christophe.varoqui@free.fr Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 55CC260211 for ; Wed, 7 Mar 2018 23:22:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4679F28D57 for ; Wed, 7 Mar 2018 23:22:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3B03D28D8E; Wed, 7 Mar 2018 23:22:51 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D382028D57 for ; Wed, 7 Mar 2018 23:22:50 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D5A9FC0023A4; Wed, 7 Mar 2018 23:22:49 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8BBEB5F71C; Wed, 7 Mar 2018 23:22:49 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 5599D4CA9B; Wed, 7 Mar 2018 23:22:49 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w27NMe44006195 for ; Wed, 7 Mar 2018 18:22:40 -0500 Received: by smtp.corp.redhat.com (Postfix) id A167C7FCCC; Wed, 7 Mar 2018 23:22:40 +0000 (UTC) Delivered-To: dm-devel@redhat.com Received: from mx1.redhat.com (ext-mx03.extmail.prod.ext.phx2.redhat.com [10.5.110.27]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B618260E3E; Wed, 7 Mar 2018 23:22:37 +0000 (UTC) Received: from smtp.nue.novell.com (smtp.nue.novell.com [195.135.221.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 315DF80F7C; Wed, 7 Mar 2018 23:22:36 +0000 (UTC) Received: from emea4-mta.ukb.novell.com ([10.120.13.87]) by smtp.nue.novell.com with ESMTP (TLS encrypted); Thu, 08 Mar 2018 00:22:34 +0100 Received: from apollon.suse.de.de (nwb-a10-snat.microfocus.com [10.120.13.201]) by emea4-mta.ukb.novell.com with ESMTP (TLS encrypted); Wed, 07 Mar 2018 23:22:10 +0000 From: Martin Wilck To: Christophe Varoqui , Chongyun Wu Date: Thu, 8 Mar 2018 00:21:49 +0100 Message-Id: <20180307232152.15538-2-mwilck@suse.com> In-Reply-To: <20180307232152.15538-1-mwilck@suse.com> References: <20180307232152.15538-1-mwilck@suse.com> X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 207 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 07 Mar 2018 23:22:37 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 07 Mar 2018 23:22:37 +0000 (UTC) for IP:'195.135.221.5' DOMAIN:'smtp.nue.novell.com' HELO:'smtp.nue.novell.com' FROM:'mwilck@suse.com' RCPT:'' X-RedHat-Spam-Score: -2.301 (RCVD_IN_DNSWL_MED, SPF_PASS) 195.135.221.5 smtp.nue.novell.com 195.135.221.5 smtp.nue.novell.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.27 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: dm-devel@redhat.com Cc: Martin Wilck , dm-devel@redhat.com Subject: [dm-devel] [PATCH RESEND 1/4] libmultipath: get_uid: check VPD pages for SCSI only X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 07 Mar 2018 23:22:50 +0000 (UTC) X-Virus-Scanned: ClamAV using ClamSMTP The VPD code won't work for non-SCSI devices, anyway. For indentation reasons, I moved the "retrigger_tries" case to a separate function, which is also called only for SCSI devices. Signed-off-by: Martin Wilck --- libmultipath/discovery.c | 50 +++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c index 3d38a2550980..53182a85fa10 100644 --- a/libmultipath/discovery.c +++ b/libmultipath/discovery.c @@ -1807,9 +1807,38 @@ get_vpd_uid(struct path * pp) parent = udev_device_get_parent(parent); } + if (!parent) + return -EINVAL; + return get_vpd_sysfs(parent, 0x83, pp->wwid, WWID_SIZE); } +static ssize_t scsi_uid_fallback(struct path *pp, int path_state, + const char **origin) +{ + ssize_t len = 0; + int retrigger; + struct config *conf; + + conf = get_multipath_config(); + retrigger = conf->retrigger_tries; + put_multipath_config(conf); + if (pp->retriggers >= retrigger && + !strcmp(pp->uid_attribute, DEFAULT_UID_ATTRIBUTE)) { + len = get_vpd_uid(pp); + *origin = "sysfs"; + pp->uid_attribute = NULL; + if (len < 0 && path_state == PATH_UP) { + condlog(1, "%s: failed to get sysfs uid: %s", + pp->dev, strerror(-len)); + len = get_vpd_sgio(pp->fd, 0x83, pp->wwid, + WWID_SIZE); + *origin = "sgio"; + } + } + return len; +} + int get_uid (struct path * pp, int path_state, struct udev_device *udev) { @@ -1851,7 +1880,6 @@ get_uid (struct path * pp, int path_state, struct udev_device *udev) len = get_rbd_uid(pp); origin = "sysfs"; } else { - int retrigger; if (pp->uid_attribute) { len = get_udev_uid(pp, pp->uid_attribute, udev); @@ -1861,26 +1889,12 @@ get_uid (struct path * pp, int path_state, struct udev_device *udev) "%s: failed to get udev uid: %s", pp->dev, strerror(-len)); - } else { + } else if (pp->bus == SYSFS_BUS_SCSI) { len = get_vpd_uid(pp); origin = "sysfs"; } - conf = get_multipath_config(); - retrigger = conf->retrigger_tries; - put_multipath_config(conf); - if (len <= 0 && pp->retriggers >= retrigger && - !strcmp(pp->uid_attribute, DEFAULT_UID_ATTRIBUTE)) { - len = get_vpd_uid(pp); - origin = "sysfs"; - pp->uid_attribute = NULL; - if (len < 0 && path_state == PATH_UP) { - condlog(1, "%s: failed to get sysfs uid: %s", - pp->dev, strerror(-len)); - len = get_vpd_sgio(pp->fd, 0x83, pp->wwid, - WWID_SIZE); - origin = "sgio"; - } - } + if (len <= 0 && pp->bus == SYSFS_BUS_SCSI) + len = scsi_uid_fallback(pp, path_state, &origin); } if ( len < 0 ) { condlog(1, "%s: failed to get %s uid: %s",