target: remove the get_fabric_proto_ident method
Now that we store the protocol identifier in the tpg structure we don't need this method. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
Родитель
e4aae5af81
Коммит
2aeeafae6b
|
@ -300,9 +300,7 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name):
|
|||
buf += "static const struct target_core_fabric_ops " + fabric_mod_name + "_ops = {\n"
|
||||
buf += " .module = THIS_MODULE,\n"
|
||||
buf += " .name = " + fabric_mod_name + ",\n"
|
||||
buf += " .get_fabric_proto_ident = " + fabric_mod_name + "_get_fabric_proto_ident,\n"
|
||||
buf += " .get_fabric_name = " + fabric_mod_name + "_get_fabric_name,\n"
|
||||
buf += " .get_fabric_proto_ident = " + fabric_mod_name + "_get_fabric_proto_ident,\n"
|
||||
buf += " .tpg_get_wwn = " + fabric_mod_name + "_get_fabric_wwn,\n"
|
||||
buf += " .tpg_get_tag = " + fabric_mod_name + "_get_tag,\n"
|
||||
buf += " .tpg_get_pr_transport_id = " + fabric_mod_name + "_get_pr_transport_id,\n"
|
||||
|
@ -461,35 +459,6 @@ def tcm_mod_dump_fabric_ops(proto_ident, fabric_mod_dir_var, fabric_mod_name):
|
|||
bufi += "char *" + fabric_mod_name + "_get_fabric_name(void);\n"
|
||||
continue
|
||||
|
||||
if re.search('get_fabric_proto_ident', fo):
|
||||
buf += "u8 " + fabric_mod_name + "_get_fabric_proto_ident(struct se_portal_group *se_tpg)\n"
|
||||
buf += "{\n"
|
||||
buf += " struct " + fabric_mod_name + "_tpg *tpg = container_of(se_tpg,\n"
|
||||
buf += " struct " + fabric_mod_name + "_tpg, se_tpg);\n"
|
||||
buf += " struct " + fabric_mod_name + "_" + fabric_mod_port + " *" + fabric_mod_port + " = tpg->" + fabric_mod_port + ";\n"
|
||||
buf += " u8 proto_id;\n\n"
|
||||
buf += " switch (" + fabric_mod_port + "->" + fabric_mod_port + "_proto_id) {\n"
|
||||
if proto_ident == "FC":
|
||||
buf += " case SCSI_PROTOCOL_FCP:\n"
|
||||
buf += " default:\n"
|
||||
buf += " proto_id = fc_get_fabric_proto_ident(se_tpg);\n"
|
||||
buf += " break;\n"
|
||||
elif proto_ident == "SAS":
|
||||
buf += " case SCSI_PROTOCOL_SAS:\n"
|
||||
buf += " default:\n"
|
||||
buf += " proto_id = sas_get_fabric_proto_ident(se_tpg);\n"
|
||||
buf += " break;\n"
|
||||
elif proto_ident == "iSCSI":
|
||||
buf += " case SCSI_PROTOCOL_ISCSI:\n"
|
||||
buf += " default:\n"
|
||||
buf += " proto_id = iscsi_get_fabric_proto_ident(se_tpg);\n"
|
||||
buf += " break;\n"
|
||||
|
||||
buf += " }\n\n"
|
||||
buf += " return proto_id;\n"
|
||||
buf += "}\n\n"
|
||||
bufi += "u8 " + fabric_mod_name + "_get_fabric_proto_ident(struct se_portal_group *);\n"
|
||||
|
||||
if re.search('get_wwn', fo):
|
||||
buf += "char *" + fabric_mod_name + "_get_fabric_wwn(struct se_portal_group *se_tpg)\n"
|
||||
buf += "{\n"
|
||||
|
|
|
@ -3394,11 +3394,6 @@ static char *srpt_get_fabric_name(void)
|
|||
return "srpt";
|
||||
}
|
||||
|
||||
static u8 srpt_get_fabric_proto_ident(struct se_portal_group *se_tpg)
|
||||
{
|
||||
return SCSI_TRANSPORTID_PROTOCOLID_SRP;
|
||||
}
|
||||
|
||||
static char *srpt_get_fabric_wwn(struct se_portal_group *tpg)
|
||||
{
|
||||
struct srpt_port *sport = container_of(tpg, struct srpt_port, port_tpg_1);
|
||||
|
@ -3863,7 +3858,6 @@ static const struct target_core_fabric_ops srpt_template = {
|
|||
.name = "srpt",
|
||||
.node_acl_size = sizeof(struct srpt_node_acl),
|
||||
.get_fabric_name = srpt_get_fabric_name,
|
||||
.get_fabric_proto_ident = srpt_get_fabric_proto_ident,
|
||||
.tpg_get_wwn = srpt_get_fabric_wwn,
|
||||
.tpg_get_tag = srpt_get_tag,
|
||||
.tpg_get_pr_transport_id = srpt_get_pr_transport_id,
|
||||
|
|
|
@ -190,23 +190,6 @@ static char *tcm_qla2xxx_npiv_get_fabric_name(void)
|
|||
return "qla2xxx_npiv";
|
||||
}
|
||||
|
||||
static u8 tcm_qla2xxx_get_fabric_proto_ident(struct se_portal_group *se_tpg)
|
||||
{
|
||||
struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg,
|
||||
struct tcm_qla2xxx_tpg, se_tpg);
|
||||
struct tcm_qla2xxx_lport *lport = tpg->lport;
|
||||
u8 proto_id;
|
||||
|
||||
switch (lport->lport_proto_id) {
|
||||
case SCSI_PROTOCOL_FCP:
|
||||
default:
|
||||
proto_id = fc_get_fabric_proto_ident(se_tpg);
|
||||
break;
|
||||
}
|
||||
|
||||
return proto_id;
|
||||
}
|
||||
|
||||
static char *tcm_qla2xxx_get_fabric_wwn(struct se_portal_group *se_tpg)
|
||||
{
|
||||
struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg,
|
||||
|
@ -1928,7 +1911,6 @@ static const struct target_core_fabric_ops tcm_qla2xxx_ops = {
|
|||
.name = "qla2xxx",
|
||||
.node_acl_size = sizeof(struct tcm_qla2xxx_nacl),
|
||||
.get_fabric_name = tcm_qla2xxx_get_fabric_name,
|
||||
.get_fabric_proto_ident = tcm_qla2xxx_get_fabric_proto_ident,
|
||||
.tpg_get_wwn = tcm_qla2xxx_get_fabric_wwn,
|
||||
.tpg_get_tag = tcm_qla2xxx_get_tag,
|
||||
.tpg_get_pr_transport_id = tcm_qla2xxx_get_pr_transport_id,
|
||||
|
@ -1979,7 +1961,6 @@ static const struct target_core_fabric_ops tcm_qla2xxx_npiv_ops = {
|
|||
.name = "qla2xxx_npiv",
|
||||
.node_acl_size = sizeof(struct tcm_qla2xxx_nacl),
|
||||
.get_fabric_name = tcm_qla2xxx_npiv_get_fabric_name,
|
||||
.get_fabric_proto_ident = tcm_qla2xxx_get_fabric_proto_ident,
|
||||
.tpg_get_wwn = tcm_qla2xxx_get_fabric_wwn,
|
||||
.tpg_get_tag = tcm_qla2xxx_get_tag,
|
||||
.tpg_get_pr_transport_id = tcm_qla2xxx_get_pr_transport_id,
|
||||
|
|
|
@ -1918,7 +1918,6 @@ const struct target_core_fabric_ops iscsi_ops = {
|
|||
.name = "iscsi",
|
||||
.node_acl_size = sizeof(struct iscsi_node_acl),
|
||||
.get_fabric_name = iscsi_get_fabric_name,
|
||||
.get_fabric_proto_ident = iscsi_get_fabric_proto_ident,
|
||||
.tpg_get_wwn = lio_tpg_get_endpoint_wwn,
|
||||
.tpg_get_tag = lio_tpg_get_tag,
|
||||
.tpg_get_default_depth = lio_tpg_get_default_depth,
|
||||
|
|
|
@ -525,32 +525,6 @@ static inline struct tcm_loop_tpg *tl_tpg(struct se_portal_group *se_tpg)
|
|||
return container_of(se_tpg, struct tcm_loop_tpg, tl_se_tpg);
|
||||
}
|
||||
|
||||
static u8 tcm_loop_get_fabric_proto_ident(struct se_portal_group *se_tpg)
|
||||
{
|
||||
struct tcm_loop_hba *tl_hba = tl_tpg(se_tpg)->tl_hba;
|
||||
/*
|
||||
* tl_proto_id is set at tcm_loop_configfs.c:tcm_loop_make_scsi_hba()
|
||||
* time based on the protocol dependent prefix of the passed configfs group.
|
||||
*
|
||||
* Based upon tl_proto_id, TCM_Loop emulates the requested fabric
|
||||
* ProtocolID using target_core_fabric_lib.c symbols.
|
||||
*/
|
||||
switch (tl_hba->tl_proto_id) {
|
||||
case SCSI_PROTOCOL_SAS:
|
||||
return sas_get_fabric_proto_ident(se_tpg);
|
||||
case SCSI_PROTOCOL_FCP:
|
||||
return fc_get_fabric_proto_ident(se_tpg);
|
||||
case SCSI_PROTOCOL_ISCSI:
|
||||
return iscsi_get_fabric_proto_ident(se_tpg);
|
||||
default:
|
||||
pr_err("Unknown tl_proto_id: 0x%02x, using"
|
||||
" SAS emulation\n", tl_hba->tl_proto_id);
|
||||
break;
|
||||
}
|
||||
|
||||
return sas_get_fabric_proto_ident(se_tpg);
|
||||
}
|
||||
|
||||
static char *tcm_loop_get_endpoint_wwn(struct se_portal_group *se_tpg)
|
||||
{
|
||||
/*
|
||||
|
@ -1356,7 +1330,6 @@ static const struct target_core_fabric_ops loop_ops = {
|
|||
.module = THIS_MODULE,
|
||||
.name = "loopback",
|
||||
.get_fabric_name = tcm_loop_get_fabric_name,
|
||||
.get_fabric_proto_ident = tcm_loop_get_fabric_proto_ident,
|
||||
.tpg_get_wwn = tcm_loop_get_endpoint_wwn,
|
||||
.tpg_get_tag = tcm_loop_get_tag,
|
||||
.tpg_get_pr_transport_id = tcm_loop_get_pr_transport_id,
|
||||
|
|
|
@ -1832,18 +1832,6 @@ static int sbp_check_stop_free(struct se_cmd *se_cmd)
|
|||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Handlers for Serial Bus Protocol 2/3 (SBP-2 / SBP-3)
|
||||
*/
|
||||
static u8 sbp_get_fabric_proto_ident(struct se_portal_group *se_tpg)
|
||||
{
|
||||
/*
|
||||
* Return a IEEE 1394 SCSI Protocol identifier for loopback operations
|
||||
* This is defined in section 7.5.1 Table 362 in spc4r17
|
||||
*/
|
||||
return SCSI_PROTOCOL_SBP;
|
||||
}
|
||||
|
||||
static u32 sbp_get_pr_transport_id(
|
||||
struct se_portal_group *se_tpg,
|
||||
struct se_node_acl *se_nacl,
|
||||
|
@ -2442,7 +2430,6 @@ static const struct target_core_fabric_ops sbp_ops = {
|
|||
.module = THIS_MODULE,
|
||||
.name = "sbp",
|
||||
.get_fabric_name = sbp_get_fabric_name,
|
||||
.get_fabric_proto_ident = sbp_get_fabric_proto_ident,
|
||||
.tpg_get_wwn = sbp_get_fabric_wwn,
|
||||
.tpg_get_tag = sbp_get_tag,
|
||||
.tpg_get_pr_transport_id = sbp_get_pr_transport_id,
|
||||
|
|
|
@ -318,10 +318,6 @@ static int target_fabric_tf_ops_check(const struct target_core_fabric_ops *tfo)
|
|||
pr_err("Missing tfo->get_fabric_name()\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (!tfo->get_fabric_proto_ident) {
|
||||
pr_err("Missing tfo->get_fabric_proto_ident()\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (!tfo->tpg_get_wwn) {
|
||||
pr_err("Missing tfo->tpg_get_wwn()\n");
|
||||
return -EINVAL;
|
||||
|
|
|
@ -42,16 +42,6 @@
|
|||
/*
|
||||
* Handlers for Serial Attached SCSI (SAS)
|
||||
*/
|
||||
u8 sas_get_fabric_proto_ident(struct se_portal_group *se_tpg)
|
||||
{
|
||||
/*
|
||||
* Return a SAS Serial SCSI Protocol identifier for loopback operations
|
||||
* This is defined in section 7.5.1 Table 362 in spc4r17
|
||||
*/
|
||||
return 0x6;
|
||||
}
|
||||
EXPORT_SYMBOL(sas_get_fabric_proto_ident);
|
||||
|
||||
u32 sas_get_pr_transport_id(
|
||||
struct se_portal_group *se_tpg,
|
||||
struct se_node_acl *se_nacl,
|
||||
|
@ -128,12 +118,6 @@ EXPORT_SYMBOL(sas_parse_pr_out_transport_id);
|
|||
/*
|
||||
* Handlers for Fibre Channel Protocol (FCP)
|
||||
*/
|
||||
u8 fc_get_fabric_proto_ident(struct se_portal_group *se_tpg)
|
||||
{
|
||||
return 0x0; /* 0 = fcp-2 per SPC4 section 7.5.1 */
|
||||
}
|
||||
EXPORT_SYMBOL(fc_get_fabric_proto_ident);
|
||||
|
||||
u32 fc_get_pr_transport_id_len(
|
||||
struct se_portal_group *se_tpg,
|
||||
struct se_node_acl *se_nacl,
|
||||
|
@ -208,17 +192,6 @@ EXPORT_SYMBOL(fc_parse_pr_out_transport_id);
|
|||
/*
|
||||
* Handlers for Internet Small Computer Systems Interface (iSCSI)
|
||||
*/
|
||||
|
||||
u8 iscsi_get_fabric_proto_ident(struct se_portal_group *se_tpg)
|
||||
{
|
||||
/*
|
||||
* This value is defined for "Internet SCSI (iSCSI)"
|
||||
* in spc4r17 section 7.5.1 Table 362
|
||||
*/
|
||||
return 0x5;
|
||||
}
|
||||
EXPORT_SYMBOL(iscsi_get_fabric_proto_ident);
|
||||
|
||||
u32 iscsi_get_pr_transport_id(
|
||||
struct se_portal_group *se_tpg,
|
||||
struct se_node_acl *se_nacl,
|
||||
|
|
|
@ -1447,7 +1447,7 @@ core_scsi3_decode_spec_i_port(
|
|||
struct pr_transport_id_holder *tidh_new, *tidh, *tidh_tmp;
|
||||
const struct target_core_fabric_ops *tmp_tf_ops;
|
||||
unsigned char *buf;
|
||||
unsigned char *ptr, *i_str = NULL, proto_ident, tmp_proto_ident;
|
||||
unsigned char *ptr, *i_str = NULL, proto_ident;
|
||||
char *iport_ptr = NULL, i_buf[PR_REG_ISID_ID_LEN];
|
||||
sense_reason_t ret;
|
||||
u32 tpdl, tid_len = 0;
|
||||
|
@ -1536,15 +1536,13 @@ core_scsi3_decode_spec_i_port(
|
|||
tmp_tf_ops = tmp_tpg->se_tpg_tfo;
|
||||
if (!tmp_tf_ops)
|
||||
continue;
|
||||
if (!tmp_tf_ops->get_fabric_proto_ident ||
|
||||
!tmp_tf_ops->tpg_parse_pr_out_transport_id)
|
||||
if (!tmp_tf_ops->tpg_parse_pr_out_transport_id)
|
||||
continue;
|
||||
/*
|
||||
* Look for the matching proto_ident provided by
|
||||
* the received TransportID
|
||||
*/
|
||||
tmp_proto_ident = tmp_tf_ops->get_fabric_proto_ident(tmp_tpg);
|
||||
if (tmp_proto_ident != proto_ident)
|
||||
if (tmp_tpg->proto_id != proto_ident)
|
||||
continue;
|
||||
dest_rtpi = tmp_port->sep_rtpi;
|
||||
|
||||
|
@ -3230,11 +3228,11 @@ core_scsi3_emulate_pro_register_and_move(struct se_cmd *cmd, u64 res_key,
|
|||
pr_debug("SPC-3 PR REGISTER_AND_MOVE: Extracted Protocol Identifier:"
|
||||
" 0x%02x\n", proto_ident);
|
||||
|
||||
if (proto_ident != dest_tf_ops->get_fabric_proto_ident(dest_se_tpg)) {
|
||||
if (proto_ident != dest_se_tpg->proto_id) {
|
||||
pr_err("SPC-3 PR REGISTER_AND_MOVE: Received"
|
||||
" proto_ident: 0x%02x does not match ident: 0x%02x"
|
||||
" from fabric: %s\n", proto_ident,
|
||||
dest_tf_ops->get_fabric_proto_ident(dest_se_tpg),
|
||||
dest_se_tpg->proto_id,
|
||||
dest_tf_ops->get_fabric_name());
|
||||
ret = TCM_INVALID_PARAMETER_LIST;
|
||||
goto out;
|
||||
|
|
|
@ -286,8 +286,7 @@ check_t10_vend_desc:
|
|||
* Get the PROTOCOL IDENTIFIER as defined by spc4r17
|
||||
* section 7.5.1 Table 362
|
||||
*/
|
||||
buf[off] =
|
||||
(tpg->se_tpg_tfo->get_fabric_proto_ident(tpg) << 4);
|
||||
buf[off] = tpg->proto_id << 4;
|
||||
buf[off++] |= 0x1; /* CODE SET == Binary */
|
||||
buf[off] = 0x80; /* Set PIV=1 */
|
||||
/* Set ASSOCIATION == target port: 01b */
|
||||
|
@ -322,8 +321,7 @@ check_t10_vend_desc:
|
|||
tg_pt_gp_id = tg_pt_gp->tg_pt_gp_id;
|
||||
spin_unlock(&tg_pt_gp_mem->tg_pt_gp_mem_lock);
|
||||
|
||||
buf[off] =
|
||||
(tpg->se_tpg_tfo->get_fabric_proto_ident(tpg) << 4);
|
||||
buf[off] = tpg->proto_id << 4;
|
||||
buf[off++] |= 0x1; /* CODE SET == Binary */
|
||||
buf[off] = 0x80; /* Set PIV=1 */
|
||||
/* Set ASSOCIATION == target port: 01b */
|
||||
|
@ -371,8 +369,7 @@ check_lu_gp:
|
|||
* section 7.5.1 Table 362
|
||||
*/
|
||||
check_scsi_name:
|
||||
buf[off] =
|
||||
(tpg->se_tpg_tfo->get_fabric_proto_ident(tpg) << 4);
|
||||
buf[off] = tpg->proto_id << 4;
|
||||
buf[off++] |= 0x3; /* CODE SET == UTF-8 */
|
||||
buf[off] = 0x80; /* Set PIV=1 */
|
||||
/* Set ASSOCIATION == target port: 01b */
|
||||
|
@ -412,8 +409,7 @@ check_scsi_name:
|
|||
/*
|
||||
* Target device designator
|
||||
*/
|
||||
buf[off] =
|
||||
(tpg->se_tpg_tfo->get_fabric_proto_ident(tpg) << 4);
|
||||
buf[off] = tpg->proto_id << 4;
|
||||
buf[off++] |= 0x3; /* CODE SET == UTF-8 */
|
||||
buf[off] = 0x80; /* Set PIV=1 */
|
||||
/* Set ASSOCIATION == target device: 10b */
|
||||
|
|
|
@ -452,7 +452,6 @@ static const struct target_core_fabric_ops ft_fabric_ops = {
|
|||
.name = "fc",
|
||||
.node_acl_size = sizeof(struct ft_node_acl),
|
||||
.get_fabric_name = ft_get_fabric_name,
|
||||
.get_fabric_proto_ident = fc_get_fabric_proto_ident,
|
||||
.tpg_get_wwn = ft_get_fabric_wwn,
|
||||
.tpg_get_tag = ft_get_tag,
|
||||
.tpg_get_pr_transport_id = fc_get_pr_transport_id,
|
||||
|
|
|
@ -1274,23 +1274,6 @@ static char *usbg_get_fabric_name(void)
|
|||
return "usb_gadget";
|
||||
}
|
||||
|
||||
static u8 usbg_get_fabric_proto_ident(struct se_portal_group *se_tpg)
|
||||
{
|
||||
struct usbg_tpg *tpg = container_of(se_tpg,
|
||||
struct usbg_tpg, se_tpg);
|
||||
struct usbg_tport *tport = tpg->tport;
|
||||
u8 proto_id;
|
||||
|
||||
switch (tport->tport_proto_id) {
|
||||
case SCSI_PROTOCOL_SAS:
|
||||
default:
|
||||
proto_id = sas_get_fabric_proto_ident(se_tpg);
|
||||
break;
|
||||
}
|
||||
|
||||
return proto_id;
|
||||
}
|
||||
|
||||
static char *usbg_get_fabric_wwn(struct se_portal_group *se_tpg)
|
||||
{
|
||||
struct usbg_tpg *tpg = container_of(se_tpg,
|
||||
|
@ -1803,7 +1786,6 @@ static const struct target_core_fabric_ops usbg_ops = {
|
|||
.module = THIS_MODULE,
|
||||
.name = "usb_gadget",
|
||||
.get_fabric_name = usbg_get_fabric_name,
|
||||
.get_fabric_proto_ident = usbg_get_fabric_proto_ident,
|
||||
.tpg_get_wwn = usbg_get_fabric_wwn,
|
||||
.tpg_get_tag = usbg_get_tag,
|
||||
.tpg_get_pr_transport_id = usbg_get_pr_transport_id,
|
||||
|
|
|
@ -288,28 +288,6 @@ static char *vhost_scsi_get_fabric_name(void)
|
|||
return "vhost";
|
||||
}
|
||||
|
||||
static u8 vhost_scsi_get_fabric_proto_ident(struct se_portal_group *se_tpg)
|
||||
{
|
||||
struct vhost_scsi_tpg *tpg = container_of(se_tpg,
|
||||
struct vhost_scsi_tpg, se_tpg);
|
||||
struct vhost_scsi_tport *tport = tpg->tport;
|
||||
|
||||
switch (tport->tport_proto_id) {
|
||||
case SCSI_PROTOCOL_SAS:
|
||||
return sas_get_fabric_proto_ident(se_tpg);
|
||||
case SCSI_PROTOCOL_FCP:
|
||||
return fc_get_fabric_proto_ident(se_tpg);
|
||||
case SCSI_PROTOCOL_ISCSI:
|
||||
return iscsi_get_fabric_proto_ident(se_tpg);
|
||||
default:
|
||||
pr_err("Unknown tport_proto_id: 0x%02x, using"
|
||||
" SAS emulation\n", tport->tport_proto_id);
|
||||
break;
|
||||
}
|
||||
|
||||
return sas_get_fabric_proto_ident(se_tpg);
|
||||
}
|
||||
|
||||
static char *vhost_scsi_get_fabric_wwn(struct se_portal_group *se_tpg)
|
||||
{
|
||||
struct vhost_scsi_tpg *tpg = container_of(se_tpg,
|
||||
|
@ -2244,7 +2222,6 @@ static struct target_core_fabric_ops vhost_scsi_ops = {
|
|||
.module = THIS_MODULE,
|
||||
.name = "vhost",
|
||||
.get_fabric_name = vhost_scsi_get_fabric_name,
|
||||
.get_fabric_proto_ident = vhost_scsi_get_fabric_proto_ident,
|
||||
.tpg_get_wwn = vhost_scsi_get_fabric_wwn,
|
||||
.tpg_get_tag = vhost_scsi_get_tpgt,
|
||||
.tpg_get_pr_transport_id = vhost_scsi_get_pr_transport_id,
|
||||
|
|
|
@ -1254,28 +1254,6 @@ static char *scsiback_dump_proto_id(struct scsiback_tport *tport)
|
|||
return "Unknown";
|
||||
}
|
||||
|
||||
static u8 scsiback_get_fabric_proto_ident(struct se_portal_group *se_tpg)
|
||||
{
|
||||
struct scsiback_tpg *tpg = container_of(se_tpg,
|
||||
struct scsiback_tpg, se_tpg);
|
||||
struct scsiback_tport *tport = tpg->tport;
|
||||
|
||||
switch (tport->tport_proto_id) {
|
||||
case SCSI_PROTOCOL_SAS:
|
||||
return sas_get_fabric_proto_ident(se_tpg);
|
||||
case SCSI_PROTOCOL_FCP:
|
||||
return fc_get_fabric_proto_ident(se_tpg);
|
||||
case SCSI_PROTOCOL_ISCSI:
|
||||
return iscsi_get_fabric_proto_ident(se_tpg);
|
||||
default:
|
||||
pr_err("Unknown tport_proto_id: 0x%02x, using SAS emulation\n",
|
||||
tport->tport_proto_id);
|
||||
break;
|
||||
}
|
||||
|
||||
return sas_get_fabric_proto_ident(se_tpg);
|
||||
}
|
||||
|
||||
static char *scsiback_get_fabric_wwn(struct se_portal_group *se_tpg)
|
||||
{
|
||||
struct scsiback_tpg *tpg = container_of(se_tpg,
|
||||
|
@ -1929,7 +1907,6 @@ static const struct target_core_fabric_ops scsiback_ops = {
|
|||
.module = THIS_MODULE,
|
||||
.name = "xen-pvscsi",
|
||||
.get_fabric_name = scsiback_get_fabric_name,
|
||||
.get_fabric_proto_ident = scsiback_get_fabric_proto_ident,
|
||||
.tpg_get_wwn = scsiback_get_fabric_wwn,
|
||||
.tpg_get_tag = scsiback_get_tag,
|
||||
.tpg_get_pr_transport_id = scsiback_get_pr_transport_id,
|
||||
|
|
|
@ -6,7 +6,6 @@ struct target_core_fabric_ops {
|
|||
const char *name;
|
||||
size_t node_acl_size;
|
||||
char *(*get_fabric_name)(void);
|
||||
u8 (*get_fabric_proto_ident)(struct se_portal_group *);
|
||||
char *(*tpg_get_wwn)(struct se_portal_group *);
|
||||
u16 (*tpg_get_tag)(struct se_portal_group *);
|
||||
u32 (*tpg_get_default_depth)(struct se_portal_group *);
|
||||
|
@ -179,7 +178,6 @@ int core_tpg_register(const struct target_core_fabric_ops *,
|
|||
int core_tpg_deregister(struct se_portal_group *);
|
||||
|
||||
/* SAS helpers */
|
||||
u8 sas_get_fabric_proto_ident(struct se_portal_group *);
|
||||
u32 sas_get_pr_transport_id(struct se_portal_group *, struct se_node_acl *,
|
||||
struct t10_pr_registration *, int *, unsigned char *);
|
||||
u32 sas_get_pr_transport_id_len(struct se_portal_group *, struct se_node_acl *,
|
||||
|
@ -188,7 +186,6 @@ char *sas_parse_pr_out_transport_id(struct se_portal_group *, const char *,
|
|||
u32 *, char **);
|
||||
|
||||
/* FC helpers */
|
||||
u8 fc_get_fabric_proto_ident(struct se_portal_group *);
|
||||
u32 fc_get_pr_transport_id(struct se_portal_group *, struct se_node_acl *,
|
||||
struct t10_pr_registration *, int *, unsigned char *);
|
||||
u32 fc_get_pr_transport_id_len(struct se_portal_group *, struct se_node_acl *,
|
||||
|
@ -197,7 +194,6 @@ char *fc_parse_pr_out_transport_id(struct se_portal_group *, const char *,
|
|||
u32 *, char **);
|
||||
|
||||
/* iSCSI helpers */
|
||||
u8 iscsi_get_fabric_proto_ident(struct se_portal_group *);
|
||||
u32 iscsi_get_pr_transport_id(struct se_portal_group *, struct se_node_acl *,
|
||||
struct t10_pr_registration *, int *, unsigned char *);
|
||||
u32 iscsi_get_pr_transport_id_len(struct se_portal_group *, struct se_node_acl *,
|
||||
|
|
Загрузка…
Ссылка в новой задаче