Skip to content

Commit 6bb35e0

Browse files
Christoph HellwigNicholas Bellinger
authored andcommitted
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: Christoph Hellwig <[email protected]> Signed-off-by: Nicholas Bellinger <[email protected]>
1 parent bd31377 commit 6bb35e0

12 files changed

+93
-122
lines changed

drivers/target/target_core_alua.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,8 @@ struct t10_alua_lu_gp *default_lu_gp;
5959
*
6060
* See spc4r17 section 6.27
6161
*/
62-
int target_emulate_report_target_port_groups(struct se_task *task)
62+
int target_emulate_report_target_port_groups(struct se_cmd *cmd)
6363
{
64-
struct se_cmd *cmd = task->task_se_cmd;
6564
struct se_subsystem_dev *su_dev = cmd->se_dev->se_sub_dev;
6665
struct se_port *port;
6766
struct t10_alua_tg_pt_gp *tg_pt_gp;
@@ -166,8 +165,7 @@ int target_emulate_report_target_port_groups(struct se_task *task)
166165

167166
transport_kunmap_data_sg(cmd);
168167

169-
task->task_scsi_status = GOOD;
170-
transport_complete_task(task, 1);
168+
target_complete_cmd(cmd, GOOD);
171169
return 0;
172170
}
173171

@@ -176,9 +174,8 @@ int target_emulate_report_target_port_groups(struct se_task *task)
176174
*
177175
* See spc4r17 section 6.35
178176
*/
179-
int target_emulate_set_target_port_groups(struct se_task *task)
177+
int target_emulate_set_target_port_groups(struct se_cmd *cmd)
180178
{
181-
struct se_cmd *cmd = task->task_se_cmd;
182179
struct se_device *dev = cmd->se_dev;
183180
struct se_subsystem_dev *su_dev = dev->se_sub_dev;
184181
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)
351348

352349
out:
353350
transport_kunmap_data_sg(cmd);
354-
task->task_scsi_status = GOOD;
355-
transport_complete_task(task, 1);
351+
target_complete_cmd(cmd, GOOD);
356352
return 0;
357353
}
358354

drivers/target/target_core_alua.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ extern struct kmem_cache *t10_alua_lu_gp_mem_cache;
6666
extern struct kmem_cache *t10_alua_tg_pt_gp_cache;
6767
extern struct kmem_cache *t10_alua_tg_pt_gp_mem_cache;
6868

69-
extern int target_emulate_report_target_port_groups(struct se_task *);
70-
extern int target_emulate_set_target_port_groups(struct se_task *);
69+
extern int target_emulate_report_target_port_groups(struct se_cmd *);
70+
extern int target_emulate_set_target_port_groups(struct se_cmd *);
7171
extern int core_alua_check_nonop_delay(struct se_cmd *);
7272
extern int core_alua_do_port_transition(struct t10_alua_tg_pt_gp *,
7373
struct se_device *, struct se_port *,

drivers/target/target_core_cdb.c

Lines changed: 22 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -601,9 +601,8 @@ target_emulate_evpd_00(struct se_cmd *cmd, unsigned char *buf)
601601
return 0;
602602
}
603603

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

670-
if (!ret) {
671-
task->task_scsi_status = GOOD;
672-
transport_complete_task(task, 1);
673-
}
669+
if (!ret)
670+
target_complete_cmd(cmd, GOOD);
674671
return ret;
675672
}
676673

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

701697
transport_kunmap_data_sg(cmd);
702698

703-
task->task_scsi_status = GOOD;
704-
transport_complete_task(task, 1);
699+
target_complete_cmd(cmd, GOOD);
705700
return 0;
706701
}
707702

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

736730
transport_kunmap_data_sg(cmd);
737731

738-
task->task_scsi_status = GOOD;
739-
transport_complete_task(task, 1);
732+
target_complete_cmd(cmd, GOOD);
740733
return 0;
741734
}
742735

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

