[dm-devel] [PATCH] dm-mpath: always return reservation conflict
Christophe Varoqui
christophe.varoqui at opensvc.com
Thu Jul 16 05:07:03 UTC 2015
If your patch implement a direct path-to-multipath conflict error
propagation, won't the common scenario where admins add new (initialy
unregistered) paths to a reserved multipath result in application-visible
i/o errors ? If so, those admins might hold us a grudge :/
For reference the opensvc crm does use type 5 pr, and aims for all paths
registered. It still does not make use of the multipathd pr janitoring
features, and uses sg_persist directly for pr status and actions.
Best regards,
Christophe Varoqui
OpenSVC
Regards,
Christophe Varoqui
OpenSVC
On Wed, Jul 15, 2015 at 1:35 PM, James Bottomley <
James.Bottomley at hansenpartnership.com> wrote:
> On Wed, 2015-07-15 at 13:23 +0200, Hannes Reinecke wrote:
> > If dm-mpath encounters an reservation conflict it should not
> > fail the path (as communication with the target is not affected)
> > but should rather retry on another path.
> > However, in doing so we might be inducing a ping-pong between
> > paths, with no guarantee of any forward progress.
> > And arguably a reservation conflict is an unexpected error,
> > so we should be passing it upwards to allow the application
> > to take appropriate steps.
>
> If I interpret the code correctly, you've changed the behaviour from the
> current try all paths and fail them, ultimately passing the reservation
> conflict up if all paths fail to return reservation conflict
> immediately, keeping all paths running. This assumes that the
> reservation isn't path specific because if we encounter a path specific
> reservation, you've altered the behaviour from route around to fail.
>
> The case I think the original code was for is SAN Volume controllers
> which use path specific SCSI-3 reservations effectively to do traffic
> control and allow favoured paths. Have you verified that nothing we
> encounter in the enterprise uses path specific reservations for
> multipath shaping any more?
>
> James
>
> > Signed-off-by: Hannes Reinecke <hare at suse.de>
> > ---
> > drivers/md/dm-mpath.c | 14 ++++++++++----
> > 1 file changed, 10 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
> > index 5a67671..e65d266 100644
> > --- a/drivers/md/dm-mpath.c
> > +++ b/drivers/md/dm-mpath.c
> > @@ -1269,7 +1269,16 @@ static int do_end_io(struct multipath *m, struct
> request *clone,
> > if (noretry_error(error))
> > return error;
> >
> > - if (mpio->pgpath)
> > + /*
> > + * EBADE signals an reservation conflict.
> > + * We shouldn't fail the path here as we can communicate with
> > + * the target. We should failover to the next path, but in
> > + * doing so we might be causing a ping-pong between paths.
> > + * So just return the reservation conflict error.
> > + */
> > + if (error == -EBADE)
> > + r = error;
> > + else if (mpio->pgpath)
> > fail_path(mpio->pgpath);
> >
> > spin_lock_irqsave(&m->lock, flags);
> > @@ -1277,9 +1286,6 @@ static int do_end_io(struct multipath *m, struct
> request *clone,
> > if (!m->queue_if_no_path) {
> > if (!__must_push_back(m))
> > r = -EIO;
> > - } else {
> > - if (error == -EBADE)
> > - r = error;
> > }
> > }
> > spin_unlock_irqrestore(&m->lock, flags);
>
>
>
> --
> dm-devel mailing list
> dm-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/dm-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20150716/338f2147/attachment.htm>
More information about the dm-devel
mailing list