[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