878-
int target_emulate_modesense(struct se_task *task)
871+
int target_emulate_modesense(struct se_cmd *cmd)
879872
{
880-
struct se_cmd *cmd = task->task_se_cmd;
881873
struct se_device *dev = cmd->se_dev;
882874
char *cdb = cmd->t_task_cdb;
883875
unsigned char *rbuf;
@@ -950,14 +942,12 @@ int target_emulate_modesense(struct se_task *task)
950942
memcpy(rbuf, buf, offset);
951943
transport_kunmap_data_sg(cmd);
952944

953-
task->task_scsi_status = GOOD;
954-
transport_complete_task(task, 1);
945+
target_complete_cmd(cmd, GOOD);
955946
return 0;
956947
}
957948

958-
int target_emulate_request_sense(struct se_task *task)
949+
int target_emulate_request_sense(struct se_cmd *cmd)
959950
{
960-
struct se_cmd *cmd = task->task_se_cmd;
961951
unsigned char *cdb = cmd->t_task_cdb;
962952
unsigned char *buf;
963953
u8 ua_asc = 0, ua_ascq = 0;
@@ -1011,18 +1001,16 @@ int target_emulate_request_sense(struct se_task *task)
10111001

10121002
end:
10131003
transport_kunmap_data_sg(cmd);
1014-
task->task_scsi_status = GOOD;
1015-
transport_complete_task(task, 1);
1004+
target_complete_cmd(cmd, GOOD);
10161005
return 0;
10171006
}
10181007

10191008
/*
10201009
* Used for TCM/IBLOCK and TCM/FILEIO for block/blk-lib.c level discard support.
10211010
* Note this is not used for TCM/pSCSI passthrough
10221011
*/
1023-
int target_emulate_unmap(struct se_task *task)
1012+
int target_emulate_unmap(struct se_cmd *cmd)
10241013
{
1025-
struct se_cmd *cmd = task->task_se_cmd;
10261014
struct se_device *dev = cmd->se_dev;
10271015
unsigned char *buf, *ptr = NULL;
10281016
unsigned char *cdb = &cmd->t_task_cdb[0];
@@ -1069,20 +1057,17 @@ int target_emulate_unmap(struct se_task *task)
10691057

10701058
err:
10711059
transport_kunmap_data_sg(cmd);
1072-
if (!ret) {
1073-
task->task_scsi_status = GOOD;
1074-
transport_complete_task(task, 1);
1075-
}
1060+
if (!ret)
1061+
target_complete_cmd(cmd, GOOD);
10761062
return ret;
10771063
}
10781064

10791065
/*
10801066
* Used for TCM/IBLOCK and TCM/FILEIO for block/blk-lib.c level discard support.
10811067
* Note this is not used for TCM/pSCSI passthrough
10821068
*/
1083-
int target_emulate_write_same(struct se_task *task)
1069+
int target_emulate_write_same(struct se_cmd *cmd)
10841070
{
1085-
struct se_cmd *cmd = task->task_se_cmd;
10861071
struct se_device *dev = cmd->se_dev;
10871072
sector_t range;
10881073
sector_t lba = cmd->t_task_lba;
@@ -1121,30 +1106,25 @@ int target_emulate_write_same(struct se_task *task)
11211106
return ret;
11221107
}
11231108

1124-
task->task_scsi_status = GOOD;
1125-
transport_complete_task(task, 1);
1109+
target_complete_cmd(cmd, GOOD);
11261110
return 0;
11271111
}
11281112

1129-
int target_emulate_synchronize_cache(struct se_task *task)
1113+
int target_emulate_synchronize_cache(struct se_cmd *cmd)
11301114
{
1131-
struct se_device *dev = task->task_se_cmd->se_dev;
1132-
struct se_cmd *cmd = task->task_se_cmd;
1133-
1134-
if (!dev->transport->do_sync_cache) {
1115+
if (!cmd->se_dev->transport->do_sync_cache) {
11351116
pr_err("SYNCHRONIZE_CACHE emulation not supported"
1136-
" for: %s\n", dev->transport->name);
1117+
" for: %s\n", cmd->se_dev->transport->name);
11371118
cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE;
11381119
return -ENOSYS;
11391120
}
11401121

1141-
dev->transport->do_sync_cache(task);
1122+
cmd->se_dev->transport->do_sync_cache(cmd);
11421123
return 0;
11431124
}
11441125

