summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorMikulas Patocka <mpatocka@redhat.com>2014-06-23 19:42:37 +0200
committerNicholas Bellinger <nab@linux-iscsi.org>2014-06-28 08:23:35 +0200
commit81a9c5e72bdf7109a65102ca61d8cbd722cf4021 (patch)
tree23e1accddfc6aedef0186db3061fe820b023dfc7 /net
parentiovec: move memcpy_from/toiovecend to lib/iovec.c (diff)
downloadlinux-81a9c5e72bdf7109a65102ca61d8cbd722cf4021.tar.xz
linux-81a9c5e72bdf7109a65102ca61d8cbd722cf4021.zip
iscsi-target: fix iscsit_del_np deadlock on unload
On uniprocessor preemptible kernel, target core deadlocks on unload. The following events happen: * iscsit_del_np is called * it calls send_sig(SIGINT, np->np_thread, 1); * the scheduler switches to the np_thread * the np_thread is woken up, it sees that kthread_should_stop() returns false, so it doesn't terminate * the np_thread clears signals with flush_signals(current); and goes back to sleep in iscsit_accept_np * the scheduler switches back to iscsit_del_np * iscsit_del_np calls kthread_stop(np->np_thread); * the np_thread is waiting in iscsit_accept_np and it doesn't respond to kthread_stop The deadlock could be resolved if the administrator sends SIGINT signal to the np_thread with killall -INT iscsi_np The reproducible deadlock was introduced in commit db6077fd0b7dd41dc6ff18329cec979379071f87, but the thread-stopping code was racy even before. This patch fixes the problem. Using kthread_should_stop to stop the np_thread is unreliable, so we test np_thread_state instead. If np_thread_state equals ISCSI_NP_THREAD_SHUTDOWN, the thread exits. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Cc: stable@vger.kernel.org Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'net')
0 files changed, 0 insertions, 0 deletions