From: Kyle Fortin Date: Tue, 13 Mar 2018 17:44:33 +0000 (-0400) Subject: target: add inquiry_vendor module param to override LIO-ORG X-Git-Tag: v4.1.12-124.31.3~909 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=a8c63cd8b78544cf132b7ed93dc21decd7392f88;p=users%2Fjedix%2Flinux-maple.git target: add inquiry_vendor module param to override LIO-ORG Orabug: 27679431 OL6 iscsi target used IET which presented IET for the inquiry vendor. OL7 uses LIO iscsi target instead, which presents 'LIO-ORG'. Exadata targets upgrading from OL6 to OL7 need to present the same vendor ID to existing iscsi initiator multipath mappings. Add target_core_mod parameter inquiry_vendor for target inquiry vendor string override. It defaults to original "LIO-ORG " if not set. (cherry picked from commit 87e9da042f42aa5bef1a76c4ef84989680e1df2e) Signed-off-by: Kyle Fortin Reviewed-by: Martin K. Petersen --- diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c index 6afcd7bdef70..44382647668c 100644 --- a/drivers/target/target_core_device.c +++ b/drivers/target/target_core_device.c @@ -24,6 +24,8 @@ * ******************************************************************************/ +#include +#include #include #include #include @@ -55,6 +57,12 @@ static struct se_hba *lun0_hba; /* not static, needed by tpg.c */ struct se_device *g_lun0_dev; +/* SCSI inquiry vendor string is 8 chars space padded + NULL. */ +char g_inquiry_vendor[9] = "LIO-ORG "; +module_param_string(inquiry_vendor, g_inquiry_vendor, + sizeof(g_inquiry_vendor), S_IRUGO|S_IWUSR); +MODULE_PARM_DESC(inquiry_vendor, "inquiry vendor string override"); + sense_reason_t transport_lookup_cmd_lun(struct se_cmd *se_cmd, u32 unpacked_lun) { @@ -1605,7 +1613,7 @@ int target_configure_device(struct se_device *dev) * passthrough because this is being provided by the backend LLD. */ if (!(dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)) { - strncpy(&dev->t10_wwn.vendor[0], "LIO-ORG", 8); + strncpy(&dev->t10_wwn.vendor[0], g_inquiry_vendor, 8); strncpy(&dev->t10_wwn.model[0], dev->transport->inquiry_prod, 16); strncpy(&dev->t10_wwn.revision[0], diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h index e775359ebfb6..9e19d9099df5 100644 --- a/drivers/target/target_core_internal.h +++ b/drivers/target/target_core_internal.h @@ -20,6 +20,7 @@ extern struct t10_alua_lu_gp *default_lu_gp; /* target_core_device.c */ extern struct mutex g_device_mutex; extern struct list_head g_device_list; +extern char g_inquiry_vendor[]; struct se_dev_entry *core_get_se_deve_from_rtpi(struct se_node_acl *, u16); int core_free_device_list_for_node(struct se_node_acl *, diff --git a/drivers/target/target_core_spc.c b/drivers/target/target_core_spc.c index 7912aa124385..d75bdd9dbe2a 100644 --- a/drivers/target/target_core_spc.c +++ b/drivers/target/target_core_spc.c @@ -114,7 +114,7 @@ spc_emulate_inquiry_std(struct se_cmd *cmd, unsigned char *buf) buf[7] = 0x2; /* CmdQue=1 */ - memcpy(&buf[8], "LIO-ORG ", 8); + memcpy(&buf[8], g_inquiry_vendor, 8); memset(&buf[16], 0x20, 16); memcpy(&buf[16], dev->t10_wwn.model, min_t(size_t, strlen(dev->t10_wwn.model), 16)); @@ -259,7 +259,7 @@ check_t10_vend_desc: buf[off] = 0x2; /* ASCII */ buf[off+1] = 0x1; /* T10 Vendor ID */ buf[off+2] = 0x0; - memcpy(&buf[off+4], "LIO-ORG", 8); + memcpy(&buf[off+4], g_inquiry_vendor, 8); /* Extra Byte for NULL Terminator */ id_len++; /* Identifier Length */