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

Or Gerlitz <[email protected]>
Newsgroups org.kernel.vger.stgt
Message-ID <[email protected]>
On 25/02/2014 14:54, Or Gerlitz 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.

Hi Tomo,

I didn't see a comment from you on this patch, did you get it?

Or.


> 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);
> +	}
> +	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;
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.