From patchwork Tue Mar 6 22:15:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Wilck X-Patchwork-Id: 10263065 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 E86576055D for ; Tue, 6 Mar 2018 22:16:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D0D61291EF for ; Tue, 6 Mar 2018 22:16:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C5A8B291F1; Tue, 6 Mar 2018 22:16:55 +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 471C1291EF for ; Tue, 6 Mar 2018 22:16:54 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1F6836147B; Tue, 6 Mar 2018 22:16:54 +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 E03CE600D5; Tue, 6 Mar 2018 22:16:53 +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 B2E146B547; Tue, 6 Mar 2018 22:16:53 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w26MGVmb019735 for ; Tue, 6 Mar 2018 17:16:31 -0500 Received: by smtp.corp.redhat.com (Postfix) id 13A0261F20; Tue, 6 Mar 2018 22:16:31 +0000 (UTC) Delivered-To: dm-devel@redhat.com Received: from mx1.redhat.com (ext-mx08.extmail.prod.ext.phx2.redhat.com [10.5.110.32]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DDF7C5D753; Tue, 6 Mar 2018 22:16:28 +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 F319DC057F91; Tue, 6 Mar 2018 22:16:26 +0000 (UTC) Received: from emea4-mta.ukb.novell.com ([10.120.13.87]) by smtp.nue.novell.com with ESMTP (TLS encrypted); Tue, 06 Mar 2018 23:16:25 +0100 Received: from apollon.suse.de.de (nwb-a10-snat.microfocus.com [10.120.13.202]) by emea4-mta.ukb.novell.com with ESMTP (TLS encrypted); Tue, 06 Mar 2018 22:16:15 +0000 From: Martin Wilck To: Christophe Varoqui , Chongyun Wu Date: Tue, 6 Mar 2018 23:15:47 +0100 Message-Id: <20180306221550.10030-2-mwilck@suse.com> In-Reply-To: <20180306221550.10030-1-mwilck@suse.com> References: <20180306221550.10030-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.32]); Tue, 06 Mar 2018 22:16:28 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Tue, 06 Mar 2018 22:16:28 +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.32 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: dm-devel@redhat.com Cc: dm-devel@redhat.com, Martin Wilck Subject: [dm-devel] [PATCH 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 06 Mar 2018 22:16:54 +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",