[stgt] spc: Support NAA IEEE Registered Extended field in VPD page 0x83

FUJITA Tomonori fujita.tomonori at lab.ntt.co.jp
Sat Mar 8 13:40:54 CET 2014


Sorry for the delay,

On Tue, 25 Feb 2014 14:54:13 +0200
Or Gerlitz <ogerlitz at mellanox.com> wrote:

> From: Dennis Cullison <Dennis.Cullison at Teradata.com>
> 
> Enables support for the NAA IEEE Registered Extended field in the
> inquiry VPD page 0x83. This field is used by multi-pathing
> software for device persistency.
> 
> Signed-off-by: Dennis Cullison <Dennis.Cullison at Teradata.com>
> Signed-off-by: Or Gerlitz <ogerlitz at mellanox.com>
> ---
> 
> Hi Tomo, 
> 
> This fix is from Dennis Cullison who asked me to assist in submission
> 
> Or.
> 
>  usr/spc.c |   26 +++++++++++++++++++++++++-
>  1 files changed, 25 insertions(+), 1 deletions(-)
> 
> diff --git a/usr/spc.c b/usr/spc.c
> index 29f39a9..0dd590f 100644
> --- a/usr/spc.c
> +++ b/usr/spc.c
> @@ -145,6 +145,12 @@ static void update_vpd_83(struct scsi_lu *lu, void *id)
>  	struct vpd *vpd_pg = lu->attrs.lu_vpd[PCODE_OFFSET(0x83)];
>  	uint8_t	*data = vpd_pg->data;
>  
> +	char *id_str = id;
> +	char subs[] = "0";
> +	unsigned long a = 0;
> +	unsigned long b = 0;
> +	unsigned long c;
> +
>  	data[0] = INQ_CODE_ASCII;
>  	data[1] = DESG_T10;
>  	data[3] = SCSI_ID_LEN;
> @@ -160,6 +166,24 @@ static void update_vpd_83(struct scsi_lu *lu, void *id)
>  
>  	put_unaligned_be64(lu->attrs.numeric_id, data);
>  	data[0] |= NAA_LOCAL << 4;
> +
> +	data += NAA_DESG_LEN;
> +	data[0] = INQ_CODE_BIN;
> +	data[1] = DESG_NAA;
> +	data[3] = NAA_DESG_LEN_EXTD;
> +	data += DESG_HDR_LEN;
> +	while (*id_str) {
> +		subs[0] = *id_str++;
> +		c = a >> 60;
> +		a <<= 4;
> +		b <<= 4;
> +		b |= c;
> +		a |= strtoul(subs, NULL, 16);

Can you please add comments to explan what the above code is supposed
to do? Also the code works on architecture where long is 32bits?


> +	}
> +	put_unaligned_be64(b, data);
> +	put_unaligned_be64(a, data + 8);
> +	data[0] &= 0x0F;
> +	data[0] |= NAA_IEEE_REGD_EXTD << 4;
>  }
>  
>  static void update_vpd_b2(struct scsi_lu *lu, void *id)
> @@ -2060,7 +2084,7 @@ int spc_lu_init(struct scsi_lu *lu)
>  
>  	/* VPD page 0x83 */
>  	pg = PCODE_OFFSET(0x83);
> -	lu_vpd[pg] = alloc_vpd(2*DESG_HDR_LEN + NAA_DESG_LEN + SCSI_ID_LEN);
> +	lu_vpd[pg] = alloc_vpd(3*DESG_HDR_LEN + NAA_DESG_LEN + SCSI_ID_LEN + NAA_DESG_LEN_EXTD);
>  	if (!lu_vpd[pg])
>  		return -ENOMEM;
>  	lu_vpd[pg]->vpd_update = update_vpd_83;
> -- 
> 1.7.1
> 
> --
> To unsubscribe from this list: send the line "unsubscribe stgt" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the stgt mailing list