Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
Pull SCSI target updates from Nicholas Bellinger:
"Here are the target pending updates for v3.15-rc1. Apologies in
advance for waiting until the second to last day of the merge window
to send these out.
The highlights this round include:
- iser-target support for T10 PI (DIF) offloads (Sagi + Or)
- Fix Task Aborted Status (TAS) handling in target-core (Alex Leung)
- Pass in transport supported PI at session initialization (Sagi + MKP + nab)
- Add WRITE_INSERT + READ_STRIP T10 PI support in target-core (nab + Sagi)
- Fix iscsi-target ERL=2 ASYNC_EVENT connection pointer bug (nab)
- Fix tcm_fc use-after-free of ft_tpg (Andy Grover)
- Use correct ib_sg_dma primitives in ib_isert (Mike Marciniszyn)
Also, note the virtio-scsi + vhost-scsi changes to expose T10 PI
metadata into KVM guest have been left-out for now, as there where a
few comments from MST + Paolo that where not able to be addressed in
time for v3.15. Please expect this feature for v3.16-rc1"
* 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (43 commits)
ib_srpt: Use correct ib_sg_dma primitives
target/tcm_fc: Rename ft_tport_create to ft_tport_get
target/tcm_fc: Rename ft_{add,del}_lport to {add,del}_wwn
target/tcm_fc: Rename structs and list members for clarity
target/tcm_fc: Limit to 1 TPG per wwn
target/tcm_fc: Don't export ft_lport_list
target/tcm_fc: Fix use-after-free of ft_tpg
target: Add check to prevent Abort Task from aborting itself
target: Enable READ_STRIP emulation in target_complete_ok_work
target/sbc: Add sbc_dif_read_strip software emulation
target: Enable WRITE_INSERT emulation in target_execute_cmd
target/sbc: Add sbc_dif_generate software emulation
target/sbc: Only expose PI read_cap16 bits when supported by fabric
target/spc: Only expose PI mode page bits when supported by fabric
target/spc: Only expose PI inquiry bits when supported by fabric
target: Pass in transport supported PI at session initialization
target/iblock: Fix double bioset_integrity_free bug
Target/sbc: Initialize COMPARE_AND_WRITE write_sg scatterlist
target/rd: T10-Dif: RAM disk is allocating more space than required.
iscsi-target: Fix ERL=2 ASYNC_EVENT connection pointer bug
...
This commit is contained in:
@@ -21,6 +21,8 @@ struct iscsit_transport {
|
||||
int (*iscsit_get_dataout)(struct iscsi_conn *, struct iscsi_cmd *, bool);
|
||||
int (*iscsit_queue_data_in)(struct iscsi_conn *, struct iscsi_cmd *);
|
||||
int (*iscsit_queue_status)(struct iscsi_conn *, struct iscsi_cmd *);
|
||||
void (*iscsit_aborted_task)(struct iscsi_conn *, struct iscsi_cmd *);
|
||||
enum target_prot_op (*iscsit_get_sup_prot_ops)(struct iscsi_conn *);
|
||||
};
|
||||
|
||||
static inline void *iscsit_priv_cmd(struct iscsi_cmd *cmd)
|
||||
|
||||
@@ -73,10 +73,12 @@ sense_reason_t sbc_execute_unmap(struct se_cmd *cmd,
|
||||
sense_reason_t (*do_unmap_fn)(struct se_cmd *cmd, void *priv,
|
||||
sector_t lba, sector_t nolb),
|
||||
void *priv);
|
||||
void sbc_dif_generate(struct se_cmd *);
|
||||
sense_reason_t sbc_dif_verify_write(struct se_cmd *, sector_t, unsigned int,
|
||||
unsigned int, struct scatterlist *, int);
|
||||
sense_reason_t sbc_dif_verify_read(struct se_cmd *, sector_t, unsigned int,
|
||||
unsigned int, struct scatterlist *, int);
|
||||
sense_reason_t sbc_dif_read_strip(struct se_cmd *);
|
||||
|
||||
void transport_set_vpd_proto_id(struct t10_vpd *, unsigned char *);
|
||||
int transport_set_vpd_assoc(struct t10_vpd *, unsigned char *);
|
||||
|
||||
@@ -162,7 +162,7 @@ enum se_cmd_flags_table {
|
||||
SCF_SENT_CHECK_CONDITION = 0x00000800,
|
||||
SCF_OVERFLOW_BIT = 0x00001000,
|
||||
SCF_UNDERFLOW_BIT = 0x00002000,
|
||||
SCF_SENT_DELAYED_TAS = 0x00004000,
|
||||
SCF_SEND_DELAYED_TAS = 0x00004000,
|
||||
SCF_ALUA_NON_OPTIMIZED = 0x00008000,
|
||||
SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC = 0x00020000,
|
||||
SCF_ACK_KREF = 0x00040000,
|
||||
@@ -442,19 +442,18 @@ struct se_tmr_req {
|
||||
};
|
||||
|
||||
enum target_prot_op {
|
||||
TARGET_PROT_NORMAL = 0,
|
||||
TARGET_PROT_DIN_INSERT,
|
||||
TARGET_PROT_DOUT_INSERT,
|
||||
TARGET_PROT_DIN_STRIP,
|
||||
TARGET_PROT_DOUT_STRIP,
|
||||
TARGET_PROT_DIN_PASS,
|
||||
TARGET_PROT_DOUT_PASS,
|
||||
TARGET_PROT_NORMAL = 0,
|
||||
TARGET_PROT_DIN_INSERT = (1 << 0),
|
||||
TARGET_PROT_DOUT_INSERT = (1 << 1),
|
||||
TARGET_PROT_DIN_STRIP = (1 << 2),
|
||||
TARGET_PROT_DOUT_STRIP = (1 << 3),
|
||||
TARGET_PROT_DIN_PASS = (1 << 4),
|
||||
TARGET_PROT_DOUT_PASS = (1 << 5),
|
||||
};
|
||||
|
||||
enum target_prot_ho {
|
||||
PROT_SEPERATED,
|
||||
PROT_INTERLEAVED,
|
||||
};
|
||||
#define TARGET_PROT_ALL TARGET_PROT_DIN_INSERT | TARGET_PROT_DOUT_INSERT | \
|
||||
TARGET_PROT_DIN_STRIP | TARGET_PROT_DOUT_STRIP | \
|
||||
TARGET_PROT_DIN_PASS | TARGET_PROT_DOUT_PASS
|
||||
|
||||
enum target_prot_type {
|
||||
TARGET_DIF_TYPE0_PROT,
|
||||
@@ -463,6 +462,12 @@ enum target_prot_type {
|
||||
TARGET_DIF_TYPE3_PROT,
|
||||
};
|
||||
|
||||
enum target_core_dif_check {
|
||||
TARGET_DIF_CHECK_GUARD = 0x1 << 0,
|
||||
TARGET_DIF_CHECK_APPTAG = 0x1 << 1,
|
||||
TARGET_DIF_CHECK_REFTAG = 0x1 << 2,
|
||||
};
|
||||
|
||||
struct se_dif_v1_tuple {
|
||||
__be16 guard_tag;
|
||||
__be16 app_tag;
|
||||
@@ -556,13 +561,14 @@ struct se_cmd {
|
||||
/* DIF related members */
|
||||
enum target_prot_op prot_op;
|
||||
enum target_prot_type prot_type;
|
||||
u8 prot_checks;
|
||||
u32 prot_length;
|
||||
u32 reftag_seed;
|
||||
struct scatterlist *t_prot_sg;
|
||||
unsigned int t_prot_nents;
|
||||
enum target_prot_ho prot_handover;
|
||||
sense_reason_t pi_err;
|
||||
sector_t bad_sector;
|
||||
bool prot_pto;
|
||||
};
|
||||
|
||||
struct se_ua {
|
||||
@@ -603,6 +609,7 @@ struct se_node_acl {
|
||||
struct se_session {
|
||||
unsigned sess_tearing_down:1;
|
||||
u64 sess_bin_isid;
|
||||
enum target_prot_op sup_prot_ops;
|
||||
struct se_node_acl *se_node_acl;
|
||||
struct se_portal_group *se_tpg;
|
||||
void *fabric_sess_ptr;
|
||||
|
||||
@@ -62,6 +62,7 @@ struct target_core_fabric_ops {
|
||||
int (*queue_data_in)(struct se_cmd *);
|
||||
int (*queue_status)(struct se_cmd *);
|
||||
void (*queue_tm_rsp)(struct se_cmd *);
|
||||
void (*aborted_task)(struct se_cmd *);
|
||||
/*
|
||||
* fabric module calls for target_core_fabric_configfs.c
|
||||
*/
|
||||
@@ -83,10 +84,11 @@ struct target_core_fabric_ops {
|
||||
void (*fabric_drop_nodeacl)(struct se_node_acl *);
|
||||
};
|
||||
|
||||
struct se_session *transport_init_session(void);
|
||||
struct se_session *transport_init_session(enum target_prot_op);
|
||||
int transport_alloc_session_tags(struct se_session *, unsigned int,
|
||||
unsigned int);
|
||||
struct se_session *transport_init_session_tags(unsigned int, unsigned int);
|
||||
struct se_session *transport_init_session_tags(unsigned int, unsigned int,
|
||||
enum target_prot_op);
|
||||
void __transport_register_session(struct se_portal_group *,
|
||||
struct se_node_acl *, struct se_session *, void *);
|
||||
void transport_register_session(struct se_portal_group *,
|
||||
|
||||
Reference in New Issue
Block a user