1145-
int target_emulate_noop(struct se_task *task)
1126+
int target_emulate_noop(struct se_cmd *cmd)
11461127
{
1147-
task->task_scsi_status = GOOD;
1148-
transport_complete_task(task, 1);
1128+
target_complete_cmd(cmd, GOOD);
11491129
return 0;
11501130
}

drivers/target/target_core_device.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -643,9 +643,8 @@ void core_dev_unexport(
643643
lun->lun_se_dev = NULL;
644644
}
645645

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

699-
se_task->task_scsi_status = GOOD;
700-
transport_complete_task(se_task, 1);
698+
target_complete_cmd(se_cmd, GOOD);
701699
return 0;
702700
}
703701

drivers/target/target_core_file.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -356,9 +356,8 @@ static int fd_do_writev(struct se_task *task)
356356
return 1;
357357
}
358358

359-
static void fd_emulate_sync_cache(struct se_task *task)
359+
static void fd_emulate_sync_cache(struct se_cmd *cmd)
360360
{
361-
struct se_cmd *cmd = task->task_se_cmd;
362361
struct se_device *dev = cmd->se_dev;
363362
struct fd_dev *fd_dev = dev->dev_ptr;
364363
int immed = (cmd->t_task_cdb[1] & 0x2);

drivers/target/target_core_iblock.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,9 +304,8 @@ static void iblock_end_io_flush(struct bio *bio, int err)
304304
* Implement SYCHRONIZE CACHE. Note that we can't handle lba ranges and must
305305
* always flush the whole cache.
306306
*/
307-
static void iblock_emulate_sync_cache(struct se_task *task)
307+
static void iblock_emulate_sync_cache(struct se_cmd *cmd)
308308
{
309-
struct se_cmd *cmd = task->task_se_cmd;
310309
struct iblock_dev *ib_dev = cmd->se_dev->dev_ptr;
311310
int immed = (cmd->t_task_cdb[1] & 0x2);
312311
struct bio *bio;

drivers/target/target_core_internal.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
extern struct t10_alua_lu_gp *default_lu_gp;
66

77
/* target_core_cdb.c */
8-
int target_emulate_inquiry(struct se_task *task);
9-
int target_emulate_readcapacity(struct se_task *task);
10-
int target_emulate_readcapacity_16(struct se_task *task);
11-
int target_emulate_modesense(struct se_task *task);
12-
int target_emulate_request_sense(struct se_task *task);
13-
int target_emulate_unmap(struct se_task *task);
14-
int target_emulate_write_same(struct se_task *task);
15-
int target_emulate_synchronize_cache(struct se_task *task);
16-
int target_emulate_noop(struct se_task *task);
8+
int target_emulate_inquiry(struct se_cmd *cmd);
9+
int target_emulate_readcapacity(struct se_cmd *cmd);
10+
int target_emulate_readcapacity_16(struct se_cmd *cmd);
11+
int target_emulate_modesense(struct se_cmd *cmd);
12+
int target_emulate_request_sense(struct se_cmd *cmd);
13+
int target_emulate_unmap(struct se_cmd *cmd);
14+
int target_emulate_write_same(struct se_cmd *cmd);
15+
int target_emulate_synchronize_cache(struct se_cmd *cmd);
16+
int target_emulate_noop(struct se_cmd *cmd);
1717

1818
/* target_core_device.c */
1919
struct se_dev_entry *core_get_se_deve_from_rtpi(struct se_node_acl *, u16);
@@ -28,7 +28,7 @@ int core_dev_export(struct se_device *, struct se_portal_group *,
2828
struct se_lun *);
2929
void core_dev_unexport(struct se_device *, struct se_portal_group *,
3030
struct se_lun *);
31-
int target_report_luns(struct se_task *);
31+
int target_report_luns(struct se_cmd *);
3232
void se_release_device_for_hba(struct se_device *);
3333
void se_release_vpd_for_dev(struct se_device *);
3434
int se_free_virtual_device(struct se_device *, struct se_hba *);

drivers/target/target_core_pr.c

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -193,9 +193,8 @@ static int target_check_scsi2_reservation_conflict(struct se_cmd *cmd)
193193
return 0;
194194
}
195195

196-
int target_scsi2_reservation_release(struct se_task *task)
196+
int target_scsi2_reservation_release(struct se_cmd *cmd)
197197
{
198-
struct se_cmd *cmd = task->task_se_cmd;
199198
struct se_device *dev = cmd->se_dev;
200199
struct se_session *sess = cmd->se_sess;
201200
struct se_portal_group *tpg = sess->se_tpg;
@@ -234,16 +233,13 @@ int target_scsi2_reservation_release(struct se_task *task)
234233
out_unlock:
235234
spin_unlock(&dev->dev_reservation_lock);
236235
out:
237-
if (!ret) {
238-
task->task_scsi_status = GOOD;
239-
transport_complete_task(task, 1);
240-
}
236+
if (!ret)
237+
target_complete_cmd(cmd, GOOD);
241238
return ret;
242239
}
243240

244-
int target_scsi2_reservation_reserve(struct se_task *task)
241+
int target_scsi2_reservation_reserve(struct se_cmd *cmd)
245242
{
246-
struct se_cmd *cmd = task->task_se_cmd;
247243
struct se_device *dev = cmd->se_dev;
248244
struct se_session *sess = cmd->se_sess;
249245
struct se_portal_group *tpg = sess->se_tpg;
@@ -304,10 +300,8 @@ int target_scsi2_reservation_reserve(struct se_task *task)
304300
out_unlock:
305301
spin_unlock(&dev->dev_reservation_lock);
306302
out:
307-
if (!ret) {
308-
task->task_scsi_status = GOOD;
309-
transport_complete_task(task, 1);
310-
}
303+
if (!ret)
304+
target_complete_cmd(cmd, GOOD);
311305
return ret;
312306
}
313307

@@ -3798,9 +3792,8 @@ static unsigned long long core_scsi3_extract_reservation_key(unsigned char *cdb)
37983792
/*
37993793
* See spc4r17 section 6.14 Table 170
38003794
*/
3801-
int target_scsi3_emulate_pr_out(struct se_task *task)
3795+
int target_scsi3_emulate_pr_out(struct se_cmd *cmd)
38023796
{
3803-
struct se_cmd *cmd = task->task_se_cmd;
38043797
unsigned char *cdb = &cmd->t_task_cdb[0];
38053798
unsigned char *buf;
38063799
u64 res_key, sa_res_key;
@@ -3940,10 +3933,8 @@ int target_scsi3_emulate_pr_out(struct se_task *task)
39403933
}
39413934

39423935
out:
3943-
if (!ret) {
3944-
task->task_scsi_status = GOOD;
3945-
transport_complete_task(task, 1);
3946-
}
3936+
if (!ret)
3937+
target_complete_cmd(cmd, GOOD);
39473938
return ret;
39483939
}
39493940

@@ -4298,9 +4289,8 @@ static int core_scsi3_pri_read_full_status(struct se_cmd *cmd)
42984289
return 0;
42994290
}
43004291

4301-
int target_scsi3_emulate_pr_in(struct se_task *task)
4292+
int target_scsi3_emulate_pr_in(struct se_cmd *cmd)
43024293
{
4303-
struct se_cmd *cmd = task->task_se_cmd;
43044294
int ret;
43054295

43064296
/*
@@ -4341,10 +4331,8 @@ int target_scsi3_emulate_pr_in(struct se_task *task)
43414331
break;
43424332
}
43434333

4344-
if (!ret) {
4345-
task->task_scsi_status = GOOD;
4346-
transport_complete_task(task, 1);
4347-
}
4334+
if (!ret)
4335+
target_complete_cmd(cmd, GOOD);
43484336
return ret;
43494337
}
43504338

0 commit comments

Comments
 (0)