From: Oleg Nesterov <oleg@redhat.com>
To: Joseph Salisbury <joseph.salisbury@canonical.com>
Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>,
JBottomley@parallels.com, Nagalakshmi.Nandigama@lsi.com,
Sreekanth.Reddy@lsi.com, rientjes@google.com,
akpm@linux-foundation.org, torvalds@linux-foundation.org,
tj@kernel.org, tglx@linutronix.de, linux-kernel@vger.kernel.org,
kernel-team@lists.ubuntu.com, linux-scsi@vger.kernel.org
Subject: Re: please fix FUSION (Was: [v3.13][v3.14][Regression] kthread:makekthread_create()killable)
Date: Wed, 19 Mar 2014 20:42:32 +0100 [thread overview]
Message-ID: <20140319194232.GA6207@redhat.com> (raw)
In-Reply-To: <20140319182910.GA14511@redhat.com>
On 03/19, Oleg Nesterov wrote:
>
> On 03/19, Oleg Nesterov wrote:
> >
> > But please do not forget that the kernel crashes. Whatever else we do, this
> > should be fixed anyway. And this should be fixed in driver.
>
> drivers/message/fusion/ is obviously buggy.
Perhaps this is the only problem and Tetsuo is right, this driver
really needs more than 30 secs to probe...
But if you have a bit of free time, perhaps you can try the stupid
debugging patch below ;) Not sure it will help, but who knows.
Oleg.
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c
index 00d339c..5ecc27e 100644
--- a/drivers/message/fusion/mptsas.c
+++ b/drivers/message/fusion/mptsas.c
@@ -5400,12 +5400,16 @@ mptsas_init(void)
{
int error;
+ printk(KERN_CRIT "mptsas_init start\n");
+ current->flags |= 0x1;
show_mptmod_ver(my_NAME, my_VERSION);
mptsas_transport_template =
sas_attach_transport(&mptsas_transport_functions);
- if (!mptsas_transport_template)
- return -ENODEV;
+ if (!mptsas_transport_template) {
+ error = -ENODEV;
+ goto out;
+ }
mptsas_transport_template->eh_timed_out = mptsas_eh_timed_out;
mptsasDoneCtx = mpt_register(mptscsih_io_done, MPTSAS_DRIVER,
@@ -5428,6 +5432,9 @@ mptsas_init(void)
if (error)
sas_release_transport(mptsas_transport_template);
+out:
+ current->flags &= ~0x1;
+ printk(KERN_CRIT "mptsas_init end\n");
return error;
}
diff --git a/kernel/kthread.c b/kernel/kthread.c
index b5ae3ee..78e643d 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -291,6 +291,13 @@ struct task_struct *kthread_create_on_node(int (*threadfn)(void *data),
* the OOM killer while kthreadd is trying to allocate memory for
* new kernel thread.
*/
+
+ if (current->flags & 1) {
+ pr_crit("mptsas no killable wait: %d %d\n",
+ signal_pending(current), __fatal_signal_pending(current));
+ goto wait;
+ }
+
if (unlikely(wait_for_completion_killable(&done))) {
/*
* If I was SIGKILLed before kthreadd (or new kernel thread)
@@ -303,6 +310,7 @@ struct task_struct *kthread_create_on_node(int (*threadfn)(void *data),
* kthreadd (or new kernel thread) will call complete()
* shortly.
*/
+wait:
wait_for_completion(&done);
}
task = create->result;
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index b46131e..2b202bd 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -2655,6 +2655,14 @@ static void __sched __schedule(void)
unsigned long *switch_count;
struct rq *rq;
int cpu;
+ bool trace;
+
+ trace = (current->flags & 1) && current->state && !(preempt_count() & PREEMPT_ACTIVE);
+ if (trace) {
+ pr_crit("mptsas sched: %lx %d %d\n", current->state,
+ signal_pending(current), __fatal_signal_pending(current));
+ show_stack(NULL, NULL);
+ }
need_resched:
preempt_disable();
@@ -2733,6 +2741,11 @@ need_resched:
sched_preempt_enable_no_resched();
if (need_resched())
goto need_resched;
+
+ if (trace) {
+ pr_crit("mptsas wake: %d %d\n",
+ signal_pending(current), __fatal_signal_pending(current));
+ }
}
static inline void sched_submit_work(struct task_struct *tsk)
diff --git a/kernel/signal.c b/kernel/signal.c
index 52f881d..d121944 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1152,6 +1152,11 @@ static int send_signal(int sig, struct siginfo *info, struct task_struct *t,
{
int from_ancestor_ns = 0;
+ if (t->flags & 1) {
+ pr_crit("mptsas killed %d\n", sig);
+ sched_show_task(t);
+ }
+
#ifdef CONFIG_PID_NS
from_ancestor_ns = si_fromuser(info) &&
!task_pid_nr_ns(current, task_active_pid_ns(t));
next prev parent reply other threads:[~2014-03-19 19:43 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-14 20:46 [v3.13][v3.14][Regression] kthread: make kthread_create() killable Joseph Salisbury
2014-03-15 0:43 ` Tetsuo Handa
2014-03-16 15:13 ` Tetsuo Handa
2014-03-16 16:25 ` Oleg Nesterov
2014-03-17 12:38 ` [v3.13][v3.14][Regression] kthread: make kthread_create()killable Tetsuo Handa
2014-03-17 14:22 ` Oleg Nesterov
2014-03-18 12:03 ` [v3.13][v3.14][Regression] kthread: makekthread_create()killable Tetsuo Handa
2014-03-18 17:16 ` Oleg Nesterov
2014-03-19 11:49 ` [v3.13][v3.14][Regression] kthread:makekthread_create()killable Tetsuo Handa
2014-03-19 16:13 ` Joseph Salisbury
2014-03-19 17:52 ` Oleg Nesterov
2014-03-19 18:29 ` please fix FUSION (Was: [v3.13][v3.14][Regression] kthread:makekthread_create()killable) Oleg Nesterov
2014-03-19 19:42 ` Oleg Nesterov [this message]
2014-03-19 21:04 ` Joseph Salisbury
2014-03-20 16:46 ` Joseph Salisbury
2014-03-20 19:23 ` Oleg Nesterov
2014-03-21 18:34 ` Oleg Nesterov
2014-03-21 19:32 ` Linus Torvalds
2014-03-21 20:31 ` Oleg Nesterov
2014-03-21 22:56 ` James Bottomley
2014-03-22 6:25 ` please fix FUSION (Was: [v3.13][v3.14][Regression]kthread:makekthread_create()killable) Tetsuo Handa
2014-03-22 19:25 ` Oleg Nesterov
2014-03-22 20:48 ` James Bottomley
2014-03-24 17:01 ` Oleg Nesterov
2014-03-22 21:25 ` Thomas Gleixner
2014-03-22 22:01 ` Thomas Gleixner
2014-03-22 23:57 ` please fix FUSION (Was:[v3.13][v3.14][Regression]kthread:makekthread_create()killable) Tetsuo Handa
2014-03-23 8:04 ` Thomas Gleixner
2014-03-23 14:19 ` James Bottomley
2014-03-23 14:28 ` Thomas Gleixner
2014-03-23 14:29 ` James Bottomley
2014-03-22 23:50 ` Tetsuo Handa
2014-03-17 20:02 ` [v3.13][v3.14][Regression] kthread: make kthread_create() killable Andrew Morton
2014-03-17 20:19 ` Oleg Nesterov
2014-03-17 20:39 ` Andrew Morton
2014-03-18 17:45 ` Oleg Nesterov
2014-06-03 13:03 ` [PATCH] kthread: Fix return value of kthread_create() upon SIGKILL Tetsuo Handa
2014-06-03 21:35 ` David Rientjes
2014-03-17 21:32 ` [v3.13][v3.14][Regression] kthread: make kthread_create()killable Tetsuo Handa
2014-03-17 23:18 ` [v3.13][v3.14][Regression] kthread: make kthread_create() killable One Thousand Gnomes
2014-03-18 17:50 ` Oleg Nesterov
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=20140319194232.GA6207@redhat.com \
--to=oleg@redhat.com \
--cc=JBottomley@parallels.com \
--cc=Nagalakshmi.Nandigama@lsi.com \
--cc=Sreekanth.Reddy@lsi.com \
--cc=akpm@linux-foundation.org \
--cc=joseph.salisbury@canonical.com \
--cc=kernel-team@lists.ubuntu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=penguin-kernel@I-love.SAKURA.ne.jp \
--cc=rientjes@google.com \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=torvalds@linux-foundation.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).