[dm-devel] [PATCH 1/3] libmultipath: use 3rd digit as transport_id for expanders

Martin Wilck mwilck at suse.com
Tue Feb 2 09:28:19 UTC 2021


On Mon, 2021-02-01 at 20:22 -0600, Benjamin Marzinski wrote:
> On Thu, Jan 28, 2021 at 09:45:42PM +0100, mwilck at suse.com wrote:
> > From: Martin Wilck <mwilck at suse.com>
> > 
> > On SAS expanders, node id's have 3 digits. sysfs paths look like
> > this:
> > 
> > /sys/devices/pci0000:80/0000:80:02.0/0000:8b:00.0/0000:8c:09.0/0000
> > :8f:00.0/host9/port-9:0/expander-9:0/port-9:0:13/expander-9:1/port-
> > 9:1:12/expander-9:2/port-9:2:4/end_device-
> > 9:2:4/target9:0:29/9:0:29:0/block/sdac
> > 
> > In that case, we should use the last digit as transport id.
> > 
> > Signed-off-by: Martin Wilck <mwilck at suse.com>
> > ---
> >  libmultipath/discovery.c | 11 +++++++++--
> >  1 file changed, 9 insertions(+), 2 deletions(-)
> > 
> > diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
> > index e818585..f3ce3f8 100644
> > --- a/libmultipath/discovery.c
> > +++ b/libmultipath/discovery.c
> > @@ -358,9 +358,16 @@ sysfs_get_tgt_nodename(struct path *pp, char
> > *node)
> >         if (value) {
> >                 tgtdev = udev_device_get_parent(parent);
> >                 while (tgtdev) {
> > +                       char c;
> > +
> >                         tgtname = udev_device_get_sysname(tgtdev);
> > -                       if (tgtname && sscanf(tgtname, "end_device-
> > %d:%d",
> > -                                  &host, &tgtid) == 2)
> > +                       if (!tgtname)
> > +                               continue;
> 
> won't this make and endless loop if tgtname == NULL

Ouch. Thanks for spotting this.

Martin







More information about the dm-devel mailing list