Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI updates from James Bottomley:
 "This consists of a small set of driver updates (lpfc, ufs, mpt3sas
  mpi3mr, iscsi target). Apart from that this is mostly small fixes with
  very few core changes (the biggest one being VPD caching)"

* tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (177 commits)
  scsi: target: tcmu: Avoid holding XArray lock when calling lock_page
  scsi: elx: efct: Remove NULL check after calling container_of()
  scsi: dpt_i2o: Drop redundant spinlock initialization
  scsi: qedf: Remove redundant variable op
  scsi: hisi_sas: Fix memory ordering in hisi_sas_task_deliver()
  scsi: fnic: Replace DMA mask of 64 bits with 47 bits
  scsi: mpi3mr: Add target device related sysfs attributes
  scsi: mpi3mr: Add shost related sysfs attributes
  scsi: elx: efct: Remove redundant memset() statement
  scsi: megaraid_sas: Remove redundant memset() statement
  scsi: mpi3mr: Return error if dma_alloc_coherent() fails
  scsi: hisi_sas: Fix rescan after deleting a disk
  scsi: hisi_sas: Use sas_ata_wait_after_reset() in IT nexus reset
  scsi: libsas: Refactor sas_ata_hard_reset()
  scsi: mpt3sas: Update driver version to 42.100.00.00
  scsi: mpt3sas: Fix junk chars displayed while printing ChipName
  scsi: ipr: Use kobj_to_dev()
  scsi: mpi3mr: Fix a NULL vs IS_ERR() bug in mpi3mr_bsg_init()
  scsi: bnx2fc: Avoid using get_cpu() in bnx2fc_cmd_alloc()
  scsi: libfc: Remove get_cpu() semantics in fc_exch_em_alloc()
  ...
