Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6:
[SCSI] target: Fix t_transport_aborted handling in LUN_RESET + active I/O shutdown

+13 -2
+5
drivers/target/target_core_tmr.c
··· 282 282 283 283 atomic_set(&task->task_active, 0); 284 284 atomic_set(&task->task_stop, 0); 285 + } else { 286 + if (atomic_read(&task->task_execute_queue) != 0) 287 + transport_remove_task_from_execute_queue(task, dev); 285 288 } 286 289 __transport_stop_task_timer(task, &flags); 287 290 ··· 304 301 DEBUG_LR("LUN_RESET: got t_transport_active = 1 for" 305 302 " task: %p, t_fe_count: %d dev: %p\n", task, 306 303 fe_count, dev); 304 + atomic_set(&T_TASK(cmd)->t_transport_aborted, 1); 307 305 spin_unlock_irqrestore(&T_TASK(cmd)->t_state_lock, 308 306 flags); 309 307 core_tmr_handle_tas_abort(tmr_nacl, cmd, tas, fe_count); ··· 314 310 } 315 311 DEBUG_LR("LUN_RESET: Got t_transport_active = 0 for task: %p," 316 312 " t_fe_count: %d dev: %p\n", task, fe_count, dev); 313 + atomic_set(&T_TASK(cmd)->t_transport_aborted, 1); 317 314 spin_unlock_irqrestore(&T_TASK(cmd)->t_state_lock, flags); 318 315 core_tmr_handle_tas_abort(tmr_nacl, cmd, tas, fe_count); 319 316
+6 -2
drivers/target/target_core_transport.c
··· 1207 1207 * 1208 1208 * 1209 1209 */ 1210 - static void transport_remove_task_from_execute_queue( 1210 + void transport_remove_task_from_execute_queue( 1211 1211 struct se_task *task, 1212 1212 struct se_device *dev) 1213 1213 { ··· 5549 5549 5550 5550 atomic_set(&T_TASK(cmd)->transport_lun_stop, 0); 5551 5551 } 5552 - if (!atomic_read(&T_TASK(cmd)->t_transport_active)) 5552 + if (!atomic_read(&T_TASK(cmd)->t_transport_active) || 5553 + atomic_read(&T_TASK(cmd)->t_transport_aborted)) 5553 5554 goto remove; 5554 5555 5555 5556 atomic_set(&T_TASK(cmd)->t_transport_stop, 1); ··· 5957 5956 5958 5957 atomic_set(&task->task_active, 0); 5959 5958 atomic_set(&task->task_stop, 0); 5959 + } else { 5960 + if (atomic_read(&task->task_execute_queue) != 0) 5961 + transport_remove_task_from_execute_queue(task, dev); 5960 5962 } 5961 5963 __transport_stop_task_timer(task, &flags); 5962 5964
+2
include/target/target_core_transport.h
··· 135 135 extern void transport_add_task_to_execute_queue(struct se_task *, 136 136 struct se_task *, 137 137 struct se_device *); 138 + extern void transport_remove_task_from_execute_queue(struct se_task *, 139 + struct se_device *); 138 140 unsigned char *transport_dump_cmd_direction(struct se_cmd *); 139 141 extern void transport_dump_dev_state(struct se_device *, char *, int *); 140 142 extern void transport_dump_dev_info(struct se_device *, struct se_lun *,