Linux Device Mapper development
 help / color / mirror / Atom feed
From: Martin Wilck <mwilck@suse.com>
To: Benjamin Marzinski <bmarzins@redhat.com>
Cc: dm-devel@redhat.com, Julian Andres Klode <julian.klode@canonical.com>
Subject: Re: [PATCH v3 17/20] multipath -u: test if path is busy
Date: Fri, 13 Apr 2018 00:17:54 +0200	[thread overview]
Message-ID: <1523571474.4346.107.camel@suse.com> (raw)
In-Reply-To: <20180412184109.GS3103@octiron.msp.redhat.com>

On Thu, 2018-04-12 at 13:41 -0500, Benjamin Marzinski wrote:
> On Mon, Apr 02, 2018 at 09:50:48PM +0200, Martin Wilck wrote:
> > For "find_multipaths smart", check if a path is already in use
> > before setting DM_MULTIPATH_DEVICE_PATH to 1 or 2 (and thus,
> > SYSTEMD_READY=0). If we don't do this, a device which has already
> > been
> > mounted (e.g. during initrd processing) may be unmounted by
> > systemd, causing
> > havoc to the boot process.
> 
> I'm reviewing  v3 of this patch because I don't see patch 17/20 in
> your
> emails from v4. Am I missing an email, or did it not get sent?

It seems so, it didn't reach the dm-devel archive either. Strange.
I got it on my suse.com address, so maybe something went wrong in our
outgoing server. Anyway, v3/17 and v4/17 are identical.

> 
> Signed-off-by: Martin Wilck <mwilck@suse.com>
> > +
> > +		/*
> > +		 * If opening the path with O_EXCL fails, the path
> > +		 * is in use (e.g. mounted during initramfs
> > processing).
> > +		 * We know that it's not used by dm-multipath.
> > +		 * We may not set SYSTEMD_READY=0 on such devices,
> > it
> > +		 * might cause systemd to umount the device.
> > +		 * Use O_RDONLY, because udevd would trigger
> > another
> > +		 * uevent for close-after-write.
> > +		 *
> > +		 * get_refwwid() above stores the path we examine
> > in slot 0.
> > +		 */
> > +		pp = VECTOR_SLOT(pathvec, 0);
> > +		fd = open(udev_device_get_devnode(pp->udev),
> > +			  O_RDONLY|O_EXCL);
> 
> I'm worried about this.  Since we can't be sure that is_failed_wwid()
> will really tell us that multipathd has tried to multipath the device
> and failed, 

As I said already, I don't understand why you say that.

I can assert that if is_failed_wwid() returns true, multipathd has
definitely tried and failed since the last reboot, and no (other
instance of) multipathd or multipath has succeeded since then.

If is_failed_wwid() returns false, it's possible that the map already
exists (see patch 18), or that previous/current instances of multipathd
simply didn't try -  we have to check by other means.

> it is totally possible to get a maybe after multipath has
> turned the path device over to the rest of the system.

A transition from "no" to "maybe" is only possible if a single path,
which isn't in the WWIDs file and isn't part of a multipath map,
transitions A) from "failed" to  "not failed" or B) from "blacklisted"
to "not blacklisted". A) means that multipathd has successfully created
a map, thus the path is now part of a map, and we will transition to
"yes" and not to "maybe". B) is pathogical except for the coldplug
case.

However, transitioning from "no" to "yes" in multipath -u is just as
bad as "no" to "maybe", unless the device has already been multipathed.
This is a common case: a second path appears for a once-released
device. I agree that we shouldn't try open(O_EXCL) in that situation.

