Linux Device Mapper development
 help / color / mirror / Atom feed
From: Hannes Reinecke <hare@suse.de>
To: Benjamin Marzinski <bmarzins@redhat.com>
Cc: dm-devel@redhat.com, Mike Snitzer <snitzer@redhat.com>,
	Christophe Varoqui <christophe.varoqui@gmail.com>
Subject: Re: [PATCH 28/57] libmultipath: use a shared lock to co-operate with udev
Date: Tue, 3 May 2016 07:57:01 +0200	[thread overview]
Message-ID: <57283DAD.9040009@suse.de> (raw)
In-Reply-To: <20160502162617.GS26117@octiron.msp.redhat.com>

On 05/02/2016 06:26 PM, Benjamin Marzinski wrote:
> On Wed, Apr 27, 2016 at 01:10:29PM +0200, Hannes Reinecke wrote:
>> udev since v214 is placing a shared lock on the device node
>> whenever it's processing the event. This introduces a race
>> condition with multipathd, as multipathd is processing the
>> event for the block device at the same time as udev is
>> processing the events for the partitions.
>> And a lock on the partitions will also be visible on the
>> block device itself, hence multipathd won't be able to
>> lock the device.
>> When multipath manages to take a lock on the device,
>> udev will fail, and consequently ignore this entire event.
>> Which in turn might cause the system to malfunction as it
>> might have been a crucial event like 'remove' or 'link down'.
>>
>> So we should better use LOCK_SH here; with that the flock
>> call in multipathd _and_ udev will succeed and the events
>> can be processed.
> 
> If we switch this to a shared lock, then what's the point in having it
> at all? The whole point of lock_multipath is to keep multipath and
> multipathd (or two concurrent calls to multipath) from trying to create
> a device at the same time, and both failing. Without an exclusive lock,
> this won't stop that. We can either decide that this is an unlikely
> scenario, and drop it entirely, or we can have multipath create its own
> lockfiles to prevent this issue without interfering with udev. But
> unless I'm missing something, this won't actually do anything.
> 
This is primarily for co-operation with udev.
As we typically do _not_ use multipath for creating device-mapper tables
the synchronisation problem between multipath and multipathd
doesn't typically occur.
At least not for us :-)

And as described above, we need this patch to co-operate with udev.
Kay was pretty adamant about _not_ changing udev here.

That said, I'm happy with dropping the lock functionality completely;
one possibility would be to use the CLI functionality to route calls
from multipath to multipathd.

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		      zSeries & Storage
hare@suse.de			      +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)

  reply	other threads:[~2016-05-03  5:57 UTC|newest]