This commit is contained in:
Linus Torvalds
2022-05-25 19:09:48 -07:00
169 changed files with 6843 additions and 3473 deletions
+26 -26
View File
@@ -143,7 +143,7 @@ enum tiqn_state_table {
TIQN_STATE_SHUTDOWN = 2,
};
/* struct iscsi_cmd->cmd_flags */
/* struct iscsit_cmd->cmd_flags */
enum cmd_flags_table {
ICF_GOT_LAST_DATAOUT = 0x00000001,
ICF_GOT_DATACK_SNACK = 0x00000002,
@@ -157,7 +157,7 @@ enum cmd_flags_table {
ICF_SENDTARGETS_SINGLE = 0x00000200,
};
/* struct iscsi_cmd->i_state */
/* struct iscsit_cmd->i_state */
enum cmd_i_state_table {
ISTATE_NO_STATE = 0,
ISTATE_NEW_CMD = 1,
@@ -297,7 +297,7 @@ struct iscsi_sess_ops {
struct iscsi_queue_req {
int state;
struct iscsi_cmd *cmd;
struct iscsit_cmd *cmd;
struct list_head qr_list;
};
@@ -327,7 +327,7 @@ struct iscsi_ooo_cmdsn {
u32 batch_count;
u32 cmdsn;
u32 exp_cmdsn;
struct iscsi_cmd *cmd;
struct iscsit_cmd *cmd;
struct list_head ooo_list;
} ____cacheline_aligned;
@@ -349,7 +349,7 @@ struct iscsi_r2t {
struct list_head r2t_list;
} ____cacheline_aligned;
struct iscsi_cmd {
struct iscsit_cmd {
enum iscsi_timer_flags_table dataout_timer_flags;
/* DataOUT timeout retries */
u8 dataout_timeout_retries;
@@ -405,22 +405,22 @@ struct iscsi_cmd {
u32 outstanding_r2ts;
/* Next R2T Offset when DataSequenceInOrder=Yes */
u32 r2t_offset;
/* Iovec current and orig count for iscsi_cmd->iov_data */
/* Iovec current and orig count for iscsit_cmd->iov_data */
u32 iov_data_count;
u32 orig_iov_data_count;
/* Number of miscellaneous iovecs used for IP stack calls */
u32 iov_misc_count;
/* Number of struct iscsi_pdu in struct iscsi_cmd->pdu_list */
/* Number of struct iscsi_pdu in struct iscsit_cmd->pdu_list */
u32 pdu_count;
/* Next struct iscsi_pdu to send in struct iscsi_cmd->pdu_list */
/* Next struct iscsi_pdu to send in struct iscsit_cmd->pdu_list */
u32 pdu_send_order;
/* Current struct iscsi_pdu in struct iscsi_cmd->pdu_list */
/* Current struct iscsi_pdu in struct iscsit_cmd->pdu_list */
u32 pdu_start;
/* Next struct iscsi_seq to send in struct iscsi_cmd->seq_list */
/* Next struct iscsi_seq to send in struct iscsit_cmd->seq_list */
u32 seq_send_order;
/* Number of struct iscsi_seq in struct iscsi_cmd->seq_list */
/* Number of struct iscsi_seq in struct iscsit_cmd->seq_list */
u32 seq_count;
/* Current struct iscsi_seq in struct iscsi_cmd->seq_list */
/* Current struct iscsi_seq in struct iscsit_cmd->seq_list */
u32 seq_no;
/* Lowest offset in current DataOUT sequence */
u32 seq_start_offset;
@@ -444,12 +444,12 @@ struct iscsi_cmd {
enum dma_data_direction data_direction;
/* iSCSI PDU Header + CRC */
unsigned char pdu[ISCSI_HDR_LEN + ISCSI_CRC_LEN];
/* Number of times struct iscsi_cmd is present in immediate queue */
/* Number of times struct iscsit_cmd is present in immediate queue */
atomic_t immed_queue_count;
atomic_t response_queue_count;
spinlock_t datain_lock;
spinlock_t dataout_timeout_lock;
/* spinlock for protecting struct iscsi_cmd->i_state */
/* spinlock for protecting struct iscsit_cmd->i_state */
spinlock_t istate_lock;
/* spinlock for adding within command recovery entries */
spinlock_t error_lock;
@@ -478,11 +478,11 @@ struct iscsi_cmd {
/* TMR Request when iscsi_opcode == ISCSI_OP_SCSI_TMFUNC */
struct iscsi_tmr_req *tmr_req;
/* Connection this command is alligient to */
struct iscsi_conn *conn;
struct iscsit_conn *conn;
/* Pointer to connection recovery entry */
struct iscsi_conn_recovery *cr;
/* Session the command is part of, used for connection recovery */
struct iscsi_session *sess;
struct iscsit_session *sess;
/* list_head for connection list */
struct list_head i_conn_node;
/* The TCM I/O descriptor that is accessed via container_of() */
@@ -503,12 +503,12 @@ struct iscsi_cmd {
struct iscsi_tmr_req {
bool task_reassign:1;
u32 exp_data_sn;
struct iscsi_cmd *ref_cmd;
struct iscsit_cmd *ref_cmd;
struct iscsi_conn_recovery *conn_recovery;
struct se_tmr_req *se_tmr_req;
};
struct iscsi_conn {
struct iscsit_conn {
wait_queue_head_t queues_wq;
/* Authentication Successful for this connection */
u8 auth_complete;
@@ -583,7 +583,7 @@ struct iscsi_conn {
cpumask_var_t allowed_cpumask;
unsigned int conn_rx_reset_cpumask:1;
unsigned int conn_tx_reset_cpumask:1;
/* list_head of struct iscsi_cmd for this connection */
/* list_head of struct iscsit_cmd for this connection */
struct list_head conn_cmd_list;
struct list_head immed_queue_list;
struct list_head response_queue_list;
@@ -598,7 +598,7 @@ struct iscsi_conn {
struct iscsi_portal_group *tpg;
struct iscsi_tpg_np *tpg_np;
/* Pointer to parent session */
struct iscsi_session *sess;
struct iscsit_session *sess;
int bitmap_id;
int rx_thread_active;
struct task_struct *rx_thread;
@@ -618,11 +618,11 @@ struct iscsi_conn_recovery {
struct list_head conn_recovery_cmd_list;
spinlock_t conn_recovery_cmd_lock;
struct timer_list time2retain_timer;
struct iscsi_session *sess;
struct iscsit_session *sess;
struct list_head cr_list;
} ____cacheline_aligned;
struct iscsi_session {
struct iscsit_session {
u8 initiator_vendor;
u8 isid[6];
enum iscsi_timer_flags_table time2retain_timer_flags;
@@ -710,7 +710,7 @@ struct iscsi_login {
char rsp[ISCSI_HDR_LEN];
char *req_buf;
char *rsp_buf;
struct iscsi_conn *conn;
struct iscsit_conn *conn;
struct iscsi_np *np;
} ____cacheline_aligned;
@@ -885,7 +885,7 @@ struct iscsit_global {
struct iscsi_portal_group *discovery_tpg;
};
static inline u32 session_get_next_ttt(struct iscsi_session *session)
static inline u32 session_get_next_ttt(struct iscsit_session *session)
{
u32 ttt;
@@ -898,9 +898,9 @@ static inline u32 session_get_next_ttt(struct iscsi_session *session)
return ttt;
}
extern struct iscsi_cmd *iscsit_find_cmd_from_itt(struct iscsi_conn *, itt_t);
extern struct iscsit_cmd *iscsit_find_cmd_from_itt(struct iscsit_conn *, itt_t);
extern void iscsit_thread_check_cpumask(struct iscsi_conn *conn,
extern void iscsit_thread_check_cpumask(struct iscsit_conn *conn,
struct task_struct *p,
int mode);
+63 -63
View File
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: GPL-2.0 */
#include "iscsi_target_core.h" /* struct iscsi_cmd */
#include "iscsi_target_core.h" /* struct iscsit_cmd */
struct sockaddr_storage;
@@ -12,29 +12,29 @@ struct iscsit_transport {
struct module *owner;
struct list_head t_node;
int (*iscsit_setup_np)(struct iscsi_np *, struct sockaddr_storage *);
int (*iscsit_accept_np)(struct iscsi_np *, struct iscsi_conn *);
int (*iscsit_accept_np)(struct iscsi_np *, struct iscsit_conn *);
void (*iscsit_free_np)(struct iscsi_np *);
void (*iscsit_wait_conn)(struct iscsi_conn *);
void (*iscsit_free_conn)(struct iscsi_conn *);
int (*iscsit_get_login_rx)(struct iscsi_conn *, struct iscsi_login *);
int (*iscsit_put_login_tx)(struct iscsi_conn *, struct iscsi_login *, u32);
int (*iscsit_immediate_queue)(struct iscsi_conn *, struct iscsi_cmd *, int);
int (*iscsit_response_queue)(struct iscsi_conn *, struct iscsi_cmd *, int);
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 *);
int (*iscsit_xmit_pdu)(struct iscsi_conn *, struct iscsi_cmd *,
void (*iscsit_wait_conn)(struct iscsit_conn *);
void (*iscsit_free_conn)(struct iscsit_conn *);
int (*iscsit_get_login_rx)(struct iscsit_conn *, struct iscsi_login *);
int (*iscsit_put_login_tx)(struct iscsit_conn *, struct iscsi_login *, u32);
int (*iscsit_immediate_queue)(struct iscsit_conn *, struct iscsit_cmd *, int);
int (*iscsit_response_queue)(struct iscsit_conn *, struct iscsit_cmd *, int);
int (*iscsit_get_dataout)(struct iscsit_conn *, struct iscsit_cmd *, bool);
int (*iscsit_queue_data_in)(struct iscsit_conn *, struct iscsit_cmd *);
int (*iscsit_queue_status)(struct iscsit_conn *, struct iscsit_cmd *);
void (*iscsit_aborted_task)(struct iscsit_conn *, struct iscsit_cmd *);
int (*iscsit_xmit_pdu)(struct iscsit_conn *, struct iscsit_cmd *,
struct iscsi_datain_req *, const void *, u32);
void (*iscsit_unmap_cmd)(struct iscsi_conn *, struct iscsi_cmd *);
void (*iscsit_get_rx_pdu)(struct iscsi_conn *);
int (*iscsit_validate_params)(struct iscsi_conn *);
void (*iscsit_get_r2t_ttt)(struct iscsi_conn *, struct iscsi_cmd *,
void (*iscsit_unmap_cmd)(struct iscsit_conn *, struct iscsit_cmd *);
void (*iscsit_get_rx_pdu)(struct iscsit_conn *);
int (*iscsit_validate_params)(struct iscsit_conn *);
void (*iscsit_get_r2t_ttt)(struct iscsit_conn *, struct iscsit_cmd *,
struct iscsi_r2t *);
enum target_prot_op (*iscsit_get_sup_prot_ops)(struct iscsi_conn *);
enum target_prot_op (*iscsit_get_sup_prot_ops)(struct iscsit_conn *);
};
static inline void *iscsit_priv_cmd(struct iscsi_cmd *cmd)
static inline void *iscsit_priv_cmd(struct iscsit_cmd *cmd)
{
return (void *)(cmd + 1);
}
@@ -51,100 +51,100 @@ extern void iscsit_put_transport(struct iscsit_transport *);
/*
* From iscsi_target.c
*/
extern int iscsit_setup_scsi_cmd(struct iscsi_conn *, struct iscsi_cmd *,
extern int iscsit_setup_scsi_cmd(struct iscsit_conn *, struct iscsit_cmd *,
unsigned char *);
extern void iscsit_set_unsolicited_dataout(struct iscsi_cmd *);
extern int iscsit_process_scsi_cmd(struct iscsi_conn *, struct iscsi_cmd *,
extern void iscsit_set_unsolicited_dataout(struct iscsit_cmd *);
extern int iscsit_process_scsi_cmd(struct iscsit_conn *, struct iscsit_cmd *,
struct iscsi_scsi_req *);
extern int
__iscsit_check_dataout_hdr(struct iscsi_conn *, void *,
struct iscsi_cmd *, u32, bool *);
__iscsit_check_dataout_hdr(struct iscsit_conn *, void *,
struct iscsit_cmd *, u32, bool *);
extern int
iscsit_check_dataout_hdr(struct iscsi_conn *conn, void *buf,
struct iscsi_cmd **out_cmd);
extern int iscsit_check_dataout_payload(struct iscsi_cmd *, struct iscsi_data *,
iscsit_check_dataout_hdr(struct iscsit_conn *conn, void *buf,
struct iscsit_cmd **out_cmd);
extern int iscsit_check_dataout_payload(struct iscsit_cmd *, struct iscsi_data *,
bool);
extern int iscsit_setup_nop_out(struct iscsi_conn *, struct iscsi_cmd *,
extern int iscsit_setup_nop_out(struct iscsit_conn *, struct iscsit_cmd *,
struct iscsi_nopout *);
extern int iscsit_process_nop_out(struct iscsi_conn *, struct iscsi_cmd *,
extern int iscsit_process_nop_out(struct iscsit_conn *, struct iscsit_cmd *,
struct iscsi_nopout *);
extern int iscsit_handle_logout_cmd(struct iscsi_conn *, struct iscsi_cmd *,
extern int iscsit_handle_logout_cmd(struct iscsit_conn *, struct iscsit_cmd *,
unsigned char *);
extern int iscsit_handle_task_mgt_cmd(struct iscsi_conn *, struct iscsi_cmd *,
extern int iscsit_handle_task_mgt_cmd(struct iscsit_conn *, struct iscsit_cmd *,
unsigned char *);
extern int iscsit_setup_text_cmd(struct iscsi_conn *, struct iscsi_cmd *,
extern int iscsit_setup_text_cmd(struct iscsit_conn *, struct iscsit_cmd *,
struct iscsi_text *);
extern int iscsit_process_text_cmd(struct iscsi_conn *, struct iscsi_cmd *,
extern int iscsit_process_text_cmd(struct iscsit_conn *, struct iscsit_cmd *,
struct iscsi_text *);
extern void iscsit_build_rsp_pdu(struct iscsi_cmd *, struct iscsi_conn *,
extern void iscsit_build_rsp_pdu(struct iscsit_cmd *, struct iscsit_conn *,
bool, struct iscsi_scsi_rsp *);
extern void iscsit_build_nopin_rsp(struct iscsi_cmd *, struct iscsi_conn *,
extern void iscsit_build_nopin_rsp(struct iscsit_cmd *, struct iscsit_conn *,
struct iscsi_nopin *, bool);
extern void iscsit_build_task_mgt_rsp(struct iscsi_cmd *, struct iscsi_conn *,
extern void iscsit_build_task_mgt_rsp(struct iscsit_cmd *, struct iscsit_conn *,
struct iscsi_tm_rsp *);
extern int iscsit_build_text_rsp(struct iscsi_cmd *, struct iscsi_conn *,
extern int iscsit_build_text_rsp(struct iscsit_cmd *, struct iscsit_conn *,
struct iscsi_text_rsp *,
enum iscsit_transport_type);
extern void iscsit_build_reject(struct iscsi_cmd *, struct iscsi_conn *,
extern void iscsit_build_reject(struct iscsit_cmd *, struct iscsit_conn *,
struct iscsi_reject *);
extern int iscsit_build_logout_rsp(struct iscsi_cmd *, struct iscsi_conn *,
extern int iscsit_build_logout_rsp(struct iscsit_cmd *, struct iscsit_conn *,
struct iscsi_logout_rsp *);
extern int iscsit_logout_post_handler(struct iscsi_cmd *, struct iscsi_conn *);
extern int iscsit_queue_rsp(struct iscsi_conn *, struct iscsi_cmd *);
extern void iscsit_aborted_task(struct iscsi_conn *, struct iscsi_cmd *);
extern int iscsit_add_reject(struct iscsi_conn *, u8, unsigned char *);
extern int iscsit_reject_cmd(struct iscsi_cmd *, u8, unsigned char *);
extern int iscsit_handle_snack(struct iscsi_conn *, unsigned char *);
extern void iscsit_build_datain_pdu(struct iscsi_cmd *, struct iscsi_conn *,
extern int iscsit_logout_post_handler(struct iscsit_cmd *, struct iscsit_conn *);
extern int iscsit_queue_rsp(struct iscsit_conn *, struct iscsit_cmd *);
extern void iscsit_aborted_task(struct iscsit_conn *, struct iscsit_cmd *);
extern int iscsit_add_reject(struct iscsit_conn *, u8, unsigned char *);
extern int iscsit_reject_cmd(struct iscsit_cmd *, u8, unsigned char *);
extern int iscsit_handle_snack(struct iscsit_conn *, unsigned char *);
extern void iscsit_build_datain_pdu(struct iscsit_cmd *, struct iscsit_conn *,
struct iscsi_datain *,
struct iscsi_data_rsp *, bool);
extern int iscsit_build_r2ts_for_cmd(struct iscsi_conn *, struct iscsi_cmd *,
extern int iscsit_build_r2ts_for_cmd(struct iscsit_conn *, struct iscsit_cmd *,
bool);
extern int iscsit_immediate_queue(struct iscsi_conn *, struct iscsi_cmd *, int);
extern int iscsit_response_queue(struct iscsi_conn *, struct iscsi_cmd *, int);
extern int iscsit_immediate_queue(struct iscsit_conn *, struct iscsit_cmd *, int);
extern int iscsit_response_queue(struct iscsit_conn *, struct iscsit_cmd *, int);
/*
* From iscsi_target_device.c
*/
extern void iscsit_increment_maxcmdsn(struct iscsi_cmd *, struct iscsi_session *);
extern void iscsit_increment_maxcmdsn(struct iscsit_cmd *, struct iscsit_session *);
/*
* From iscsi_target_erl0.c
*/
extern void iscsit_cause_connection_reinstatement(struct iscsi_conn *, int);
extern void iscsit_cause_connection_reinstatement(struct iscsit_conn *, int);
/*
* From iscsi_target_erl1.c
*/
extern void iscsit_stop_dataout_timer(struct iscsi_cmd *);
extern void iscsit_stop_dataout_timer(struct iscsit_cmd *);
/*
* From iscsi_target_tmr.c
*/
extern int iscsit_tmr_post_handler(struct iscsi_cmd *, struct iscsi_conn *);
extern int iscsit_tmr_post_handler(struct iscsit_cmd *, struct iscsit_conn *);
/*
* From iscsi_target_util.c
*/
extern struct iscsi_cmd *iscsit_allocate_cmd(struct iscsi_conn *, int);
extern int iscsit_sequence_cmd(struct iscsi_conn *, struct iscsi_cmd *,
extern struct iscsit_cmd *iscsit_allocate_cmd(struct iscsit_conn *, int);
extern int iscsit_sequence_cmd(struct iscsit_conn *, struct iscsit_cmd *,
unsigned char *, __be32);
extern void iscsit_release_cmd(struct iscsi_cmd *);
extern void iscsit_free_cmd(struct iscsi_cmd *, bool);
extern void iscsit_add_cmd_to_immediate_queue(struct iscsi_cmd *,
struct iscsi_conn *, u8);
extern struct iscsi_cmd *
iscsit_find_cmd_from_itt_or_dump(struct iscsi_conn *conn,
extern void iscsit_release_cmd(struct iscsit_cmd *);
extern void iscsit_free_cmd(struct iscsit_cmd *, bool);
extern void iscsit_add_cmd_to_immediate_queue(struct iscsit_cmd *,
struct iscsit_conn *, u8);
extern struct iscsit_cmd *
iscsit_find_cmd_from_itt_or_dump(struct iscsit_conn *conn,
itt_t init_task_tag, u32 length);
/*
* From iscsi_target_nego.c
*/
extern int iscsi_target_check_login_request(struct iscsi_conn *,
extern int iscsi_target_check_login_request(struct iscsit_conn *,
struct iscsi_login *);
/*
* From iscsi_target_login.c
*/
extern __printf(2, 3) int iscsi_change_param_sprintf(
struct iscsi_conn *, const char *, ...);
struct iscsit_conn *, const char *, ...);
/*
* From iscsi_target_parameters.c