From patchwork Tue Feb 28 16:23:03 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Wilck X-Patchwork-Id: 9596195 X-Patchwork-Delegate: snitzer@redhat.com 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 4399F60574 for ; Tue, 28 Feb 2017 16:25:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3663826CF9 for ; Tue, 28 Feb 2017 16:25:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2B0DB26BE9; Tue, 28 Feb 2017 16:25:27 +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 mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id CFA0026CF9 for ; Tue, 28 Feb 2017 16:25:26 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v1SGOMTK020352; Tue, 28 Feb 2017 11:24:23 -0500 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v1SGNtWt005773 for ; Tue, 28 Feb 2017 11:23:55 -0500 Received: from mx1.redhat.com (ext-mx10.extmail.prod.ext.phx2.redhat.com [10.5.110.39]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v1SGNttk017167 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 28 Feb 2017 11:23:55 -0500 Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E215C51451 for ; Tue, 28 Feb 2017 16:23:53 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 3490CAD7C for ; Tue, 28 Feb 2017 16:23:50 +0000 (UTC) From: Martin Wilck To: dm-devel@redhat.com Date: Tue, 28 Feb 2017 17:23:03 +0100 Message-Id: <20170228162329.14517-8-mwilck@suse.com> In-Reply-To: <20170228162329.14517-1-mwilck@suse.com> References: <20170228162329.14517-1-mwilck@suse.com> X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 202 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 28 Feb 2017 16:23:54 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 28 Feb 2017 16:23:54 +0000 (UTC) for IP:'195.135.220.15' DOMAIN:'mx2.suse.de' HELO:'mx2.suse.de' FROM:'mwilck@suse.com' RCPT:'' X-RedHat-Spam-Score: -1.901 (BAYES_50, DCC_REPUT_00_12, RCVD_IN_DNSWL_MED, SPF_PASS) 195.135.220.15 mx2.suse.de 195.135.220.15 mx2.suse.de X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Scanned-By: MIMEDefang 2.78 on 10.5.110.39 X-loop: dm-devel@redhat.com Subject: [dm-devel] [PATCH 07/33] libmultipath: fall back to search paths by devt 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-Virus-Scanned: ClamAV using ClamSMTP From: Hannes Reinecke When removing path the device might already be gone from sysfs, so we cannot lookup the device name. However, we still should have the path vector available, so we should be trying to look it up by using the device number. Signed-off-by: Hannes Reinecke --- libmultipath/discovery.c | 11 +++++++++-- libmultipath/dmparser.c | 11 +++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c index 4e99845e..e4186de1 100644 --- a/libmultipath/discovery.c +++ b/libmultipath/discovery.c @@ -120,8 +120,15 @@ path_discover (vector pathvec, struct config * conf, pp = find_path_by_dev(pathvec, (char *)devname); if (!pp) { - return store_pathinfo(pathvec, conf, - udevice, flag, NULL); + char devt[BLK_DEV_SIZE]; + dev_t devnum = udev_device_get_devnum(udevice); + + snprintf(devt, BLK_DEV_SIZE, "%d:%d", + major(devnum), minor(devnum)); + pp = find_path_by_devt(pathvec, devt); + if (!pp) + return store_pathinfo(pathvec, conf, + udevice, flag, NULL); } return pathinfo(pp, conf, flag); } diff --git a/libmultipath/dmparser.c b/libmultipath/dmparser.c index b504961f..274eb947 100644 --- a/libmultipath/dmparser.c +++ b/libmultipath/dmparser.c @@ -330,12 +330,15 @@ int disassemble_map(vector pathvec, char *params, struct multipath *mpp, if (devt2devname(devname, FILE_NAME_SIZE, word)) { condlog(2, "%s: cannot find block device", word); - FREE(word); - continue; + devname[0] = '\0'; } - if (pathvec) - pp = find_path_by_dev(pathvec, devname); + if (pathvec) { + if (strlen(devname)) + pp = find_path_by_dev(pathvec, devname); + else + pp = find_path_by_devt(pathvec, word); + } if (!pp) { pp = alloc_path();