Skip to content

Commit

Permalink
target: replace ->execute_task with ->execute_cmd
Browse files Browse the repository at this point in the history
Make CDB emulation work on commands instead of tasks again as a preparation
of removing tasks completely.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
  • Loading branch information
Christoph Hellwig authored and Nicholas Bellinger committed May 6, 2012
1 parent bd31377 commit 6bb35e0
Show file tree
Hide file tree
Showing 12 changed files with 93 additions and 122 deletions.
12 changes: 4 additions & 8 deletions drivers/target/target_core_alua.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}

Expand All @@ -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;
Expand Down Expand Up @@ -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;
}

Expand Down
4 changes: 2 additions & 2 deletions drivers/target/target_core_alua.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 *,
Expand Down
64 changes: 22 additions & 42 deletions drivers/target/target_core_cdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -1011,18 +1001,16 @@ 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;
}

/*
* 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];
Expand Down Expand Up @@ -1069,20 +1057,17 @@ 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;
}

/*
* 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;
Expand Down Expand Up @@ -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;
}
6 changes: 2 additions & 4 deletions drivers/target/target_core_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}

Expand Down
3 changes: 1 addition & 2 deletions drivers/target/target_core_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
3 changes: 1 addition & 2 deletions drivers/target/target_core_iblock.c
Original file line number Diff line number Diff line change
Expand Up @@ -304,9 +304,8 @@ static void iblock_end_io_flush(struct bio *bio, int err)
* Implement SYCHRONIZE CACHE. Note that we can't handle lba ranges and must
* always flush the whole cache.
*/
static void iblock_emulate_sync_cache(struct se_task *task)
static void iblock_emulate_sync_cache(struct se_cmd *cmd)
{
struct se_cmd *cmd = task->task_se_cmd;
struct iblock_dev *ib_dev = cmd->se_dev->dev_ptr;
int immed = (cmd->t_task_cdb[1] & 0x2);
struct bio *bio;
Expand Down
20 changes: 10 additions & 10 deletions drivers/target/target_core_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
extern struct t10_alua_lu_gp *default_lu_gp;

/* target_core_cdb.c */
int target_emulate_inquiry(struct se_task *task);
int target_emulate_readcapacity(struct se_task *task);
int target_emulate_readcapacity_16(struct se_task *task);
int target_emulate_modesense(struct se_task *task);
int target_emulate_request_sense(struct se_task *task);
int target_emulate_unmap(struct se_task *task);
int target_emulate_write_same(struct se_task *task);
int target_emulate_synchronize_cache(struct se_task *task);
int target_emulate_noop(struct se_task *task);
int target_emulate_inquiry(struct se_cmd *cmd);
int target_emulate_readcapacity(struct se_cmd *cmd);
int target_emulate_readcapacity_16(struct se_cmd *cmd);
int target_emulate_modesense(struct se_cmd *cmd);
int target_emulate_request_sense(struct se_cmd *cmd);
int target_emulate_unmap(struct se_cmd *cmd);
int target_emulate_write_same(struct se_cmd *cmd);
int target_emulate_synchronize_cache(struct se_cmd *cmd);
int target_emulate_noop(struct se_cmd *cmd);

/* target_core_device.c */
struct se_dev_entry *core_get_se_deve_from_rtpi(struct se_node_acl *, u16);
Expand All @@ -28,7 +28,7 @@ int core_dev_export(struct se_device *, struct se_portal_group *,
struct se_lun *);
void core_dev_unexport(struct se_device *, struct se_portal_group *,
struct se_lun *);
int target_report_luns(struct se_task *);
int target_report_luns(struct se_cmd *);
void se_release_device_for_hba(struct se_device *);
void se_release_vpd_for_dev(struct se_device *);
int se_free_virtual_device(struct se_device *, struct se_hba *);
Expand Down
36 changes: 12 additions & 24 deletions drivers/target/target_core_pr.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,9 +193,8 @@ static int target_check_scsi2_reservation_conflict(struct se_cmd *cmd)
return 0;
}

int target_scsi2_reservation_release(struct se_task *task)
int target_scsi2_reservation_release(struct se_cmd *cmd)
{
struct se_cmd *cmd = task->task_se_cmd;
struct se_device *dev = cmd->se_dev;
struct se_session *sess = cmd->se_sess;
struct se_portal_group *tpg = sess->se_tpg;
Expand Down Expand Up @@ -234,16 +233,13 @@ int target_scsi2_reservation_release(struct se_task *task)
out_unlock:
spin_unlock(&dev->dev_reservation_lock);
out:
if (!ret) {
task->task_scsi_status = GOOD;
transport_complete_task(task, 1);
}
if (!ret)
target_complete_cmd(cmd, GOOD);
return ret;
}

int target_scsi2_reservation_reserve(struct se_task *task)
int target_scsi2_reservation_reserve(struct se_cmd *cmd)
{
struct se_cmd *cmd = task->task_se_cmd;
struct se_device *dev = cmd->se_dev;
struct se_session *sess = cmd->se_sess;
struct se_portal_group *tpg = sess->se_tpg;
Expand Down Expand Up @@ -304,10 +300,8 @@ int target_scsi2_reservation_reserve(struct se_task *task)
out_unlock:
spin_unlock(&dev->dev_reservation_lock);
out:
if (!ret) {
task->task_scsi_status = GOOD;
transport_complete_task(task, 1);
}
if (!ret)
target_complete_cmd(cmd, GOOD);
return ret;
}

Expand Down Expand Up @@ -3798,9 +3792,8 @@ static unsigned long long core_scsi3_extract_reservation_key(unsigned char *cdb)
/*
* See spc4r17 section 6.14 Table 170
*/
int target_scsi3_emulate_pr_out(struct se_task *task)
int target_scsi3_emulate_pr_out(struct se_cmd *cmd)
{
struct se_cmd *cmd = task->task_se_cmd;
unsigned char *cdb = &cmd->t_task_cdb[0];
unsigned char *buf;
u64 res_key, sa_res_key;
Expand Down Expand Up @@ -3940,10 +3933,8 @@ int target_scsi3_emulate_pr_out(struct se_task *task)
}

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

Expand Down Expand Up @@ -4298,9 +4289,8 @@ static int core_scsi3_pri_read_full_status(struct se_cmd *cmd)
return 0;
}

int target_scsi3_emulate_pr_in(struct se_task *task)
int target_scsi3_emulate_pr_in(struct se_cmd *cmd)
{
struct se_cmd *cmd = task->task_se_cmd;
int ret;

/*
Expand Down Expand Up @@ -4341,10 +4331,8 @@ int target_scsi3_emulate_pr_in(struct se_task *task)
break;
}

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

Expand Down
Loading

0 comments on commit 6bb35e0

Please sign in to comment.