From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Mikulas Patocka <mpatocka@redhat.com>,
Nicholas Bellinger <nab@linux-iscsi.org>
Subject: [PATCH 3.15 04/66] iscsi-target: fix iscsit_del_np deadlock on unload
Date: Fri, 4 Jul 2014 15:14:03 -0700 [thread overview]
Message-ID: <20140704221423.017141921@linuxfoundation.org> (raw)
In-Reply-To: <20140704221422.813435485@linuxfoundation.org>
3.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mikulas Patocka <mpatocka@redhat.com>
commit 81a9c5e72bdf7109a65102ca61d8cbd722cf4021 upstream.
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>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/target/iscsi/iscsi_target_login.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
--- a/drivers/target/iscsi/iscsi_target_login.c
+++ b/drivers/target/iscsi/iscsi_target_login.c
@@ -1216,7 +1216,7 @@ old_sess_out:
static int __iscsi_target_login_thread(struct iscsi_np *np)
{
u8 *buffer, zero_tsih = 0;
- int ret = 0, rc, stop;
+ int ret = 0, rc;
struct iscsi_conn *conn = NULL;
struct iscsi_login *login;
struct iscsi_portal_group *tpg = NULL;
@@ -1230,6 +1230,9 @@ static int __iscsi_target_login_thread(s
if (np->np_thread_state == ISCSI_NP_THREAD_RESET) {
np->np_thread_state = ISCSI_NP_THREAD_ACTIVE;
complete(&np->np_restart_comp);
+ } else if (np->np_thread_state == ISCSI_NP_THREAD_SHUTDOWN) {
+ spin_unlock_bh(&np->np_thread_lock);
+ goto exit;
} else {
np->np_thread_state = ISCSI_NP_THREAD_ACTIVE;
}
@@ -1422,10 +1425,8 @@ old_sess_out:
}
out:
- stop = kthread_should_stop();
- /* Wait for another socket.. */
- if (!stop)
- return 1;
+ return 1;
+
exit:
iscsi_stop_login_thread_timer(np);
spin_lock_bh(&np->np_thread_lock);
@@ -1442,7 +1443,7 @@ int iscsi_target_login_thread(void *arg)
allow_signal(SIGINT);
- while (!kthread_should_stop()) {
+ while (1) {
ret = __iscsi_target_login_thread(np);
/*
* We break and exit here unless another sock_accept() call
next prev parent reply other threads:[~2014-07-04 22:14 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-04 22:13 [PATCH 3.15 00/66] 3.15.4-stable review Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 01/66] target: Fix left-over se_lun->lun_sep pointer OOPs Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 02/66] iscsi-target: Avoid rejecting incorrect ITT for Data-Out Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 03/66] iscsi-target: Explicily clear login response PDU in exception path Greg Kroah-Hartman
2014-07-04 22:14 ` Greg Kroah-Hartman [this message]
2014-07-04 22:14 ` [PATCH 3.15 05/66] Input: synaptics - fix resolution for manually provided min/max Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 06/66] Input: elantech - deal with clickpads reporting right button events Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 07/66] Input: elantech - dont set bit 1 of reg_10 when the no_hw_res quirk is set Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 08/66] PCI: Add new ID for Intel GPU "spurious interrupt" quirk Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 09/66] PCI: Fix incorrect vgaarb conditional in WARN_ON() Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 10/66] mtip32xx: Fix ERO and NoSnoop values in PCIe upstream on AMD systems Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 11/66] mtip32xx: Increase timeout for STANDBY IMMEDIATE command Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 12/66] mtip32xx: Remove dfs_parent after pci unregister Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 13/66] recordmcount/MIPS: Fix possible incorrect mcount_loc table entries in modules Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 14/66] Revert "MIPS: Save/restore MSA context around signals" Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 15/66] MIPS: MSC: Prevent out-of-bounds writes to MIPS SC ioremapd region Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 16/66] hpsa: add new Smart Array PCI IDs (May 2014) Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 17/66] UBIFS: fix an mmap and fsync race condition Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 18/66] UBIFS: Remove incorrect assertion in shrink_tnc() Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 19/66] RDMA/cxgb4: Fix memory leaks in c4iw_alloc() error paths Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 20/66] RDMA/cxgb4: Add missing padding at end of struct c4iw_create_cq_resp Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 21/66] RDMA/cxgb4: add missing padding at end of struct c4iw_alloc_ucontext_resp Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 22/66] watchdog: sp805: Set watchdog_device->timeout from ->set_timeout() Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 23/66] watchdog: ath79_wdt: avoid spurious restarts on AR934x Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 24/66] watchdog: kempld-wdt: Use the correct value when configuring the prescaler with the watchdog Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 25/66] kernel/watchdog.c: remove preemption restrictions when restarting lockup detector Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 26/66] IB/mlx5: add missing padding at end of struct mlx5_ib_create_cq Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 27/66] IB/mlx5: add missing padding at end of struct mlx5_ib_create_srq Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 28/66] IB/qib: Fix port in pkey change event Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 29/66] IB/ipath: Translate legacy diagpkt into newer extended diagpkt Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 30/66] IB/srp: Fix a sporadic crash triggered by cable pulling Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 31/66] IB/umad: Fix error handling Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 32/66] IB/umad: Fix use-after-free on close Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 33/66] SUNRPC: Fix a module reference leak in svc_handle_xprt Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 34/66] pNFS: Handle allocation errors correctly in filelayout_alloc_layout_hdr() Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 35/66] nfsd4: fix FREE_STATEID lockowner leak Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 36/66] nfsd: getattr for FATTR4_WORD0_FILES_AVAIL needs the statfs buffer Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 37/66] NFS: Dont declare inode uptodate unless all attributes were checked Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 38/66] NFS: Use raw_write_seqcount_begin/end int nfs4_reclaim_open_state Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 39/66] NFS: populate ->net in mount data when remounting Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 40/66] nfs: Fix cache_validity check in nfs_write_pageuptodate() Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 41/66] powerpc/pseries: Fix overwritten PE state Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 42/66] powernv: Fix permissions on sysparam sysfs entries Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 43/66] powerpc/mm: Check paca psize is up to date for huge mappings Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 44/66] powerpc/serial: Use saner flags when creating legacy ports Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 45/66] powerpc: 64bit sendfile is capped at 2GB Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 46/66] powerpc: fix typo CONFIG_PMAC Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 47/66] powerpc/perf: Ensure all EBB register state is cleared on fork() Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 48/66] powerpc: fix typo CONFIG_PPC_CPU Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 49/66] powerpc: Dont setup CPUs with bad status Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 50/66] powerpc: Add AT_HWCAP2 to indicate V.CRYPTO category support Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 51/66] powerpc: Dont skip ePAPR spin-table CPUs Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 52/66] xfs: xfs_readsb needs to check for magic numbers Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 53/66] reiserfs: call truncate_setsize under tailpack mutex Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 54/66] cpufreq: ppc-corenet-cpu-freq: do_div use quotient Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 55/66] cpufreq: unlock when failing cpufreq_update_policy() Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 56/66] MIPS: KVM: Remove redundant NULL checks before kfree() Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 57/66] MIPS: KVM: Fix memory leak on VCPU Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 58/66] ptrace,x86: force IRET path after a ptrace_stop() Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 59/66] lz4: add overrun checks to lz4_uncompress_unknownoutputsize() Greg Kroah-Hartman
2014-07-04 22:14 ` [PATCH 3.15 60/66] Documentation/SubmittingPatches: describe the Fixes: tag Greg Kroah-Hartman
2014-07-04 22:15 ` [PATCH 3.15 61/66] tracing: Try again for saved cmdline if failed due to locking Greg Kroah-Hartman
2014-07-04 22:15 ` [PATCH 3.15 62/66] tracing: Fix syscall_*regfunc() vs copy_process() race Greg Kroah-Hartman
2014-07-04 22:15 ` [PATCH 3.15 63/66] ALSA: usb-audio: Fix races at disconnection and PCM closing Greg Kroah-Hartman
2014-07-04 22:15 ` [PATCH 3.15 64/66] ALSA: hda - hdmi: call overridden init on resume Greg Kroah-Hartman
2014-07-04 22:15 ` [PATCH 3.15 65/66] ALSA: hda - Adjust speaker HPF and add LED support for HP Spectre 13 Greg Kroah-Hartman
2014-07-04 22:15 ` [PATCH 3.15 66/66] ALSA: hda - restore BCLK M/N values when resuming HSW/BDW display controller Greg Kroah-Hartman
2014-07-05 5:48 ` [PATCH 3.15 00/66] 3.15.4-stable review Guenter Roeck
2014-07-05 6:52 ` Satoru Takeuchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140704221423.017141921@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mpatocka@redhat.com \
--cc=nab@linux-iscsi.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).