|
@@ -1194,6 +1194,7 @@ transport_get_task_from_execute_queue(struct se_device *dev)
|
|
|
break;
|
|
|
|
|
|
list_del(&task->t_execute_list);
|
|
|
+ atomic_set(&task->task_execute_queue, 0);
|
|
|
atomic_dec(&dev->execute_tasks);
|
|
|
|
|
|
return task;
|
|
@@ -1209,8 +1210,14 @@ void transport_remove_task_from_execute_queue(
|
|
|
{
|
|
|
unsigned long flags;
|
|
|
|
|
|
+ if (atomic_read(&task->task_execute_queue) == 0) {
|
|
|
+ dump_stack();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
spin_lock_irqsave(&dev->execute_task_lock, flags);
|
|
|
list_del(&task->t_execute_list);
|
|
|
+ atomic_set(&task->task_execute_queue, 0);
|
|
|
atomic_dec(&dev->execute_tasks);
|
|
|
spin_unlock_irqrestore(&dev->execute_task_lock, flags);
|
|
|
}
|