]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
SUNRPC: We must not use list_for_each_entry_safe() in rpc_wake_up()
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 19 Mar 2012 17:39:35 +0000 (13:39 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 2 Apr 2012 16:27:17 +0000 (09:27 -0700)
commit77d77ab09b1b57cf3cc30d0dbdf8c55137146a8f
tree286d1c555b733adcfce814a1b0b4db6637640d2c
parent5f1968d427434ea1c0745d75428008e26334bde8
SUNRPC: We must not use list_for_each_entry_safe() in rpc_wake_up()

commit 540a0f7584169651f485e8ab67461fcb06934e38 upstream.

The problem is that for the case of priority queues, we
have to assume that __rpc_remove_wait_queue_priority will move new
elements from the tk_wait.links lists into the queue->tasks[] list.
We therefore cannot use list_for_each_entry_safe() on queue->tasks[],
since that will skip these new tasks that __rpc_remove_wait_queue_priority
is adding.

Without this fix, rpc_wake_up and rpc_wake_up_status will both fail
to wake up all functions on priority wait queues, which can result
in some nasty hangs.

Reported-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/sunrpc/sched.c