Re: spc: Support NAA IEEE Registered Extended field in VPD page 0x83

FUJITA Tomonori <[email protected]>
Newsgroups org.kernel.vger.stgt
Message-ID <20140308.214054.1305564732068200109.fujita.tomonori@lab.ntt.co.jp>
Sorry for the delay,

On Tue, 25 Feb 2014 14:54:13 +0200
Or Gerlitz <[email protected]> wrote:

> From: Dennis Cullison <[email protected]>
> 
> 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 <[email protected]>
> Signed-off-by: Or Gerlitz <[email protected]>
> ---
> 
> 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 [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.