From ec6ada6a6ec1bea6447962580f1be20e7a64cc2d Mon Sep 17 00:00:00 2001 From: Nicholas Bellinger Date: Thu, 19 May 2011 20:19:12 -0700 Subject: [PATCH] --- yaml --- r: 252451 b: refs/heads/master c: af57c3ac9947990da2608561b71f4799eb7795c6 h: refs/heads/master i: 252449: 18c497f42db97228df999020f1273fa480f2ff1b 252447: 102abfd8c52953ec592c8deca720fcec82d26802 v: v3 --- [refs] | 2 +- trunk/drivers/target/target_core_transport.c | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 0a6729c0a793..d15eba7267f0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f436677262a5b524ac87675014c6d4e8ee153029 +refs/heads/master: af57c3ac9947990da2608561b71f4799eb7795c6 diff --git a/trunk/drivers/target/target_core_transport.c b/trunk/drivers/target/target_core_transport.c index 7c87b042375a..623963b8c1b7 100644 --- a/trunk/drivers/target/target_core_transport.c +++ b/trunk/drivers/target/target_core_transport.c @@ -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); }