[dm-devel] [PATCH] libmultipath: use uint64_t for sg_id.lun

Benjamin Marzinski bmarzins at redhat.com
Fri Jul 2 16:57:35 UTC 2021


On Wed, Jun 30, 2021 at 10:01:35PM +0200, mwilck at suse.com wrote:
> From: Martin Wilck <mwilck at suse.com>
> 
> SCSI LUNs are 64bit unsigned integers, and have been exposed as such by
> the kernel for years. Storage using the full 8 bytes is fortunately rare.
> Still, we should handle this properly.
> 
Reviewed-by: Benjamin Marzinski <bmarzins at redhat.com>
> Signed-off-by: Martin Wilck <mwilck at suse.com>
> ---
>  libmultipath/discovery.c                 | 10 +++++-----
>  libmultipath/print.c                     |  2 +-
>  libmultipath/prioritizers/weightedpath.c |  2 +-
>  libmultipath/structs.c                   |  2 +-
>  libmultipath/structs.h                   |  4 +++-
>  5 files changed, 11 insertions(+), 9 deletions(-)
> 
> diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
> index bfe2f56..e9f5703 100644
> --- a/libmultipath/discovery.c
> +++ b/libmultipath/discovery.c
> @@ -1427,7 +1427,7 @@ scsi_sysfs_pathinfo (struct path *pp, const struct _vector *hwtable)
>  			attr_path = udev_device_get_sysname(parent);
>  			if (!attr_path)
>  				break;
> -			if (sscanf(attr_path, "%i:%i:%i:%i",
> +			if (sscanf(attr_path, "%i:%i:%i:%" SCNu64,
>  				   &pp->sg_id.host_no,
>  				   &pp->sg_id.channel,
>  				   &pp->sg_id.scsi_id,
> @@ -1462,7 +1462,7 @@ scsi_sysfs_pathinfo (struct path *pp, const struct _vector *hwtable)
>  	/*
>  	 * host / bus / target / lun
>  	 */
> -	condlog(3, "%s: h:b:t:l = %i:%i:%i:%i",
> +	condlog(3, "%s: h:b:t:l = %i:%i:%i:%" PRIu64,
>  			pp->dev,
>  			pp->sg_id.host_no,
>  			pp->sg_id.channel,
> @@ -1577,7 +1577,7 @@ ccw_sysfs_pathinfo (struct path *pp, const struct _vector *hwtable)
>  		   &pp->sg_id.host_no,
>  		   &pp->sg_id.channel,
>  		   &pp->sg_id.scsi_id) == 3) {
> -		condlog(3, "%s: h:b:t:l = %i:%i:%i:%i",
> +		condlog(3, "%s: h:b:t:l = %i:%i:%i:%" PRIu64,
>  			pp->dev,
>  			pp->sg_id.host_no,
>  			pp->sg_id.channel,
> @@ -1636,7 +1636,7 @@ cciss_sysfs_pathinfo (struct path *pp, const struct _vector *hwtable)
>  	 */
>  	pp->sg_id.lun = 0;
>  	pp->sg_id.channel = 0;
> -	condlog(3, "%s: h:b:t:l = %i:%i:%i:%i",
> +	condlog(3, "%s: h:b:t:l = %i:%i:%i:%" PRIu64,
>  		pp->dev,
>  		pp->sg_id.host_no,
>  		pp->sg_id.channel,
> @@ -1815,7 +1815,7 @@ scsi_ioctl_pathinfo (struct path * pp, int mask)
>  			attr_path = udev_device_get_sysname(parent);
>  			if (!attr_path)
>  				break;
> -			if (sscanf(attr_path, "%i:%i:%i:%i",
> +			if (sscanf(attr_path, "%i:%i:%i:%" SCNu64,
>  				   &pp->sg_id.host_no,
>  				   &pp->sg_id.channel,
>  				   &pp->sg_id.scsi_id,
> diff --git a/libmultipath/print.c b/libmultipath/print.c
> index 3c69bf4..29ce499 100644
> --- a/libmultipath/print.c
> +++ b/libmultipath/print.c
> @@ -392,7 +392,7 @@ snprint_hcil (char * buff, size_t len, const struct path * pp)
>  	if (!pp || pp->sg_id.host_no < 0)
>  		return snprintf(buff, len, "#:#:#:#");
>  
> -	return snprintf(buff, len, "%i:%i:%i:%i",
> +	return snprintf(buff, len, "%i:%i:%i:%" PRIu64,
>  			pp->sg_id.host_no,
>  			pp->sg_id.channel,
>  			pp->sg_id.scsi_id,
> diff --git a/libmultipath/prioritizers/weightedpath.c b/libmultipath/prioritizers/weightedpath.c
> index 916970d..650088b 100644
> --- a/libmultipath/prioritizers/weightedpath.c
> +++ b/libmultipath/prioritizers/weightedpath.c
> @@ -101,7 +101,7 @@ int prio_path_weight(struct path *pp, char *prio_args)
>  	}
>  
>  	if (!strcmp(regex, HBTL)) {
> -		sprintf(path, "%d:%d:%d:%d", pp->sg_id.host_no,
> +		sprintf(path, "%d:%d:%d:%" PRIu64, pp->sg_id.host_no,
>  			pp->sg_id.channel, pp->sg_id.scsi_id, pp->sg_id.lun);
>  	} else if (!strcmp(regex, DEV_NAME)) {
>  		strcpy(path, pp->dev);
> diff --git a/libmultipath/structs.c b/libmultipath/structs.c
> index 8751fc2..6e5a103 100644
> --- a/libmultipath/structs.c
> +++ b/libmultipath/structs.c
> @@ -96,7 +96,7 @@ alloc_path (void)
>  		pp->sg_id.host_no = -1;
>  		pp->sg_id.channel = -1;
>  		pp->sg_id.scsi_id = -1;
> -		pp->sg_id.lun = -1;
> +		pp->sg_id.lun = SCSI_INVALID_LUN;
>  		pp->sg_id.proto_id = SCSI_PROTOCOL_UNSPEC;
>  		pp->fd = -1;
>  		pp->tpgs = TPGS_UNDEF;
> diff --git a/libmultipath/structs.h b/libmultipath/structs.h
> index c8447e5..c52bcee 100644
> --- a/libmultipath/structs.h
> +++ b/libmultipath/structs.h
> @@ -178,6 +178,8 @@ enum scsi_protocol {
>  	SCSI_PROTOCOL_UNSPEC = 0xf, /* No specific protocol */
>  };
>  
> +#define SCSI_INVALID_LUN ~0ULL
> +
>  enum no_undef_states {
>  	NU_NO = -1,
>  	NU_UNDEF = 0,
> @@ -258,7 +260,7 @@ struct sg_id {
>  	int host_no;
>  	int channel;
>  	int scsi_id;
> -	int lun;
> +	uint64_t lun;
>  	short h_cmd_per_lun;
>  	short d_queue_depth;
>  	enum scsi_protocol proto_id;
> -- 
> 2.32.0




More information about the dm-devel mailing list