mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
Pull scsi target fixes from Nicholas Bellinger: "This includes an important >= v3.6 regression bugfix for active I/O shutdown (Roland), some TMR related failure / corner cases fixes for long outstanding I/O (Roland), two FCoE target mode fabric fabric role fixes (MDR), a fix for an incorrect sense code during LUN communication failure (Dr. Hannes), plus a handful of other minor fixes. There are still some outstanding zero-length control CDB regression fixes that need to be addressed for v3.8, that will be coming in a follow-up PULL request." * git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: iscsi-target: Fix CmdSN comparison (use cmd->cmd_sn instead of cmd->stat_sn) target: Release se_cmd when LUN lookup fails for TMR target: Fix use-after-free in LUN RESET handling target: Fix missing CMD_T_ACTIVE bit regression for pending WRITEs tcm_fc: Do not report target role when target is not defined tcm_fc: Do not indicate retry capability to initiators target: Use TCM_NO_SENSE for initialisation target: Introduce TCM_NO_SENSE target: use correct sense code for LUN communication failure
This commit is contained in:
commit
ce0f706e41
@ -372,7 +372,7 @@ int iscsit_prepare_cmds_for_realligance(struct iscsi_conn *conn)
|
||||
* made generic here.
|
||||
*/
|
||||
if (!(cmd->cmd_flags & ICF_OOO_CMDSN) && !cmd->immediate_cmd &&
|
||||
iscsi_sna_gte(cmd->stat_sn, conn->sess->exp_cmd_sn)) {
|
||||
iscsi_sna_gte(cmd->cmd_sn, conn->sess->exp_cmd_sn)) {
|
||||
list_del(&cmd->i_conn_node);
|
||||
spin_unlock_bh(&conn->cmd_lock);
|
||||
iscsit_free_cmd(cmd);
|
||||
|
@ -212,7 +212,7 @@ target_emulate_set_target_port_groups(struct se_cmd *cmd)
|
||||
struct t10_alua_tg_pt_gp_member *tg_pt_gp_mem, *l_tg_pt_gp_mem;
|
||||
unsigned char *buf;
|
||||
unsigned char *ptr;
|
||||
sense_reason_t rc;
|
||||
sense_reason_t rc = TCM_NO_SENSE;
|
||||
u32 len = 4; /* Skip over RESERVED area in header */
|
||||
int alua_access_state, primary = 0;
|
||||
u16 tg_pt_id, rtpi;
|
||||
|
@ -2053,7 +2053,7 @@ core_scsi3_emulate_pro_register(struct se_cmd *cmd, u64 res_key, u64 sa_res_key,
|
||||
/* Used for APTPL metadata w/ UNREGISTER */
|
||||
unsigned char *pr_aptpl_buf = NULL;
|
||||
unsigned char isid_buf[PR_REG_ISID_LEN], *isid_ptr = NULL;
|
||||
sense_reason_t ret;
|
||||
sense_reason_t ret = TCM_NO_SENSE;
|
||||
int pr_holder = 0, type;
|
||||
|
||||
if (!se_sess || !se_lun) {
|
||||
|
@ -541,9 +541,6 @@ static void transport_lun_remove_cmd(struct se_cmd *cmd)
|
||||
|
||||
void transport_cmd_finish_abort(struct se_cmd *cmd, int remove)
|
||||
{
|
||||
if (!(cmd->se_cmd_flags & SCF_SCSI_TMR_CDB))
|
||||
transport_lun_remove_cmd(cmd);
|
||||
|
||||
if (transport_cmd_check_stop_to_fabric(cmd))
|
||||
return;
|
||||
if (remove)
|
||||
@ -1396,6 +1393,8 @@ static void target_complete_tmr_failure(struct work_struct *work)
|
||||
|
||||
se_cmd->se_tmr_req->response = TMR_LUN_DOES_NOT_EXIST;
|
||||
se_cmd->se_tfo->queue_tm_rsp(se_cmd);
|
||||
|
||||
transport_cmd_check_stop_to_fabric(se_cmd);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1688,6 +1687,7 @@ void target_execute_cmd(struct se_cmd *cmd)
|
||||
}
|
||||
|
||||
cmd->t_state = TRANSPORT_PROCESSING;
|
||||
cmd->transport_state |= CMD_T_ACTIVE;
|
||||
spin_unlock_irq(&cmd->t_state_lock);
|
||||
|
||||
if (!target_handle_task_attr(cmd))
|
||||
@ -2597,6 +2597,16 @@ transport_send_check_condition_and_sense(struct se_cmd *cmd,
|
||||
* SENSE KEY values from include/scsi/scsi.h
|
||||
*/
|
||||
switch (reason) {
|
||||
case TCM_NO_SENSE:
|
||||
/* CURRENT ERROR */
|
||||
buffer[0] = 0x70;
|
||||
buffer[SPC_ADD_SENSE_LEN_OFFSET] = 10;
|
||||
/* Not Ready */
|
||||
buffer[SPC_SENSE_KEY_OFFSET] = NOT_READY;
|
||||
/* NO ADDITIONAL SENSE INFORMATION */
|
||||
buffer[SPC_ASC_KEY_OFFSET] = 0;
|
||||
buffer[SPC_ASCQ_KEY_OFFSET] = 0;
|
||||
break;
|
||||
case TCM_NON_EXISTENT_LUN:
|
||||
/* CURRENT ERROR */
|
||||
buffer[0] = 0x70;
|
||||
@ -2743,7 +2753,7 @@ transport_send_check_condition_and_sense(struct se_cmd *cmd,
|
||||
/* ILLEGAL REQUEST */
|
||||
buffer[SPC_SENSE_KEY_OFFSET] = ILLEGAL_REQUEST;
|
||||
/* LOGICAL UNIT COMMUNICATION FAILURE */
|
||||
buffer[SPC_ASC_KEY_OFFSET] = 0x80;
|
||||
buffer[SPC_ASC_KEY_OFFSET] = 0x08;
|
||||
break;
|
||||
}
|
||||
/*
|
||||
@ -2804,6 +2814,8 @@ void transport_send_task_abort(struct se_cmd *cmd)
|
||||
}
|
||||
cmd->scsi_status = SAM_STAT_TASK_ABORTED;
|
||||
|
||||
transport_lun_remove_cmd(cmd);
|
||||
|
||||
pr_debug("Setting SAM_STAT_TASK_ABORTED status for CDB: 0x%02x,"
|
||||
" ITT: 0x%08x\n", cmd->t_task_cdb[0],
|
||||
cmd->se_tfo->get_task_tag(cmd));
|
||||
|
@ -355,11 +355,11 @@ static int ft_prli_locked(struct fc_rport_priv *rdata, u32 spp_len,
|
||||
|
||||
tport = ft_tport_create(rdata->local_port);
|
||||
if (!tport)
|
||||
return 0; /* not a target for this local port */
|
||||
goto not_target; /* not a target for this local port */
|
||||
|
||||
acl = ft_acl_get(tport->tpg, rdata);
|
||||
if (!acl)
|
||||
return 0;
|
||||
goto not_target; /* no target for this remote */
|
||||
|
||||
if (!rspp)
|
||||
goto fill;
|
||||
@ -396,12 +396,18 @@ static int ft_prli_locked(struct fc_rport_priv *rdata, u32 spp_len,
|
||||
|
||||
/*
|
||||
* OR in our service parameters with other provider (initiator), if any.
|
||||
* TBD XXX - indicate RETRY capability?
|
||||
*/
|
||||
fill:
|
||||
fcp_parm = ntohl(spp->spp_params);
|
||||
fcp_parm &= ~FCP_SPPF_RETRY;
|
||||
spp->spp_params = htonl(fcp_parm | FCP_SPPF_TARG_FCN);
|
||||
return FC_SPP_RESP_ACK;
|
||||
|
||||
not_target:
|
||||
fcp_parm = ntohl(spp->spp_params);
|
||||
fcp_parm &= ~FCP_SPPF_TARG_FCN;
|
||||
spp->spp_params = htonl(fcp_parm);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -174,6 +174,7 @@ typedef unsigned __bitwise__ sense_reason_t;
|
||||
|
||||
enum tcm_sense_reason_table {
|
||||
#define R(x) (__force sense_reason_t )(x)
|
||||
TCM_NO_SENSE = R(0x00),
|
||||
TCM_NON_EXISTENT_LUN = R(0x01),
|
||||
TCM_UNSUPPORTED_SCSI_OPCODE = R(0x02),
|
||||
TCM_INCORRECT_AMOUNT_OF_DATA = R(0x03),
|
||||
|
Loading…
Reference in New Issue
Block a user