Thread overview: 114+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-27 11:10 [PATCH 00/57] SLES resync Hannes Reinecke
2016-04-27 11:10 ` [PATCH 01/57] kpartx: Fixup persistent name generation Hannes Reinecke
2016-04-27 11:10 ` [PATCH 02/57] kpartx: handle more than 256 loop devices Hannes Reinecke
2016-04-27 11:10 ` [PATCH 03/57] kpartx: parse emulated DASD devices Hannes Reinecke
2016-04-27 11:10 ` [PATCH 04/57] kpartx: Install rules file with correct prefix Hannes Reinecke
2016-04-27 11:10 ` [PATCH 05/57] Add HP MSA 2040 to the hardware table Hannes Reinecke
2016-04-28 22:06   ` Sebastian Herbszt
2016-04-29  5:55     ` Hannes Reinecke
2016-05-01 21:30       ` Sebastian Herbszt
2016-06-09 14:20       ` Xose Vazquez Perez
2016-06-10  6:17         ` Hannes Reinecke
2016-06-10 14:30           ` Xose Vazquez Perez
2016-06-11 10:06             ` Hannes Reinecke
2016-04-27 11:10 ` [PATCH 06/57] Use ALUA for HP 3PAR Hannes Reinecke
2016-04-28 22:25   ` Sebastian Herbszt
2016-04-29  5:58     ` Hannes Reinecke
2016-05-01 21:46       ` Sebastian Herbszt
2016-04-27 11:10 ` [PATCH 07/57] Add LIO-ORG/SUSE RBD backend hardware defaults Hannes Reinecke
2016-04-28 22:32   ` Sebastian Herbszt
2016-04-27 11:10 ` [PATCH 08/57] Allow for empty SCSI revision Hannes Reinecke
2016-04-27 11:10 ` [PATCH 09/57] libmultipath: Do not use 'sscanf' for parsing integers Hannes Reinecke
2016-04-27 11:10 ` [PATCH 10/57] libmultipath: finally fix dev_loss_tmo setting Hannes Reinecke
2016-04-27 11:10 ` [PATCH 11/57] multipathd: fixup queueing mode in 'show maps status' Hannes Reinecke
2016-04-27 11:10 ` [PATCH 12/57] multipathd: fixup a crash when invoking CLI commands Hannes Reinecke
2016-04-27 11:10 ` [PATCH 13/57] multipathd: print error message for invalid arguments Hannes Reinecke
2016-04-27 11:10 ` [PATCH 14/57] libmultipath: correctly initialize pp->sg_id Hannes Reinecke
2016-04-27 11:10 ` [PATCH 15/57] libmultipath: correctly display checker status Hannes Reinecke
2016-04-27 11:10 ` [PATCH 16/57] libmultipath: call get_uid() for all paths Hannes Reinecke
2016-04-27 11:10 ` [PATCH 17/57] libmultipath: additional logging messages when formatting callout Hannes Reinecke
2016-04-27 11:10 ` [PATCH 18/57] libmpathpersist: Fixup whitespaces in Makefile Hannes Reinecke
2016-04-27 11:10 ` [PATCH 19/57] multipathd: Do not print misleading message 'not found in pathvec' Hannes Reinecke
2016-05-02 15:40   ` Benjamin Marzinski
2016-05-03  5:47     ` Hannes Reinecke
2016-05-03  7:27       ` Christophe Varoqui
2016-04-27 11:10 ` [PATCH 20/57] multipathd: Do not update the paths vec when removing paths Hannes Reinecke
2016-04-29 22:39   ` Benjamin Marzinski
2016-05-02  5:48     ` Hannes Reinecke
2016-05-02 15:12       ` Benjamin Marzinski
2016-05-02 17:46         ` Hannes Reinecke
2016-04-27 11:10 ` [PATCH 21/57] libmultipath: avoid double semicolon in lock.h Hannes Reinecke
2016-04-27 11:10 ` [PATCH 22/57] multipath: use option '-i' when called from udev Hannes Reinecke
2016-05-02 15:31   ` Benjamin Marzinski
2016-05-03  5:44     ` Hannes Reinecke
2016-05-03  6:37       ` Christophe Varoqui
2016-05-03 14:14         ` Benjamin Marzinski
2016-05-03 14:39           ` Hannes Reinecke
2016-04-27 11:10 ` [PATCH 23/57] multipath: remove warning 'failed to get wwid' Hannes Reinecke
2016-05-02 15:43   ` Benjamin Marzinski
2016-05-03  5:48     ` Hannes Reinecke
2016-04-27 11:10 ` [PATCH 24/57] Add dependency on systemd-udevd.service Hannes Reinecke
2016-04-27 11:10 ` [PATCH 25/57] Load all device handler modules on startup Hannes Reinecke
2016-04-27 11:10 ` [PATCH 26/57] 11-dm-mpath.rules: Only import ID_FS_XXX variables if not set Hannes Reinecke
2016-04-27 11:10 ` [PATCH 27/57] Ensure multipathd is started before systemd-udev-trigger.service Hannes Reinecke
2016-04-27 11:10 ` [PATCH 28/57] libmultipath: use a shared lock to co-operate with udev Hannes Reinecke
2016-05-02 16:26   ` Benjamin Marzinski
2016-05-03  5:57     ` Hannes Reinecke [this message]
2016-05-03 14:27       ` Benjamin Marzinski
2016-05-03 14:38         ` Alasdair G Kergon
2016-05-03 14:47         ` Benjamin Marzinski
2016-05-03 15:31         ` Germano Percossi
2016-05-03 20:23           ` Benjamin Marzinski
2016-05-04 11:25             ` Germano Percossi
2016-04-27 11:10 ` [PATCH 29/57] Only filter for udev property if uid_attribute is present Hannes Reinecke
2016-04-27 11:10 ` [PATCH 30/57] multipathd: skip uninitialized devices during reconfiguration Hannes Reinecke
2016-05-02 19:14   ` Benjamin Marzinski
2016-05-03  6:04     ` Hannes Reinecke
2016-04-27 11:10 ` [PATCH 31/57] multipathd: improve uxlsnr Hannes Reinecke
2016-04-27 11:10 ` [PATCH 32/57] libmultipath: remove 'needsync' argument from dm_simplecmd_noflush Hannes Reinecke
2016-04-27 11:10 ` [PATCH 33/57] libmultipath: remove 'use_uuid' argument from dm_addmap() Hannes Reinecke
2016-04-27 11:10 ` [PATCH 34/57] Always set DM_UDEV_DISABLE_LIBRARY_FALLBACK Hannes Reinecke
2016-04-27 11:10 ` [PATCH 35/57] libmultipath: pass in cookie as argument for dm_simplecmd() Hannes Reinecke
2016-04-27 11:10 ` [PATCH 36/57] libmultipath: pass in 'cookie' as argument for dm_addmap() Hannes Reinecke
2016-05-02 22:23   ` Benjamin Marzinski
2016-05-03  6:24     ` Hannes Reinecke
2016-05-03  9:31     ` Hannes Reinecke
2016-05-03 14:39       ` Benjamin Marzinski
2016-05-03 14:43         ` Hannes Reinecke
2016-05-03 14:57           ` Benjamin Marzinski
2016-04-27 11:10 ` [PATCH 37/57] Remove 'udev_sync' argument from dm_simplecmd() Hannes Reinecke
2016-05-02 23:33   ` Benjamin Marzinski
2016-04-27 11:10 ` [PATCH 38/57] libmultipath: Fixup 'DM_DEVICE_RELOAD' handling Hannes Reinecke
2016-04-27 11:10 ` [PATCH 39/57] devmapper: do not flush I/O for DM_DEVICE_CREATE Hannes Reinecke
2016-04-27 11:10 ` [PATCH 40/57] libmultipath: fixup dm_rename to complete cookie on failure Hannes Reinecke
2016-05-03  1:16   ` Benjamin Marzinski
2016-04-27 11:10 ` [PATCH 41/57] multipathd: accept zero-size paths in ev_add_path() Hannes Reinecke
2016-04-27 11:10 ` [PATCH 42/57] Use multipath wwid if path wwid is empty Hannes Reinecke
2016-04-27 11:10 ` [PATCH 43/57] multipathd: set uxsock_timeout after reconfiguration Hannes Reinecke
2016-04-27 11:10 ` [PATCH 44/57] multipathd: Do not switch paths on empty multipath tables Hannes Reinecke
2016-04-27 11:10 ` [PATCH 45/57] libmultipath: remove 'get_info' argument for adopt_paths() Hannes Reinecke
2016-04-27 11:10 ` [PATCH 46/57] libmultipath: ensure 'dev_t' is set when store paths Hannes Reinecke
2016-04-27 11:10 ` [PATCH 47/57] libmultipath: sanity check on store_path() Hannes Reinecke
2016-04-27 11:10 ` [PATCH 48/57] dmparser: Use find_path_by_dev() Hannes Reinecke
2016-04-27 11:10 ` [PATCH 49/57] multipathd: do not flush maps on startup Hannes Reinecke
2016-05-03  2:30   ` Benjamin Marzinski
2016-05-03  6:35     ` Hannes Reinecke
2016-04-27 11:10 ` [PATCH 50/57] multipathd: strict loop timings Hannes Reinecke
2016-04-27 11:10 ` [PATCH 51/57] multipathd: Provide standard error description on cli failure Hannes Reinecke
2016-04-27 11:10 ` [PATCH 52/57] libmultipath: make 'dm_addmap' static Hannes Reinecke
2016-04-27 11:10 ` [PATCH 53/57] multipathd: implement 'show map $map format $fmt' Hannes Reinecke
2016-05-03 16:21   ` Benjamin Marzinski
2016-04-27 11:10 ` [PATCH 54/57] multipathd: Increase uxclnt timeout Hannes Reinecke
2016-04-27 11:10 ` [PATCH 55/57] multipathd: asynchronous configuration Hannes Reinecke
2016-05-03 18:23   ` Benjamin Marzinski
2016-05-03 18:25   ` Benjamin Marzinski
2016-05-04  6:47     ` Hannes Reinecke
2016-04-27 11:10 ` [PATCH 56/57] multipathd: push down lock in checkerloop() Hannes Reinecke
2016-05-03 22:17   ` Benjamin Marzinski
2016-05-03 23:24     ` Benjamin Marzinski
2016-05-04  6:40       ` Hannes Reinecke
2016-05-04  6:39     ` Hannes Reinecke
2016-04-27 11:10 ` [PATCH 57/57] Allow specific CLI commands to run unlocked Hannes Reinecke
2016-05-04  3:02   ` Benjamin Marzinski
2016-05-03  7:23 ` [PATCH 00/57] SLES resync Christophe Varoqui
2016-05-04  3:06 ` Benjamin Marzinski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=57283DAD.9040009@suse.de \
    --to=hare@suse.de \
    --cc=bmarzins@redhat.com \
    --cc=christophe.varoqui@gmail.com \
    --cc=dm-devel@redhat.com \
    --cc=snitzer@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox