From: Hannes Reinecke <hare@suse.de>
To: device-mapper development <dm-devel@redhat.com>
Cc: Martin Schwenke <martin@meltin.net>
Subject: Re: [PATCH] multipathd: Don't mark a virtio_blk path offline if it has no sysfs "state" attribute
Date: Thu, 05 May 2011 09:02:07 +0200 [thread overview]
Message-ID: <4DC24B6F.5020407@suse.de> (raw)
In-Reply-To: <20110505163225.0a8a5257@martins.ozlabs.org>
On 05/05/2011 08:32 AM, Martin Schwenke wrote:
> multipathd currently marks paths as down if they don't have a sysfs
> "state" attribute.
>
> Unfortunately, this makes multipathd unusable with Linux virtio_blk
> devices, since they don't have this attribute. I need to use multipath
> with virtio for consistency with a real configuration when testing a
> clustered NAS system - yeah, I'm that guy again... :-)
>
> One way of working around this might be to have path_offline() return
> PATH_UP for all devices that don't have a sysfs "state" attribute,
> instead of PATH_WILD. However, I'm guessing the current behaviour might
> exist for a reason.
>
> The following patch makes path_offline() always return PATH_UP instead
> of PATH_WILD for virtio_blk devices. I've implemented the nested if
> statements as below to change the code flow as little as possible
> when sysfs_get_state() actually succeeds, which I assume is usually the
> case. If nobody is feeling paranoid then the check for virtio_blk
> could obviously be done before the call to sysfs_get_state().
>
> If people think this patch is too specific then at least it can be
> used to start a discussion... ;-)
>
Argl. They messed it up _again_.
(Speaking as someone who is in the process of cleaning up his patch
queue for multipath. Should have done that _far_ earlier :-( )
path_offline() _absolutely_ requires a check if the device is
actually a SCSI device. We do have several others to contend with
(cciss, dasd), and none of those do have the 'state' attribute.
So we need this patch
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
index 6cd2ec9..4af0cd3 100644
--- a/libmultipath/discovery.c
+++ b/libmultipath/discovery.c
@@ -645,6 +645,10 @@ path_offline (struct path * pp)
struct sysfs_device * parent;
char buff[SCSI_STATE_SIZE];
+ if (pp->bus != SYSFS_BUS_SCSI)
+ /* No information for non-SCSI devices, return UP */
+ return PATH_UP;
+
pp->sysdev = sysfs_device_from_path(pp);
if (!pp->sysdev) {
condlog(1, "%s: failed to get sysfs information",
pp->dev);
And you need to implement virtio_blk as it's own bus type.
(Say SYSFS_BUS_VIRTIO). And teach discovery.c to detect this one
properly.
Look at 'cciss' and 'dasd' on how that's done.
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)
next prev parent reply other threads:[~2011-05-05 7:02 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-05 6:32 [PATCH] multipathd: Don't mark a virtio_blk path offline if it has no sysfs "state" attribute Martin Schwenke
2011-05-05 7:02 ` Hannes Reinecke [this message]
2011-05-05 7:37 ` Martin Schwenke
2011-05-05 7:13 ` Christophe Varoqui
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=4DC24B6F.5020407@suse.de \
--to=hare@suse.de \
--cc=dm-devel@redhat.com \
--cc=martin@meltin.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.