From: Martin Wilck <mwilck@suse.com>
To: Benjamin Marzinski <bmarzins@redhat.com>
Cc: zhang.kai16@zte.com.cn, dm-devel@redhat.com,
tang.junhui@zte.com.cn, tang.wenjun3@zte.com.cn,
bart.vanassche@sandisk.com
Subject: Re: [PATCH] multipath-tools: improve processing efficiency for addition and deletion of multipath devices
Date: Fri, 17 Feb 2017 10:48:44 +0100 [thread overview]
Message-ID: <1487324924.4629.14.camel@suse.com> (raw)
In-Reply-To: <20170217062158.GW22981@octiron.msp.redhat.com>
On Fri, 2017-02-17 at 00:21 -0600, Benjamin Marzinski wrote:
> On Thu, Feb 16, 2017 at 11:38:36PM -0600, Benjamin Marzinski wrote:
> > > > +
> > > > +bool
> > > > +merge_need_stop(struct uevent *earlier, struct uevent *later)
> > > > +{
> > > > + /*
> > > > + * dm uevent do not try to merge with left uevents
> > > > + */
> > > > + if (!strncmp(later->kernel, "dm-", 3))
> > > > + return true;
> > > > +
> > > > + /*
> > > > + * we can not make a jugement without wwid,
> > > > + * so it is sensible to stop merging
> > > > + */
> > > > + if (!earlier->wwid || !later->wwid)
> > > > + return true;
> > > > + /*
> > > > + * uevents merging stoped
> > > > + * when we meet an opposite action uevent from the
> > > > same LUN
> > > > to AVOID
> > > > + * "add path1 |remove path1 |add path2 |remove path2
> > > > |add
> > > > path3"
> > > > + * to merge as "remove path1, path2" and "add path1,
> > > > path2,
> > > > path3"
> > > > + * OR
> > > > + * "remove path1 |add path1 |remove path2 |add path2
> > > > |remove
> > > > path3"
> > > > + * to merge as "add path1, path2" and "remove path1,
> > > > path2,
> > > > path3"
> > > > + * SO
> > > > + * when we meet a non-change uevent from the same LUN
> > > > + * with the same wwid and different action
> > > > + * it would be better to stop merging.
> > > > + */
> > > > + if (!strcmp(earlier->wwid, later->wwid) &&
> > > > + strcmp(earlier->action, later->action) &&
> > > > + strcmp(earlier->action, "change") &&
> > > > + strcmp(later->action, "change"))
> > > > + return true;
> > > > +
> > > > + return false;
> > > > +}
> > >
> > > I know you discussed this with Ben before, but still have some
> > > trouble
> > > with it.
> > >
> > > The first case should have been reduced to "remove path1 | remove
> > > path2
> > > > add path3" by filtering beforehand. I suppose you want to avoid
> > > > this
> > >
> > > sequence because it could leave us without paths temporarily,
> > > causing
> > > multipathd to destroy the map. But I don't understand what "stop
> > > merging" buys you here - if you process the events one-by-one,
> > > you may
> > > also have 0 paths at some point.
> >
> > Well, because of the filtering , you will never actually stop
> > merging
> > in this case, like you mentioned.
>
> Or, if I actually read better, I would see that you will stop
> merging.
> I can't think of any problems in theory with merging adds after
> removes
> in the simple case at least.
>
> > > In the second case, we know all events in the sequence have the
> > > same
> > > WWID; in this case I think it would be safe to filter away
> > > "remove"
> > > events by subsequent "add" events, ending up with "add path1| add
> > > path2| remove path3". But I may be overlooking something here.
> >
> > We can't filter out the remove path events in this case. If you
> > have
> >
> > add sdb | remove sdb
> >
> > You know that sdb in the remove event is referring to the same
> > device as
> > sdb in the add event. If you have
> >
> > remove sdb | add sdb
> >
> > There is no guarantee that sdb in the add event is referring to the
> > same
> > LUN as sdb in the remove event. Once the device gets removed that
> > name
> > can get reused for anything.
>
> Or you could change the filtering code to verify that the wwids
> matched.
AFAICS this is already the case in this code path. merge_needs_stop()
is run after determining the WWID, and will only ever act on devices
with the same WWID.
> However, while the device would be for the same LUN, it might be a
> different I_T Nexus, so you still don't want to filter the remove of
> that
> specific device.
I figure this could be handled in uev_add_path() by not simply
returning if an add event for an already existing device was
encountered. But I agree that would be another, separate, patch.
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
next prev parent reply other threads:[~2017-02-17 9:48 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-16 6:54 [PATCH] multipath-tools: improve processing efficiency for addition and deletion of multipath devices tang.junhui
2017-02-16 16:27 ` Benjamin Marzinski
2017-02-27 6:15 ` Christophe Varoqui
2017-02-16 21:17 ` Martin Wilck
2017-02-17 5:38 ` Benjamin Marzinski
2017-02-17 6:21 ` Benjamin Marzinski
2017-02-17 9:48 ` Martin Wilck [this message]
2017-02-17 15:36 ` Benjamin Marzinski
-- strict thread matches above, loose matches on Subject: below --
2017-02-28 7:05 tang.junhui
2017-03-01 0:39 ` Christophe Varoqui
2017-02-27 9:18 tang.junhui
2017-02-17 7:41 tang.junhui
2017-02-17 10:00 ` Martin Wilck
2017-02-16 7:07 tang.junhui
2017-02-13 7:55 tang.junhui
2017-01-18 7:38 tang.junhui
2017-01-18 7:55 ` tang.junhui
2017-02-15 21:08 ` 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=1487324924.4629.14.camel@suse.com \
--to=mwilck@suse.com \
--cc=bart.vanassche@sandisk.com \
--cc=bmarzins@redhat.com \
--cc=dm-devel@redhat.com \
--cc=tang.junhui@zte.com.cn \
--cc=tang.wenjun3@zte.com.cn \
--cc=zhang.kai16@zte.com.cn \
/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