You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
target: Address legacy PYX_TRANSPORT_* return code breakage
This patch removes legacy usage of PYX_TRANSPORT_* return codes in a number
of locations and addresses cases where transport_generic_request_failure()
was returning the incorrect sense upon CHECK_CONDITION status after the
v3.1 converson to use errno return codes.
This includes the conversion of transport_generic_request_failure() to
process cmd->scsi_sense_reason and handle extra TCM_RESERVATION_CONFLICT
before calling transport_send_check_condition_and_sense() to queue up
response status. It also drops PYX_TRANSPORT_OUT_OF_MEMORY_RESOURCES legacy
usgae, and returns TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE w/ a response
for these cases.
transport_generic_allocate_tasks(), transport_generic_new_cmd(), backend
SCF_SCSI_DATA_SG_IO_CDB ->do_task(), and emulated ->execute_task() have
all been updated to set se_cmd->scsi_sense_reason and return errno codes
universally upon failure. This includes cmd->scsi_sense_reason assignment
in target_core_alua.c, target_core_pr.c and target_core_cdb.c emulation code.
Finally it updates fabric modules to remove the legacy usage, and for
TFO->new_cmd_map() callers forwards return values outside of fabric code.
iscsi-target has also been updated to remove a handful of special cases
related to the cleanup and signaling QUEUE_FULL handling w/ ft_write_pending()
(v2: Drop extra SCF_SCSI_CDB_EXCEPTION check during failure from
transport_generic_new_cmd, and re-add missing task->task_error_status
assignment in transport_complete_task)
Cc: Christoph Hellwig <hch@lst.de>
Cc: stable@kernel.org
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
@@ -103,7 +103,6 @@ enum se_cmd_flags_table {
|
||||
SCF_SCSI_NON_DATA_CDB = 0x00000040,
|
||||
SCF_SCSI_CDB_EXCEPTION = 0x00000080,
|
||||
SCF_SCSI_RESERVATION_CONFLICT = 0x00000100,
|
||||
SCF_SE_CMD_FAILED = 0x00000400,
|
||||
SCF_SE_LUN_CMD = 0x00000800,
|
||||
SCF_SE_ALLOW_EOO = 0x00001000,
|
||||
SCF_SENT_CHECK_CONDITION = 0x00004000,
|
||||
@@ -154,6 +153,7 @@ enum tcm_sense_reason_table {
|
||||
TCM_CHECK_CONDITION_ABORT_CMD = 0x0d,
|
||||
TCM_CHECK_CONDITION_UNIT_ATTENTION = 0x0e,
|
||||
TCM_CHECK_CONDITION_NOT_READY = 0x0f,
|
||||
TCM_RESERVATION_CONFLICT = 0x10,
|
||||
};
|
||||
|
||||
struct se_obj {
|
||||
@@ -422,8 +422,6 @@ struct se_cmd {
|
||||
int sam_task_attr;
|
||||
/* Transport protocol dependent state, see transport_state_table */
|
||||
enum transport_state_table t_state;
|
||||
/* Transport specific error status */
|
||||
int transport_error_status;
|
||||
/* Used to signal cmd->se_tfo->check_release_cmd() usage per cmd */
|
||||
int check_release:1;
|
||||
int cmd_wait_set:1;
|
||||
|
||||
@@ -10,29 +10,6 @@
|
||||
|
||||
#define PYX_TRANSPORT_STATUS_INTERVAL 5 /* In seconds */
|
||||
|
||||
#define PYX_TRANSPORT_SENT_TO_TRANSPORT 0
|
||||
#define PYX_TRANSPORT_WRITE_PENDING 1
|
||||
|
||||
#define PYX_TRANSPORT_UNKNOWN_SAM_OPCODE -1
|
||||
#define PYX_TRANSPORT_HBA_QUEUE_FULL -2
|
||||
#define PYX_TRANSPORT_REQ_TOO_MANY_SECTORS -3
|
||||
#define PYX_TRANSPORT_OUT_OF_MEMORY_RESOURCES -4
|
||||
#define PYX_TRANSPORT_INVALID_CDB_FIELD -5
|
||||
#define PYX_TRANSPORT_INVALID_PARAMETER_LIST -6
|
||||
#define PYX_TRANSPORT_LU_COMM_FAILURE -7
|
||||
#define PYX_TRANSPORT_UNKNOWN_MODE_PAGE -8
|
||||
#define PYX_TRANSPORT_WRITE_PROTECTED -9
|
||||
#define PYX_TRANSPORT_RESERVATION_CONFLICT -10
|
||||
#define PYX_TRANSPORT_ILLEGAL_REQUEST -11
|
||||
#define PYX_TRANSPORT_USE_SENSE_REASON -12
|
||||
|
||||
#ifndef SAM_STAT_RESERVATION_CONFLICT
|
||||
#define SAM_STAT_RESERVATION_CONFLICT 0x18
|
||||
#endif
|
||||
|
||||
#define TRANSPORT_PLUGIN_FREE 0
|
||||
#define TRANSPORT_PLUGIN_REGISTERED 1
|
||||
|
||||
#define TRANSPORT_PLUGIN_PHBA_PDEV 1
|
||||
#define TRANSPORT_PLUGIN_VHBA_PDEV 2
|
||||
#define TRANSPORT_PLUGIN_VHBA_VDEV 3
|
||||
@@ -158,7 +135,6 @@ extern int transport_generic_allocate_tasks(struct se_cmd *, unsigned char *);
|
||||
extern int transport_handle_cdb_direct(struct se_cmd *);
|
||||
extern int transport_generic_handle_cdb_map(struct se_cmd *);
|
||||
extern int transport_generic_handle_data(struct se_cmd *);
|
||||
extern void transport_new_cmd_failure(struct se_cmd *);
|
||||
extern int transport_generic_handle_tmr(struct se_cmd *);
|
||||
extern bool target_stop_task(struct se_task *task, unsigned long *flags);
|
||||
extern int transport_generic_map_mem_to_cmd(struct se_cmd *cmd, struct scatterlist *, u32,
|
||||
|
||||
Reference in New Issue
Block a user