hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/target/target_core_transport.c
....@@ -650,12 +650,12 @@
650650 if (!dev)
651651 return;
652652
653
- spin_lock_irqsave(&dev->execute_task_lock, flags);
653
+ spin_lock_irqsave(&dev->queues[cmd->cpuid].lock, flags);
654654 if (cmd->state_active) {
655655 list_del(&cmd->state_list);
656656 cmd->state_active = false;
657657 }
658
- spin_unlock_irqrestore(&dev->execute_task_lock, flags);
658
+ spin_unlock_irqrestore(&dev->queues[cmd->cpuid].lock, flags);
659659 }
660660
661661 /*
....@@ -866,10 +866,7 @@
866866
867867 INIT_WORK(&cmd->work, success ? target_complete_ok_work :
868868 target_complete_failure_work);
869
- if (cmd->se_cmd_flags & SCF_USE_CPUID)
870
- queue_work_on(cmd->cpuid, target_completion_wq, &cmd->work);
871
- else
872
- queue_work(target_completion_wq, &cmd->work);
869
+ queue_work_on(cmd->cpuid, target_completion_wq, &cmd->work);
873870 }
874871 EXPORT_SYMBOL(target_complete_cmd);
875872
....@@ -904,12 +901,13 @@
904901 struct se_device *dev = cmd->se_dev;
905902 unsigned long flags;
906903
907
- spin_lock_irqsave(&dev->execute_task_lock, flags);
904
+ spin_lock_irqsave(&dev->queues[cmd->cpuid].lock, flags);
908905 if (!cmd->state_active) {
909
- list_add_tail(&cmd->state_list, &dev->state_list);
906
+ list_add_tail(&cmd->state_list,
907
+ &dev->queues[cmd->cpuid].state_list);
910908 cmd->state_active = true;
911909 }
912
- spin_unlock_irqrestore(&dev->execute_task_lock, flags);
910
+ spin_unlock_irqrestore(&dev->queues[cmd->cpuid].lock, flags);
913911 }
914912
915913 /*
....@@ -1397,6 +1395,9 @@
13971395 cmd->sense_buffer = sense_buffer;
13981396 cmd->orig_fe_lun = unpacked_lun;
13991397
1398
+ if (!(cmd->se_cmd_flags & SCF_USE_CPUID))
1399
+ cmd->cpuid = raw_smp_processor_id();
1400
+
14001401 cmd->state_active = false;
14011402 }
14021403 EXPORT_SYMBOL(transport_init_se_cmd);
....@@ -1614,6 +1615,9 @@
16141615 BUG_ON(!se_tpg);
16151616 BUG_ON(se_cmd->se_tfo || se_cmd->se_sess);
16161617 BUG_ON(in_interrupt());
1618
+
1619
+ if (flags & TARGET_SCF_USE_CPUID)
1620
+ se_cmd->se_cmd_flags |= SCF_USE_CPUID;
16171621 /*
16181622 * Initialize se_cmd for target operation. From this point
16191623 * exceptions are handled by sending exception status via
....@@ -1622,11 +1626,6 @@
16221626 transport_init_se_cmd(se_cmd, se_tpg->se_tpg_tfo, se_sess,
16231627 data_length, data_dir, task_attr, sense,
16241628 unpacked_lun);
1625
-
1626
- if (flags & TARGET_SCF_USE_CPUID)
1627
- se_cmd->se_cmd_flags |= SCF_USE_CPUID;
1628
- else
1629
- se_cmd->cpuid = WORK_CPU_UNBOUND;
16301629
16311630 if (flags & TARGET_SCF_UNKNOWN_SIZE)
16321631 se_cmd->unknown_data_length = 1;
....@@ -3131,14 +3130,14 @@
31313130 }
31323131 EXPORT_SYMBOL(transport_wait_for_tasks);
31333132
3134
-struct sense_info {
3133
+struct sense_detail {
31353134 u8 key;
31363135 u8 asc;
31373136 u8 ascq;
3138
- bool add_sector_info;
3137
+ bool add_sense_info;
31393138 };
31403139
3141
-static const struct sense_info sense_info_table[] = {
3140
+static const struct sense_detail sense_detail_table[] = {
31423141 [TCM_NO_SENSE] = {
31433142 .key = NOT_READY
31443143 },
....@@ -3238,19 +3237,19 @@
32383237 .key = ABORTED_COMMAND,
32393238 .asc = 0x10,
32403239 .ascq = 0x01, /* LOGICAL BLOCK GUARD CHECK FAILED */
3241
- .add_sector_info = true,
3240
+ .add_sense_info = true,
32423241 },
32433242 [TCM_LOGICAL_BLOCK_APP_TAG_CHECK_FAILED] = {
32443243 .key = ABORTED_COMMAND,
32453244 .asc = 0x10,
32463245 .ascq = 0x02, /* LOGICAL BLOCK APPLICATION TAG CHECK FAILED */
3247
- .add_sector_info = true,
3246
+ .add_sense_info = true,
32483247 },
32493248 [TCM_LOGICAL_BLOCK_REF_TAG_CHECK_FAILED] = {
32503249 .key = ABORTED_COMMAND,
32513250 .asc = 0x10,
32523251 .ascq = 0x03, /* LOGICAL BLOCK REFERENCE TAG CHECK FAILED */
3253
- .add_sector_info = true,
3252
+ .add_sense_info = true,
32543253 },
32553254 [TCM_COPY_TARGET_DEVICE_NOT_REACHABLE] = {
32563255 .key = COPY_ABORTED,
....@@ -3298,42 +3297,42 @@
32983297 */
32993298 static void translate_sense_reason(struct se_cmd *cmd, sense_reason_t reason)
33003299 {
3301
- const struct sense_info *si;
3300
+ const struct sense_detail *sd;
33023301 u8 *buffer = cmd->sense_buffer;
33033302 int r = (__force int)reason;
33043303 u8 key, asc, ascq;
33053304 bool desc_format = target_sense_desc_format(cmd->se_dev);
33063305
3307
- if (r < ARRAY_SIZE(sense_info_table) && sense_info_table[r].key)
3308
- si = &sense_info_table[r];
3306
+ if (r < ARRAY_SIZE(sense_detail_table) && sense_detail_table[r].key)
3307
+ sd = &sense_detail_table[r];
33093308 else
3310
- si = &sense_info_table[(__force int)
3309
+ sd = &sense_detail_table[(__force int)
33113310 TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE];
33123311
3313
- key = si->key;
3312
+ key = sd->key;
33143313 if (reason == TCM_CHECK_CONDITION_UNIT_ATTENTION) {
33153314 if (!core_scsi3_ua_for_check_condition(cmd, &key, &asc,
33163315 &ascq)) {
33173316 cmd->scsi_status = SAM_STAT_BUSY;
33183317 return;
33193318 }
3320
- } else if (si->asc == 0) {
3319
+ } else if (sd->asc == 0) {
33213320 WARN_ON_ONCE(cmd->scsi_asc == 0);
33223321 asc = cmd->scsi_asc;
33233322 ascq = cmd->scsi_ascq;
33243323 } else {
3325
- asc = si->asc;
3326
- ascq = si->ascq;
3324
+ asc = sd->asc;
3325
+ ascq = sd->ascq;
33273326 }
33283327
33293328 cmd->se_cmd_flags |= SCF_EMULATED_TASK_SENSE;
33303329 cmd->scsi_status = SAM_STAT_CHECK_CONDITION;
33313330 cmd->scsi_sense_length = TRANSPORT_SENSE_BUFFER;
33323331 scsi_build_sense_buffer(desc_format, buffer, key, asc, ascq);
3333
- if (si->add_sector_info)
3332
+ if (sd->add_sense_info)
33343333 WARN_ON_ONCE(scsi_set_sense_information(buffer,
33353334 cmd->scsi_sense_length,
3336
- cmd->bad_sector) < 0);
3335
+ cmd->sense_info) < 0);
33373336 }
33383337
33393338 int