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 outstanding target-pending updates for v4.3-rc1. Mostly bug-fixes and minor changes this round. The fallout from the big v4.2-rc1 RCU conversion have (thus far) been minimal. The highlights this round include: - Move sense handling routines into scsi_common code (Sagi) - Return ABORTED_COMMAND sense key for PI errors (Sagi) - Add tpg_enabled_sendtargets attribute for disabled iscsi-target discovery (David) - Shrink target struct se_cmd by rearranging fields (Roland) - Drop iSCSI use of mutex around max_cmd_sn increment (Roland) - Replace iSCSI __kernel_sockaddr_storage with sockaddr_storage (Andy + Chris) - Honor fabric max_data_sg_nents I/O transfer limit (Arun + Himanshu + nab) - Fix EXTENDED_COPY >= v4.1 regression OOPsen (Alex + nab)" * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (37 commits) target: use stringify.h instead of own definition target/user: Fix UFLAG_UNKNOWN_OP handling target: Remove no-op conditional target/user: Remove unused variable target: Fix max_cmd_sn increment w/o cmdsn mutex regressions target: Attach EXTENDED_COPY local I/O descriptors to xcopy_pt_sess target/qla2xxx: Honor max_data_sg_nents I/O transfer limit target/iscsi: Replace __kernel_sockaddr_storage with sockaddr_storage target/iscsi: Replace conn->login_ip with login_sockaddr target/iscsi: Keep local_ip as the actual sockaddr target/iscsi: Fix np_ip bracket issue by removing np_ip target: Drop iSCSI use of mutex around max_cmd_sn increment qla2xxx: Update tcm_qla2xxx module description to 24xx+ iscsi-target: Add tpg_enabled_sendtargets for disabled discovery drivers: target: Drop unlikely before IS_ERR(_OR_NULL) target: check DPO/FUA usage for COMPARE AND WRITE target: Shrink struct se_cmd by rearranging fields target: Remove cmd->se_ordered_id (unused except debug log lines) target: add support for START_STOP_UNIT SCSI opcode target: improve unsupported opcode message ...
This commit is contained in:
@@ -62,6 +62,8 @@
|
||||
/* T10 protection information disabled by default */
|
||||
#define TA_DEFAULT_T10_PI 0
|
||||
#define TA_DEFAULT_FABRIC_PROT_TYPE 0
|
||||
/* TPG status needs to be enabled to return sendtargets discovery endpoint info */
|
||||
#define TA_DEFAULT_TPG_ENABLED_SENDTARGETS 1
|
||||
|
||||
#define ISCSI_IOV_DATA_BUFFER 5
|
||||
|
||||
@@ -517,7 +519,6 @@ struct iscsi_conn {
|
||||
u16 cid;
|
||||
/* Remote TCP Port */
|
||||
u16 login_port;
|
||||
u16 local_port;
|
||||
int net_size;
|
||||
int login_family;
|
||||
u32 auth_id;
|
||||
@@ -527,9 +528,8 @@ struct iscsi_conn {
|
||||
u32 exp_statsn;
|
||||
/* Per connection status sequence number */
|
||||
u32 stat_sn;
|
||||
#define IPV6_ADDRESS_SPACE 48
|
||||
unsigned char login_ip[IPV6_ADDRESS_SPACE];
|
||||
unsigned char local_ip[IPV6_ADDRESS_SPACE];
|
||||
struct sockaddr_storage login_sockaddr;
|
||||
struct sockaddr_storage local_sockaddr;
|
||||
int conn_usage_count;
|
||||
int conn_waiting_on_uc;
|
||||
atomic_t check_immediate_queue;
|
||||
@@ -636,7 +636,7 @@ struct iscsi_session {
|
||||
/* session wide counter: expected command sequence number */
|
||||
u32 exp_cmd_sn;
|
||||
/* session wide counter: maximum allowed command sequence number */
|
||||
u32 max_cmd_sn;
|
||||
atomic_t max_cmd_sn;
|
||||
struct list_head sess_ooo_cmdsn_list;
|
||||
|
||||
/* LIO specific session ID */
|
||||
@@ -764,6 +764,7 @@ struct iscsi_tpg_attrib {
|
||||
u32 default_erl;
|
||||
u8 t10_pi;
|
||||
u32 fabric_prot_type;
|
||||
u32 tpg_enabled_sendtargets;
|
||||
struct iscsi_portal_group *tpg;
|
||||
};
|
||||
|
||||
@@ -776,12 +777,10 @@ struct iscsi_np {
|
||||
enum iscsi_timer_flags_table np_login_timer_flags;
|
||||
u32 np_exports;
|
||||
enum np_flags_table np_flags;
|
||||
unsigned char np_ip[IPV6_ADDRESS_SPACE];
|
||||
u16 np_port;
|
||||
spinlock_t np_thread_lock;
|
||||
struct completion np_restart_comp;
|
||||
struct socket *np_socket;
|
||||
struct __kernel_sockaddr_storage np_sockaddr;
|
||||
struct sockaddr_storage np_sockaddr;
|
||||
struct task_struct *np_thread;
|
||||
struct timer_list np_login_timer;
|
||||
void *np_context;
|
||||
|
@@ -50,7 +50,7 @@ struct iscsi_login_stats {
|
||||
u64 last_fail_time; /* time stamp (jiffies) */
|
||||
u32 last_fail_type;
|
||||
int last_intr_fail_ip_family;
|
||||
unsigned char last_intr_fail_ip_addr[IPV6_ADDRESS_SPACE];
|
||||
struct sockaddr_storage last_intr_fail_sockaddr;
|
||||
char last_intr_fail_name[224];
|
||||
} ____cacheline_aligned;
|
||||
|
||||
|
@@ -9,7 +9,7 @@ struct iscsit_transport {
|
||||
int priv_size;
|
||||
struct module *owner;
|
||||
struct list_head t_node;
|
||||
int (*iscsit_setup_np)(struct iscsi_np *, struct __kernel_sockaddr_storage *);
|
||||
int (*iscsit_setup_np)(struct iscsi_np *, struct sockaddr_storage *);
|
||||
int (*iscsit_accept_np)(struct iscsi_np *, struct iscsi_conn *);
|
||||
void (*iscsit_free_np)(struct iscsi_np *);
|
||||
void (*iscsit_wait_conn)(struct iscsi_conn *);
|
||||
|
@@ -93,4 +93,6 @@ bool target_lun_is_rdonly(struct se_cmd *);
|
||||
sense_reason_t passthrough_parse_cdb(struct se_cmd *cmd,
|
||||
sense_reason_t (*exec_cmd)(struct se_cmd *cmd));
|
||||
|
||||
bool target_sense_desc_format(struct se_device *dev);
|
||||
|
||||
#endif /* TARGET_CORE_BACKEND_H */
|
||||
|
@@ -6,6 +6,7 @@
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/percpu_ida.h>
|
||||
#include <linux/t10-pi.h>
|
||||
#include <net/sock.h>
|
||||
#include <net/tcp.h>
|
||||
|
||||
@@ -426,12 +427,6 @@ enum target_core_dif_check {
|
||||
TARGET_DIF_CHECK_REFTAG = 0x1 << 2,
|
||||
};
|
||||
|
||||
struct se_dif_v1_tuple {
|
||||
__be16 guard_tag;
|
||||
__be16 app_tag;
|
||||
__be32 ref_tag;
|
||||
};
|
||||
|
||||
/* for sam_task_attr */
|
||||
#define TCM_SIMPLE_TAG 0x20
|
||||
#define TCM_HEAD_TAG 0x21
|
||||
@@ -444,6 +439,9 @@ struct se_cmd {
|
||||
u8 scsi_asc;
|
||||
u8 scsi_ascq;
|
||||
u16 scsi_sense_length;
|
||||
unsigned cmd_wait_set:1;
|
||||
unsigned unknown_data_length:1;
|
||||
bool state_active:1;
|
||||
u64 tag; /* SAM command identifier aka task tag */
|
||||
/* Delay for ALUA Active/NonOptimized state access in milliseconds */
|
||||
int alua_nonop_delay;
|
||||
@@ -455,11 +453,8 @@ struct se_cmd {
|
||||
unsigned int map_tag;
|
||||
/* Transport protocol dependent state, see transport_state_table */
|
||||
enum transport_state_table t_state;
|
||||
unsigned cmd_wait_set:1;
|
||||
unsigned unknown_data_length:1;
|
||||
/* See se_cmd_flags_table */
|
||||
u32 se_cmd_flags;
|
||||
u32 se_ordered_id;
|
||||
/* Total size in bytes associated with command */
|
||||
u32 data_length;
|
||||
u32 residual_count;
|
||||
@@ -477,7 +472,6 @@ struct se_cmd {
|
||||
struct se_tmr_req *se_tmr_req;
|
||||
struct list_head se_cmd_list;
|
||||
struct completion cmd_wait_comp;
|
||||
struct kref cmd_kref;
|
||||
const struct target_core_fabric_ops *se_tfo;
|
||||
sense_reason_t (*execute_cmd)(struct se_cmd *);
|
||||
sense_reason_t (*transport_complete_callback)(struct se_cmd *, bool);
|
||||
@@ -497,6 +491,7 @@ struct se_cmd {
|
||||
#define CMD_T_REQUEST_STOP (1 << 8)
|
||||
#define CMD_T_BUSY (1 << 9)
|
||||
spinlock_t t_state_lock;
|
||||
struct kref cmd_kref;
|
||||
struct completion t_transport_stop_comp;
|
||||
|
||||
struct work_struct work;
|
||||
@@ -509,8 +504,10 @@ struct se_cmd {
|
||||
struct scatterlist *t_bidi_data_sg;
|
||||
unsigned int t_bidi_data_nents;
|
||||
|
||||
/* Used for lun->lun_ref counting */
|
||||
int lun_ref_active;
|
||||
|
||||
struct list_head state_list;
|
||||
bool state_active;
|
||||
|
||||
/* old task stop completion, consider merging with some of the above */
|
||||
struct completion task_stop_comp;
|
||||
@@ -518,20 +515,17 @@ struct se_cmd {
|
||||
/* backend private data */
|
||||
void *priv;
|
||||
|
||||
/* Used for lun->lun_ref counting */
|
||||
int lun_ref_active;
|
||||
|
||||
/* DIF related members */
|
||||
enum target_prot_op prot_op;
|
||||
enum target_prot_type prot_type;
|
||||
u8 prot_checks;
|
||||
bool prot_pto;
|
||||
u32 prot_length;
|
||||
u32 reftag_seed;
|
||||
struct scatterlist *t_prot_sg;
|
||||
unsigned int t_prot_nents;
|
||||
sense_reason_t pi_err;
|
||||
sector_t bad_sector;
|
||||
bool prot_pto;
|
||||
};
|
||||
|
||||
struct se_ua {
|
||||
@@ -598,7 +592,6 @@ struct se_ml_stat_grps {
|
||||
};
|
||||
|
||||
struct se_lun_acl {
|
||||
char initiatorname[TRANSPORT_IQN_LEN];
|
||||
u64 mapped_lun;
|
||||
struct se_node_acl *se_lun_nacl;
|
||||
struct se_lun *se_lun;
|
||||
@@ -685,7 +678,6 @@ struct se_lun {
|
||||
#define SE_LUN_LINK_MAGIC 0xffff7771
|
||||
u32 lun_link_magic;
|
||||
u32 lun_access;
|
||||
u32 lun_flags;
|
||||
u32 lun_index;
|
||||
|
||||
/* RELATIVE TARGET PORT IDENTIFER */
|
||||
@@ -751,7 +743,6 @@ struct se_device {
|
||||
atomic_long_t write_bytes;
|
||||
/* Active commands on this virtual SE device */
|
||||
atomic_t simple_cmds;
|
||||
atomic_t dev_ordered_id;
|
||||
atomic_t dev_ordered_sync;
|
||||
atomic_t dev_qf_count;
|
||||
u32 export_count;
|
||||
|
@@ -5,6 +5,19 @@ struct target_core_fabric_ops {
|
||||
struct module *module;
|
||||
const char *name;
|
||||
size_t node_acl_size;
|
||||
/*
|
||||
* Limits number of scatterlist entries per SCF_SCSI_DATA_CDB payload.
|
||||
* Setting this value tells target-core to enforce this limit, and
|
||||
* report as INQUIRY EVPD=b0 MAXIMUM TRANSFER LENGTH.
|
||||
*
|
||||
* target-core will currently reset se_cmd->data_length to this
|
||||
* maximum size, and set UNDERFLOW residual count if length exceeds
|
||||
* this limit.
|
||||
*
|
||||
* XXX: Not all initiator hosts honor this block-limit EVPD
|
||||
* XXX: Currently assumes single PAGE_SIZE per scatterlist entry
|
||||
*/
|
||||
u32 max_data_sg_nents;
|
||||
char *(*get_fabric_name)(void);
|
||||
char *(*tpg_get_wwn)(struct se_portal_group *);
|
||||
u16 (*tpg_get_tag)(struct se_portal_group *);
|
||||
@@ -152,6 +165,7 @@ int transport_generic_handle_tmr(struct se_cmd *);
|
||||
void transport_generic_request_failure(struct se_cmd *, sense_reason_t);
|
||||
void __target_execute_cmd(struct se_cmd *);
|
||||
int transport_lookup_tmr_lun(struct se_cmd *, u64);
|
||||
void core_allocate_nexus_loss_ua(struct se_node_acl *acl);
|
||||
|
||||
struct se_node_acl *core_tpg_get_initiator_node_acl(struct se_portal_group *tpg,
|
||||
unsigned char *);
|
||||
|
Reference in New Issue
Block a user