target: Add protected fabric + unprotected device support
This patch adds a new target_core_fabric_ops callback for allowing fabric drivers to expose a TPG attribute for signaling when a T10-PI protected fabric wants to function with an un-protected device without T10-PI. This specifically is to allow LIO to perform WRITE_STRIP + READ_INSERT operations when functioning with non T10-PI enabled devices, seperate from any available hw offloads the fabric supports. This is done using a new se_sess->sess_prot_type that is set at fabric session creation time based upon the TPG attribute. It currently cannot be changed for individual sessions after initial creation. Also, update existing target_core_sbc.c code to honor sess_prot_type when setting up cmd->prot_op + cmd->prot_type assignments. (Add unlikely and !! boolean conversion in sbc_check_prot - Sagi) Cc: Martin Petersen <martin.petersen@oracle.com> Cc: Sagi Grimberg <sagig@mellanox.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Doug Gilbert <dgilbert@interlog.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
@@ -616,6 +616,7 @@ struct se_session {
|
||||
unsigned sess_tearing_down:1;
|
||||
u64 sess_bin_isid;
|
||||
enum target_prot_op sup_prot_ops;
|
||||
enum target_prot_type sess_prot_type;
|
||||
struct se_node_acl *se_node_acl;
|
||||
struct se_portal_group *se_tpg;
|
||||
void *fabric_sess_ptr;
|
||||
|
@@ -27,6 +27,14 @@ struct target_core_fabric_ops {
|
||||
* inquiry response
|
||||
*/
|
||||
int (*tpg_check_demo_mode_login_only)(struct se_portal_group *);
|
||||
/*
|
||||
* Optionally used as a configfs tunable to determine when
|
||||
* target-core should signal the PROTECT=1 feature bit for
|
||||
* backends that don't support T10-PI, so that either fabric
|
||||
* HW offload or target-core emulation performs the associated
|
||||
* WRITE_STRIP and READ_INSERT operations.
|
||||
*/
|
||||
int (*tpg_check_prot_fabric_only)(struct se_portal_group *);
|
||||
struct se_node_acl *(*tpg_alloc_fabric_acl)(
|
||||
struct se_portal_group *);
|
||||
void (*tpg_release_fabric_acl)(struct se_portal_group *,
|
||||
|
Reference in New Issue
Block a user