> 
> Of course, this means I would exlcude the whole second "if (cmd ==
> CMD_VALID_PATH)" section in configure() unless we know that it is
> safe
> to grab the device.  Otherwise, there is nothing to stop us from
> claiming a device that is in use. Clearly that exclusive grab check
> is
> racy at any time except on add events or when the device already is
> set
> to SYSTEMD_READY=0.  I'm pretty sure that the coldplug add event
> after
> the switchroot is safe, since nothing will be racing to grab the
> device
> then. 
> 
> You've already agreed that it should be fine to allow multipathd to
> try
> to create a multipath device on top of a non-claimed path, since we
> can
> just claim it later by issuing a uevent.  I feel like this is just
> another instance of that.  If this isn't a new path, where we have
> excluded everyone else from using it, we can't suddenly claim it just
> because a second path appears. However, if multipathd manages to
> create
> a multipath device on top of it, then it will add the wwid to the
> wwids
> file, and be able to claim it.  But otherwise, I don't think that the
> exclusive grab is safe or reliable enough to allow us to simply do
> this
> on any uevent.
> 
> I would add a new option to multipath, that works with -u, to tell it
> that maybes are allowed. If find_multipaths == FIND_MULTIPATHS_SMART,
> then it should not claim the device if it doesn't get positively
> claimed
> in the first "if (cmd == CMD_VALID_PATH)" section of configure().
> That
> will save us from claiming devices that are already in use, and speed
> the multipath -u calls up.

I don't think we need another option. We can use the uevent environment
in the -u case.

Regards,
Martin

-- 
Dr. Martin Wilck <mwilck@suse.com>, Tel. +49 (0)911 74053 2107
SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel

  reply	other threads:[~2018-04-12 22:17 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-02 19:50 [PATCH v3 00/20] multipath path classification Martin Wilck
2018-04-02 19:50 ` [PATCH v3 01/20] Revert "multipath: ignore -i if find_multipaths is set" Martin Wilck
2018-04-02 19:50 ` [PATCH v3 02/20] Revert "multipathd: imply -n " Martin Wilck
2018-04-02 19:50 ` [PATCH v3 03/20] libmultipath: should_multipath: keep existing maps Martin Wilck
2018-04-02 19:50 ` [PATCH v3 04/20] multipath -u -i: respect entries in WWIDs file Martin Wilck
2018-04-02 19:50 ` [PATCH v3 05/20] libmultipath: trigger change uevent on new device creation Martin Wilck
2018-04-02 19:50 ` [PATCH v3 06/20] libmultipath: trigger path uevent only when necessary Martin Wilck
2018-04-02 19:50 ` [PATCH v3 07/20] libmultipath: change find_multipaths option to multi-value Martin Wilck
2018-04-02 19:50 ` [PATCH v3 08/20] libmultipath: use const char* in open_file() Martin Wilck
2018-04-02 19:50 ` [PATCH v3 09/20] libmultipath: functions to indicate mapping failure in /dev/shm Martin Wilck
2018-04-02 19:50 ` [PATCH v3 10/20] libmultipath: indicate wwid failure in dm_addmap_create() Martin Wilck
2018-04-02 19:50 ` [PATCH v3 11/20] multipath -u: common code path for result message Martin Wilck
2018-04-02 19:50 ` [PATCH v3 12/20] multipath -u: change output to environment/key format Martin Wilck
2018-04-02 19:50 ` [PATCH v3 13/20] multipath -u: treat failed wwids as invalid Martin Wilck
2018-04-02 19:50 ` [PATCH v3 14/20] multipath -u: add DM_MULTIPATH_DEVICE_PATH=2 for "maybe" Martin Wilck
2018-04-02 19:50 ` [PATCH v3 15/20] libmultipath: implement find_multipaths_timeout Martin Wilck
2018-04-02 19:50 ` [PATCH v3 16/20] multipath -u : set FIND_MULTIPATHS_WAIT_UNTIL from /dev/shm Martin Wilck
2018-04-02 19:50 ` [PATCH v3 17/20] multipath -u: test if path is busy Martin Wilck
2018-04-12 18:41   ` Benjamin Marzinski
2018-04-12 22:17     ` Martin Wilck [this message]
2018-04-13 15:53       ` Benjamin Marzinski
2018-04-13 17:57         ` Martin Wilck
2018-04-02 19:50 ` [PATCH v3 18/20] multipath -u: quick check if path is multipathed Martin Wilck
2018-04-02 19:50 ` [PATCH v3 19/20] libmultipath: enable find_multipaths "smart" Martin Wilck
2018-04-02 19:50 ` [PATCH v3 20/20] multipath.rules: find_multipaths "smart" logic Martin Wilck

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=1523571474.4346.107.camel@suse.com \
    --to=mwilck@suse.com \
    --cc=bmarzins@redhat.com \
    --cc=dm-devel@redhat.com \
    --cc=julian.klode@canonical.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