From patchwork Thu Jan 10 20:49:33 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Marzinski X-Patchwork-Id: 1962331 Return-Path: X-Original-To: patchwork-dm-devel@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by patchwork1.kernel.org (Postfix) with ESMTP id C75143FF0F for ; Thu, 10 Jan 2013 20:52:21 +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 r0AKnb3a017003; Thu, 10 Jan 2013 15:49:37 -0500 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r0AKnZMn006318 for ; Thu, 10 Jan 2013 15:49:35 -0500 Received: from ether.msp.redhat.com (ether.msp.redhat.com [10.15.80.119]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r0AKnZ4K026192 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 10 Jan 2013 15:49:35 -0500 Received: from ether.msp.redhat.com (localhost.localdomain [127.0.0.1]) by ether.msp.redhat.com (8.14.1/8.14.1) with ESMTP id r0AKnYnu027111; Thu, 10 Jan 2013 14:49:34 -0600 Received: (from bmarzins@localhost) by ether.msp.redhat.com (8.14.1/8.14.1/Submit) id r0AKnYjB027110; Thu, 10 Jan 2013 14:49:34 -0600 Date: Thu, 10 Jan 2013 14:49:33 -0600 From: Benjamin Marzinski To: device-mapper development Message-ID: <20130110204933.GV19059@ether.msp.redhat.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.17 (2007-11-01) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-loop: dm-devel@redhat.com Cc: Christophe Varoqui Subject: [dm-devel] [PATCH v2] multipath: rely on udev device creation for kpartx and multipathd X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk Reply-To: device-mapper development List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com Since kpartx and multipathd don't wait on udev creating the device, there was a race between libdevmapper and udev to create the device. This meant that sometimes the /dev/mapper/ devices were devnodes, and sometimes they were symlinks. Now, for multipathd and kpartx called without -s, libdevmapper won't create the device nodes, so that udev will always be responsible for it. Signed-off-by: Benjamin Marzinski --- kpartx/devmapper.c | 4 ++-- kpartx/devmapper.h | 2 ++ kpartx/kpartx.c | 6 +++--- libmultipath/devmapper.c | 6 +++--- 4 files changed, 10 insertions(+), 8 deletions(-) -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel Index: multipath-tools-130109/libmultipath/devmapper.c =================================================================== --- multipath-tools-130109.orig/libmultipath/devmapper.c +++ multipath-tools-130109/libmultipath/devmapper.c @@ -219,7 +219,7 @@ dm_simplecmd (int task, const char *name dm_task_no_flush(dmt); /* for DM_DEVICE_SUSPEND/RESUME */ #endif - if (udev_wait_flag && !dm_task_set_cookie(dmt, &conf->cookie, 0)) + if (udev_wait_flag && !dm_task_set_cookie(dmt, &conf->cookie, (conf->daemon)? DM_UDEV_DISABLE_LIBRARY_FALLBACK : 0)) goto out; r = dm_task_run (dmt); @@ -284,7 +284,7 @@ dm_addmap (int task, const char *target, dm_task_no_open_count(dmt); if (task == DM_DEVICE_CREATE && - !dm_task_set_cookie(dmt, &conf->cookie, 0)) + !dm_task_set_cookie(dmt, &conf->cookie, (conf->daemon)? DM_UDEV_DISABLE_LIBRARY_FALLBACK : 0)) goto freeout; r = dm_task_run (dmt); @@ -1268,7 +1268,7 @@ dm_rename (char * old, char * new) dm_task_no_open_count(dmt); - if (!dm_task_set_cookie(dmt, &conf->cookie, 0)) + if (!dm_task_set_cookie(dmt, &conf->cookie, (conf->daemon)? DM_UDEV_DISABLE_LIBRARY_FALLBACK : 0)) goto out; if (!dm_task_run(dmt)) goto out; Index: multipath-tools-130109/kpartx/devmapper.c =================================================================== --- multipath-tools-130109.orig/kpartx/devmapper.c +++ multipath-tools-130109/kpartx/devmapper.c @@ -78,7 +78,7 @@ dm_simplecmd (int task, const char *name if (no_flush) dm_task_no_flush(dmt); - if (udev_wait_flag && !dm_task_set_cookie(dmt, cookie, 0)) + if (udev_wait_flag && !dm_task_set_cookie(dmt, cookie, (udev_sync)? 0 : DM_UDEV_DISABLE_LIBRARY_FALLBACK)) goto out; r = dm_task_run(dmt); @@ -128,7 +128,7 @@ dm_addmap (int task, const char *name, c dm_task_no_open_count(dmt); - if (task == DM_DEVICE_CREATE && !dm_task_set_cookie(dmt, cookie, 0)) + if (task == DM_DEVICE_CREATE && !dm_task_set_cookie(dmt, cookie, (udev_sync)? 0 : DM_UDEV_DISABLE_LIBRARY_FALLBACK)) goto addout; r = dm_task_run (dmt); Index: multipath-tools-130109/kpartx/devmapper.h =================================================================== --- multipath-tools-130109.orig/kpartx/devmapper.h +++ multipath-tools-130109/kpartx/devmapper.h @@ -2,6 +2,8 @@ #define MINOR(dev) ((dev & 0xff) | ((dev >> 12) & 0xfff00)) #define MKDEV(ma,mi) ((mi & 0xff) | (ma << 8) | ((mi & ~0xff) << 12)) +extern int udev_sync; + int dm_prereq (char *, int, int, int); int dm_simplecmd (int, const char *, int, uint32_t *); int dm_addmap (int, const char *, const char *, const char *, uint64_t, Index: multipath-tools-130109/kpartx/kpartx.c =================================================================== --- multipath-tools-130109.orig/kpartx/kpartx.c +++ multipath-tools-130109/kpartx/kpartx.c @@ -56,6 +56,7 @@ struct pt { } pts[MAXTYPES]; int ptct = 0; +int udev_sync = 0; static void addpts(char *t, ptreader f) @@ -205,7 +206,6 @@ main(int argc, char **argv){ int loopro = 0; int hotplug = 0; int loopcreated = 0; - int sync = 0; struct stat buf; uint32_t cookie = 0; @@ -267,7 +267,7 @@ main(int argc, char **argv){ what = DELETE; break; case 's': - sync = 1; + udev_sync = 1; break; case 'u': what = UPDATE; @@ -278,7 +278,7 @@ main(int argc, char **argv){ } #ifdef LIBDM_API_COOKIE - if (!sync) + if (!udev_sync) dm_udev_set_sync_support(0); #endif