On Thu, Jan 28, 2021 at 09:45:42PM +0100, mwi...@suse.com wrote:
> From: Martin Wilck <mwi...@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 <mwi...@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

-Ben

> +                     if (sscanf(tgtname, "end_device-%d:%d:%d%c",
> +                                &host, &channel, &tgtid, &c) == 3)
> +                             break;
> +                     if (sscanf(tgtname, "end_device-%d:%d%c",
> +                                &host, &tgtid, &c) == 2)
>                               break;
>                       tgtdev = udev_device_get_parent(tgtdev);
>                       tgtid = -1;
> -- 
> 2.29.2

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

Reply via email to