Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6bb35e00 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Nicholas Bellinger
Browse files

target: replace ->execute_task with ->execute_cmd



Make CDB emulation work on commands instead of tasks again as a preparation
of removing tasks completely.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent bd313778
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -59,9 +59,8 @@ struct t10_alua_lu_gp *default_lu_gp;
 *
 * See spc4r17 section 6.27
 */
int target_emulate_report_target_port_groups(struct se_task *task)
int target_emulate_report_target_port_groups(struct se_cmd *cmd)
{
	struct se_cmd *cmd = task->task_se_cmd;
	struct se_subsystem_dev *su_dev = cmd->se_dev->se_sub_dev;
	struct se_port *port;
	struct t10_alua_tg_pt_gp *tg_pt_gp;
@@ -166,8 +165,7 @@ int target_emulate_report_target_port_groups(struct se_task *task)

	transport_kunmap_data_sg(cmd);

	task->task_scsi_status = GOOD;
	transport_complete_task(task, 1);
	target_complete_cmd(cmd, GOOD);
	return 0;
}

@@ -176,9 +174,8 @@ int target_emulate_report_target_port_groups(struct se_task *task)
 *
 * See spc4r17 section 6.35
 */
int target_emulate_set_target_port_groups(struct se_task *task)
int target_emulate_set_target_port_groups(struct se_cmd *cmd)
{
	struct se_cmd *cmd = task->task_se_cmd;
	struct se_device *dev = cmd->se_dev;
	struct se_subsystem_dev *su_dev = dev->se_sub_dev;
	struct se_port *port, *l_port = cmd->se_lun->lun_sep;
@@ -351,8 +348,7 @@ int target_emulate_set_target_port_groups(struct se_task *task)

out:
	transport_kunmap_data_sg(cmd);
	task->task_scsi_status = GOOD;
	transport_complete_task(task, 1);
	target_complete_cmd(cmd, GOOD);
	return 0;
}

+2 −2
Original line number Diff line number Diff line
@@ -66,8 +66,8 @@ extern struct kmem_cache *t10_alua_lu_gp_mem_cache;
extern struct kmem_cache *t10_alua_tg_pt_gp_cache;
extern struct kmem_cache *t10_alua_tg_pt_gp_mem_cache;

extern int target_emulate_report_target_port_groups(struct se_task *);
extern int target_emulate_set_target_port_groups(struct se_task *);
extern int target_emulate_report_target_port_groups(struct se_cmd *);
extern int target_emulate_set_target_port_groups(struct se_cmd *);
extern int core_alua_check_nonop_delay(struct se_cmd *);
extern int core_alua_do_port_transition(struct t10_alua_tg_pt_gp *,
				struct se_device *, struct se_port *,
+22 −42
Original line number Diff line number Diff line
@@ -601,9 +601,8 @@ target_emulate_evpd_00(struct se_cmd *cmd, unsigned char *buf)
	return 0;
}

int target_emulate_inquiry(struct se_task *task)
int target_emulate_inquiry(struct se_cmd *cmd)
{
	struct se_cmd *cmd = task->task_se_cmd;
	struct se_device *dev = cmd->se_dev;
	struct se_portal_group *tpg = cmd->se_lun->lun_sep->sep_tpg;
	unsigned char *buf, *map_buf;
@@ -667,16 +666,13 @@ int target_emulate_inquiry(struct se_task *task)
	}
	transport_kunmap_data_sg(cmd);

	if (!ret) {
		task->task_scsi_status = GOOD;
		transport_complete_task(task, 1);
	}
	if (!ret)
		target_complete_cmd(cmd, GOOD);
	return ret;
}

int target_emulate_readcapacity(struct se_task *task)
int target_emulate_readcapacity(struct se_cmd *cmd)
{
	struct se_cmd *cmd = task->task_se_cmd;
	struct se_device *dev = cmd->se_dev;
	unsigned char *buf;
	unsigned long long blocks_long = dev->transport->get_blocks(dev);
@@ -700,14 +696,12 @@ int target_emulate_readcapacity(struct se_task *task)

	transport_kunmap_data_sg(cmd);

	task->task_scsi_status = GOOD;
	transport_complete_task(task, 1);
	target_complete_cmd(cmd, GOOD);
	return 0;
}

int target_emulate_readcapacity_16(struct se_task *task)
int target_emulate_readcapacity_16(struct se_cmd *cmd)
{
	struct se_cmd *cmd = task->task_se_cmd;
	struct se_device *dev = cmd->se_dev;
	unsigned char *buf;
	unsigned long long blocks = dev->transport->get_blocks(dev);
@@ -735,8 +729,7 @@ int target_emulate_readcapacity_16(struct se_task *task)

	transport_kunmap_data_sg(cmd);

	task->task_scsi_status = GOOD;
	transport_complete_task(task, 1);
	target_complete_cmd(cmd, GOOD);
	return 0;
}

@@ -875,9 +868,8 @@ target_modesense_dpofua(unsigned char *buf, int type)
	}
}

