mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 07:47:50 +00:00
Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI updates from James Bottomley: "Updates to the usual drivers (scsi_debug, ufs, lpfc, st, fnic, mpi3mr, mpt3sas) and the removal of cxlflash. The only non-trivial core change is an addition to unit attention handling to recognize UAs for power on/reset and new media so the tape driver can use it" * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (107 commits) scsi: st: Tighten the page format heuristics with MODE SELECT scsi: st: ERASE does not change tape location scsi: st: Fix array overflow in st_setup() scsi: target: tcm_loop: Fix wrong abort tag scsi: lpfc: Restore clearing of NLP_UNREG_INP in ndlp->nlp_flag scsi: hisi_sas: Fixed failure to issue vendor specific commands scsi: fnic: Remove unnecessary NUL-terminations scsi: fnic: Remove redundant flush_workqueue() calls scsi: core: Use a switch statement when attaching VPD pages scsi: ufs: renesas: Add initialization code for R-Car S4-8 ES1.2 scsi: ufs: renesas: Add reusable functions scsi: ufs: renesas: Refactor 0x10ad/0x10af PHY settings scsi: ufs: renesas: Remove register control helper function scsi: ufs: renesas: Add register read to remove save/set/restore scsi: ufs: renesas: Replace init data by init code scsi: ufs: dt-bindings: renesas,ufs: Add calibration data scsi: mpi3mr: Task Abort EH Support scsi: storvsc: Don't report the host packet status as the hv status scsi: isci: Make most module parameters static scsi: megaraid_sas: Make most module parameters static ...
This commit is contained in:
@@ -212,7 +212,7 @@ int iscsi_target_check_login_request(
|
||||
|
||||
if ((login_req->max_version != login->version_max) ||
|
||||
(login_req->min_version != login->version_min)) {
|
||||
pr_err("Login request changed Version Max/Nin"
|
||||
pr_err("Login request changed Version Max/Min"
|
||||
" unexpectedly to 0x%02x/0x%02x, protocol error\n",
|
||||
login_req->max_version, login_req->min_version);
|
||||
iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR,
|
||||
@@ -557,7 +557,7 @@ static void iscsi_target_do_login_rx(struct work_struct *work)
|
||||
* before initial PDU processing in iscsi_target_start_negotiation()
|
||||
* has completed, go ahead and retry until it's cleared.
|
||||
*
|
||||
* Otherwise if the TCP connection drops while this is occuring,
|
||||
* Otherwise if the TCP connection drops while this is occurring,
|
||||
* iscsi_target_start_negotiation() will detect the failure, call
|
||||
* cancel_delayed_work_sync(&conn->login_work), and cleanup the
|
||||
* remaining iscsi connection resources from iscsi_np process context.
|
||||
@@ -1050,7 +1050,7 @@ static int iscsi_target_do_login(struct iscsit_conn *conn, struct iscsi_login *l
|
||||
/*
|
||||
* Check to make sure the TCP connection has not
|
||||
* dropped asynchronously while session reinstatement
|
||||
* was occuring in this kthread context, before
|
||||
* was occurring in this kthread context, before
|
||||
* transitioning to full feature phase operation.
|
||||
*/
|
||||
if (iscsi_target_sk_check_close(conn))
|
||||
|
||||
@@ -176,7 +176,7 @@ static int tcm_loop_queuecommand(struct Scsi_Host *sh, struct scsi_cmnd *sc)
|
||||
|
||||
memset(tl_cmd, 0, sizeof(*tl_cmd));
|
||||
tl_cmd->sc = sc;
|
||||
tl_cmd->sc_cmd_tag = scsi_cmd_to_rq(sc)->tag;
|
||||
tl_cmd->sc_cmd_tag = blk_mq_unique_tag(scsi_cmd_to_rq(sc));
|
||||
|
||||
tcm_loop_target_queue_cmd(tl_cmd);
|
||||
return 0;
|
||||
@@ -242,7 +242,8 @@ static int tcm_loop_abort_task(struct scsi_cmnd *sc)
|
||||
tl_hba = *(struct tcm_loop_hba **)shost_priv(sc->device->host);
|
||||
tl_tpg = &tl_hba->tl_hba_tpgs[sc->device->id];
|
||||
ret = tcm_loop_issue_tmr(tl_tpg, sc->device->lun,
|
||||
scsi_cmd_to_rq(sc)->tag, TMR_ABORT_TASK);
|
||||
blk_mq_unique_tag(scsi_cmd_to_rq(sc)),
|
||||
TMR_ABORT_TASK);
|
||||
return (ret == TMR_FUNCTION_COMPLETE) ? SUCCESS : FAILED;
|
||||
}
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@ static ssize_t target_core_item_dbroot_store(struct config_item *item,
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
read_bytes = snprintf(db_root_stage, DB_ROOT_LEN, "%s", page);
|
||||
read_bytes = scnprintf(db_root_stage, DB_ROOT_LEN, "%s", page);
|
||||
if (!read_bytes)
|
||||
goto unlock;
|
||||
|
||||
@@ -143,7 +143,7 @@ static ssize_t target_core_item_dbroot_store(struct config_item *item,
|
||||
}
|
||||
filp_close(fp, NULL);
|
||||
|
||||
strncpy(db_root, db_root_stage, read_bytes);
|
||||
strscpy(db_root, db_root_stage);
|
||||
pr_debug("Target_Core_ConfigFS: db_root set to %s\n", db_root);
|
||||
|
||||
r = read_bytes;
|
||||
@@ -3664,7 +3664,7 @@ static void target_init_dbroot(void)
|
||||
}
|
||||
filp_close(fp, NULL);
|
||||
|
||||
strncpy(db_root, db_root_stage, DB_ROOT_LEN);
|
||||
strscpy(db_root, db_root_stage);
|
||||
pr_debug("Target_Core_ConfigFS: db_root set to %s\n", db_root);
|
||||
}
|
||||
|
||||
|
||||
@@ -1078,8 +1078,8 @@ passthrough_parse_cdb(struct se_cmd *cmd,
|
||||
if (!dev->dev_attrib.emulate_pr &&
|
||||
((cdb[0] == PERSISTENT_RESERVE_IN) ||
|
||||
(cdb[0] == PERSISTENT_RESERVE_OUT) ||
|
||||
(cdb[0] == RELEASE || cdb[0] == RELEASE_10) ||
|
||||
(cdb[0] == RESERVE || cdb[0] == RESERVE_10))) {
|
||||
(cdb[0] == RELEASE_6 || cdb[0] == RELEASE_10) ||
|
||||
(cdb[0] == RESERVE_6 || cdb[0] == RESERVE_10))) {
|
||||
return TCM_UNSUPPORTED_SCSI_OPCODE;
|
||||
}
|
||||
|
||||
@@ -1101,7 +1101,7 @@ passthrough_parse_cdb(struct se_cmd *cmd,
|
||||
return target_cmd_size_check(cmd, size);
|
||||
}
|
||||
|
||||
if (cdb[0] == RELEASE || cdb[0] == RELEASE_10) {
|
||||
if (cdb[0] == RELEASE_6 || cdb[0] == RELEASE_10) {
|
||||
cmd->execute_cmd = target_scsi2_reservation_release;
|
||||
if (cdb[0] == RELEASE_10)
|
||||
size = get_unaligned_be16(&cdb[7]);
|
||||
@@ -1109,7 +1109,7 @@ passthrough_parse_cdb(struct se_cmd *cmd,
|
||||
size = cmd->data_length;
|
||||
return target_cmd_size_check(cmd, size);
|
||||
}
|
||||
if (cdb[0] == RESERVE || cdb[0] == RESERVE_10) {
|
||||
if (cdb[0] == RESERVE_6 || cdb[0] == RESERVE_10) {
|
||||
cmd->execute_cmd = target_scsi2_reservation_reserve;
|
||||
if (cdb[0] == RESERVE_10)
|
||||
size = get_unaligned_be16(&cdb[7]);
|
||||
|
||||
@@ -91,7 +91,7 @@ target_scsi2_reservation_check(struct se_cmd *cmd)
|
||||
|
||||
switch (cmd->t_task_cdb[0]) {
|
||||
case INQUIRY:
|
||||
case RELEASE:
|
||||
case RELEASE_6:
|
||||
case RELEASE_10:
|
||||
return 0;
|
||||
default:
|
||||
@@ -418,12 +418,12 @@ static int core_scsi3_pr_seq_non_holder(struct se_cmd *cmd, u32 pr_reg_type,
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
case RELEASE:
|
||||
case RELEASE_6:
|
||||
case RELEASE_10:
|
||||
/* Handled by CRH=1 in target_scsi2_reservation_release() */
|
||||
ret = 0;
|
||||
break;
|
||||
case RESERVE:
|
||||
case RESERVE_6:
|
||||
case RESERVE_10:
|
||||
/* Handled by CRH=1 in target_scsi2_reservation_reserve() */
|
||||
ret = 0;
|
||||
|
||||
@@ -1674,9 +1674,9 @@ static bool tcm_is_pr_enabled(struct target_opcode_descriptor *descr,
|
||||
return true;
|
||||
|
||||
switch (descr->opcode) {
|
||||
case RESERVE:
|
||||
case RESERVE_6:
|
||||
case RESERVE_10:
|
||||
case RELEASE:
|
||||
case RELEASE_6:
|
||||
case RELEASE_10:
|
||||
/*
|
||||
* The pr_ops which are used by the backend modules don't
|
||||
@@ -1828,9 +1828,9 @@ static struct target_opcode_descriptor tcm_opcode_pro_register_move = {
|
||||
|
||||
static struct target_opcode_descriptor tcm_opcode_release = {
|
||||
.support = SCSI_SUPPORT_FULL,
|
||||
.opcode = RELEASE,
|
||||
.opcode = RELEASE_6,
|
||||
.cdb_size = 6,
|
||||
.usage_bits = {RELEASE, 0x00, 0x00, 0x00,
|
||||
.usage_bits = {RELEASE_6, 0x00, 0x00, 0x00,
|
||||
0x00, SCSI_CONTROL_MASK},
|
||||
.enabled = tcm_is_pr_enabled,
|
||||
};
|
||||
@@ -1847,9 +1847,9 @@ static struct target_opcode_descriptor tcm_opcode_release10 = {
|
||||
|
||||
static struct target_opcode_descriptor tcm_opcode_reserve = {
|
||||
.support = SCSI_SUPPORT_FULL,
|
||||
.opcode = RESERVE,
|
||||
.opcode = RESERVE_6,
|
||||
.cdb_size = 6,
|
||||
.usage_bits = {RESERVE, 0x00, 0x00, 0x00,
|
||||
.usage_bits = {RESERVE_6, 0x00, 0x00, 0x00,
|
||||
0x00, SCSI_CONTROL_MASK},
|
||||
.enabled = tcm_is_pr_enabled,
|
||||
};
|
||||
@@ -2151,8 +2151,10 @@ spc_rsoc_get_descr(struct se_cmd *cmd, struct target_opcode_descriptor **opcode)
|
||||
if (descr->serv_action_valid)
|
||||
return TCM_INVALID_CDB_FIELD;
|
||||
|
||||
if (!descr->enabled || descr->enabled(descr, cmd))
|
||||
if (!descr->enabled || descr->enabled(descr, cmd)) {
|
||||
*opcode = descr;
|
||||
return TCM_NO_SENSE;
|
||||
}
|
||||
break;
|
||||
case 0x2:
|
||||
/*
|
||||
@@ -2166,8 +2168,10 @@ spc_rsoc_get_descr(struct se_cmd *cmd, struct target_opcode_descriptor **opcode)
|
||||
if (descr->serv_action_valid &&
|
||||
descr->service_action == requested_sa) {
|
||||
if (!descr->enabled || descr->enabled(descr,
|
||||
cmd))
|
||||
cmd)) {
|
||||
*opcode = descr;
|
||||
return TCM_NO_SENSE;
|
||||
}
|
||||
} else if (!descr->serv_action_valid)
|
||||
return TCM_INVALID_CDB_FIELD;
|
||||
break;
|
||||
@@ -2180,13 +2184,15 @@ spc_rsoc_get_descr(struct se_cmd *cmd, struct target_opcode_descriptor **opcode)
|
||||
*/
|
||||
if (descr->service_action == requested_sa)
|
||||
if (!descr->enabled || descr->enabled(descr,
|
||||
cmd))
|
||||
cmd)) {
|
||||
*opcode = descr;
|
||||
return TCM_NO_SENSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return TCM_NO_SENSE;
|
||||
}
|
||||
|
||||
static sense_reason_t
|
||||
@@ -2243,7 +2249,7 @@ spc_emulate_report_supp_op_codes(struct se_cmd *cmd)
|
||||
response_length += spc_rsoc_encode_command_descriptor(
|
||||
&buf[response_length], rctd, descr);
|
||||
}
|
||||
put_unaligned_be32(response_length - 3, buf);
|
||||
put_unaligned_be32(response_length - 4, buf);
|
||||
} else {
|
||||
response_length = spc_rsoc_encode_one_command_descriptor(
|
||||
&buf[response_length], rctd, descr,
|
||||
@@ -2267,9 +2273,9 @@ spc_parse_cdb(struct se_cmd *cmd, unsigned int *size)
|
||||
unsigned char *cdb = cmd->t_task_cdb;
|
||||
|
||||
switch (cdb[0]) {
|
||||
case RESERVE:
|
||||
case RESERVE_6:
|
||||
case RESERVE_10:
|
||||
case RELEASE:
|
||||
case RELEASE_6:
|
||||
case RELEASE_10:
|
||||
if (!dev->dev_attrib.emulate_pr)
|
||||
return TCM_UNSUPPORTED_SCSI_OPCODE;
|
||||
@@ -2313,7 +2319,7 @@ spc_parse_cdb(struct se_cmd *cmd, unsigned int *size)
|
||||
*size = get_unaligned_be32(&cdb[5]);
|
||||
cmd->execute_cmd = target_scsi3_emulate_pr_out;
|
||||
break;
|
||||
case RELEASE:
|
||||
case RELEASE_6:
|
||||
case RELEASE_10:
|
||||
if (cdb[0] == RELEASE_10)
|
||||
*size = get_unaligned_be16(&cdb[7]);
|
||||
@@ -2322,7 +2328,7 @@ spc_parse_cdb(struct se_cmd *cmd, unsigned int *size)
|
||||
|
||||
cmd->execute_cmd = target_scsi2_reservation_release;
|
||||
break;
|
||||
case RESERVE:
|
||||
case RESERVE_6:
|
||||
case RESERVE_10:
|
||||
/*
|
||||
* The SPC-2 RESERVE does not contain a size in the SCSI CDB.
|
||||
|
||||
Reference in New Issue
Block a user