[stgt] spc: Support NAA IEEE Registered Extended field in VPD page 0x83
Or Gerlitz
ogerlitz at mellanox.com
Mon Mar 3 18:14:28 CET 2014
On 25/02/2014 14:54, Or Gerlitz 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.
Hi Tomo,
I didn't see a comment from you on this patch, did you get it?
Or.
> 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);
> + }
> + 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;
--
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