int target_emulate_modesense(struct se_task *task)
int target_emulate_modesense(struct se_cmd *cmd)
{
	struct se_cmd *cmd = task->task_se_cmd;
	struct se_device *dev = cmd->se_dev;
	char *cdb = cmd->t_task_cdb;
	unsigned char *rbuf;
@@ -950,14 +942,12 @@ int target_emulate_modesense(struct se_task *task)
	memcpy(rbuf, buf, offset);
	transport_kunmap_data_sg(cmd);

	task->task_scsi_status = GOOD;
	transport_complete_task(task, 1);
	target_complete_cmd(cmd, GOOD);
	return 0;
}

int target_emulate_request_sense(struct se_task *task)
int target_emulate_request_sense(struct se_cmd *cmd)
{
	struct se_cmd *cmd = task->task_se_cmd;
	unsigned char *cdb = cmd->t_task_cdb;
	unsigned char *buf;
	u8 ua_asc = 0, ua_ascq = 0;
@@ -1011,8 +1001,7 @@ int target_emulate_request_sense(struct se_task *task)

end:
	transport_kunmap_data_sg(cmd);
	task->task_scsi_status = GOOD;
	transport_complete_task(task, 1);
	target_complete_cmd(cmd, GOOD);
	return 0;
}

@@ -1020,9 +1009,8 @@ int target_emulate_request_sense(struct se_task *task)
 * Used for TCM/IBLOCK and TCM/FILEIO for block/blk-lib.c level discard support.
 * Note this is not used for TCM/pSCSI passthrough
 */
int target_emulate_unmap(struct se_task *task)
int target_emulate_unmap(struct se_cmd *cmd)
{
	struct se_cmd *cmd = task->task_se_cmd;
	struct se_device *dev = cmd->se_dev;
	unsigned char *buf, *ptr = NULL;
	unsigned char *cdb = &cmd->t_task_cdb[0];
@@ -1069,10 +1057,8 @@ int target_emulate_unmap(struct se_task *task)

err:
	transport_kunmap_data_sg(cmd);
	if (!ret) {
		task->task_scsi_status = GOOD;
		transport_complete_task(task, 1);
	}
	if (!ret)
		target_complete_cmd(cmd, GOOD);
	return ret;
}

@@ -1080,9 +1066,8 @@ int target_emulate_unmap(struct se_task *task)
 * Used for TCM/IBLOCK and TCM/FILEIO for block/blk-lib.c level discard support.
 * Note this is not used for TCM/pSCSI passthrough
 */
int target_emulate_write_same(struct se_task *task)
int target_emulate_write_same(struct se_cmd *cmd)
{
	struct se_cmd *cmd = task->task_se_cmd;
	struct se_device *dev = cmd->se_dev;
	sector_t range;
	sector_t lba = cmd->t_task_lba;
@@ -1121,30 +1106,25 @@ int target_emulate_write_same(struct se_task *task)
		return ret;
	}

	task->task_scsi_status = GOOD;
	transport_complete_task(task, 1);
	target_complete_cmd(cmd, GOOD);
	return 0;
}

int target_emulate_synchronize_cache(struct se_task *task)
int target_emulate_synchronize_cache(struct se_cmd *cmd)
{
	struct se_device *dev = task->task_se_cmd->se_dev;
	struct se_cmd *cmd = task->task_se_cmd;

	if (!dev->transport->do_sync_cache) {
	if (!cmd->se_dev->transport->do_sync_cache) {
		pr_err("SYNCHRONIZE_CACHE emulation not supported"
			" for: %s\n", dev->transport->name);
			" for: %s\n", cmd->se_dev->transport->name);
		cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE;
		return -ENOSYS;
	}

	dev->transport->do_sync_cache(task);
	cmd->se_dev->transport->do_sync_cache(cmd);
	return 0;
}

int target_emulate_noop(struct se_task *task)
int target_emulate_noop(struct se_cmd *cmd)
{
	task->task_scsi_status = GOOD;
	transport_complete_task(task, 1);
	target_complete_cmd(cmd, GOOD);
	return 0;
}
+2 −4
Original line number Diff line number Diff line
@@ -643,9 +643,8 @@ void core_dev_unexport(
	lun->lun_se_dev = NULL;
}

int target_report_luns(struct se_task *se_task)
int target_report_luns(struct se_cmd *se_cmd)
{
	struct se_cmd *se_cmd = se_task->task_se_cmd;
	struct se_dev_entry *deve;
	struct se_session *se_sess = se_cmd->se_sess;
	unsigned char *buf;
@@ -696,8 +695,7 @@ int target_report_luns(struct se_task *se_task)
	buf[3] = (lun_count & 0xff);
	transport_kunmap_data_sg(se_cmd);

	se_task->task_scsi_status = GOOD;
	transport_complete_task(se_task, 1);
	target_complete_cmd(se_cmd, GOOD);
	return 0;
}

+1 −2
Original line number Diff line number Diff line
@@ -356,9 +356,8 @@ static int fd_do_writev(struct se_task *task)
	return 1;
}

static void fd_emulate_sync_cache(struct se_task *task)
static void fd_emulate_sync_cache(struct se_cmd *cmd)
{
	struct se_cmd *cmd = task->task_se_cmd;
	struct se_device *dev = cmd->se_dev;
	struct fd_dev *fd_dev = dev->dev_ptr;
	int immed = (cmd->t_task_cdb[1] & 0x2);
Loading