]> rtime.felk.cvut.cz Git - linux-imx.git/blobdiff - net/sunrpc/sched.c
SUNRPC: remove BUG_ON in rpc_release_task
[linux-imx.git] / net / sunrpc / sched.c
index 6357fcb00c7e2046f8acb901d7005429d23158cd..85290266bea0ddc71317f9bcc9b65494eb26a1af 100644 (file)
@@ -133,7 +133,9 @@ static void __rpc_add_wait_queue(struct rpc_wait_queue *queue,
                struct rpc_task *task,
                unsigned char queue_priority)
 {
-       BUG_ON (RPC_IS_QUEUED(task));
+       WARN_ON_ONCE(RPC_IS_QUEUED(task));
+       if (RPC_IS_QUEUED(task))
+               return;
 
        if (RPC_IS_PRIORITY(queue))
                __rpc_add_wait_queue_priority(queue, task, queue_priority);
@@ -334,7 +336,7 @@ static void __rpc_sleep_on_priority(struct rpc_wait_queue *q,
 
        __rpc_add_wait_queue(q, task, queue_priority);
 
-       BUG_ON(task->tk_callback != NULL);
+       WARN_ON_ONCE(task->tk_callback != NULL);
        task->tk_callback = action;
        __rpc_add_timer(q, task);
 }
@@ -343,7 +345,12 @@ void rpc_sleep_on(struct rpc_wait_queue *q, struct rpc_task *task,
                                rpc_action action)
 {
        /* We shouldn't ever put an inactive task to sleep */
-       BUG_ON(!RPC_IS_ACTIVATED(task));
+       WARN_ON_ONCE(!RPC_IS_ACTIVATED(task));
+       if (!RPC_IS_ACTIVATED(task)) {
+               task->tk_status = -EIO;
+               rpc_put_task_async(task);
+               return;
+       }
 
        /*
         * Protect the queue operations.
@@ -358,7 +365,12 @@ void rpc_sleep_on_priority(struct rpc_wait_queue *q, struct rpc_task *task,
                rpc_action action, int priority)
 {
        /* We shouldn't ever put an inactive task to sleep */
-       BUG_ON(!RPC_IS_ACTIVATED(task));
+       WARN_ON_ONCE(!RPC_IS_ACTIVATED(task));
+       if (!RPC_IS_ACTIVATED(task)) {
+               task->tk_status = -EIO;
+               rpc_put_task_async(task);
+               return;
+       }
 
        /*
         * Protect the queue operations.
@@ -697,7 +709,9 @@ static void __rpc_execute(struct rpc_task *task)
        dprintk("RPC: %5u __rpc_execute flags=0x%x\n",
                        task->tk_pid, task->tk_flags);
 
-       BUG_ON(RPC_IS_QUEUED(task));
+       WARN_ON_ONCE(RPC_IS_QUEUED(task));
+       if (RPC_IS_QUEUED(task))
+               return;
 
        for (;;) {
                void (*do_action)(struct rpc_task *);
@@ -981,7 +995,7 @@ static void rpc_release_task(struct rpc_task *task)
 {
        dprintk("RPC: %5u release task\n", task->tk_pid);
 
-       BUG_ON (RPC_IS_QUEUED(task));
+       WARN_ON_ONCE(RPC_IS_QUEUED(task));
 
        rpc_release_resources_task(task);