From: Matthew Wilcox <willy@linux.intel.com>
To: "Desai, Kashyap" <Kashyap.Desai@lsi.com>
Cc: Matthew Wilcox <matthew@wil.cx>,
"linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>,
DL-MPT Fusion Linux <DL-MPTFusionLinux@lsi.com>,
"nab@linux-iscsi.org" <nab@linux-iscsi.org>,
Doug Gilbert <dgilbert@interlog.com>
Subject: Re: [PATCH] mpt2sas: Remove queuecommand wrapper
Date: Tue, 5 Jul 2011 16:24:53 -0400 [thread overview]
Message-ID: <20110705202453.GC4061@linux.intel.com> (raw)
In-Reply-To: <B2FD678A64EAAD45B089B123FDFC3ED70157FE2667@inbmail01.lsi.com>
On Tue, Jul 05, 2011 at 10:48:00PM +0530, Desai, Kashyap wrote:
> > -----Original Message-----
> > From: Matthew Wilcox [mailto:willy@linux.intel.com]
> > Sent: Tuesday, July 05, 2011 8:52 PM
> > To: Desai, Kashyap
> > Cc: Matthew Wilcox; linux-scsi@vger.kernel.org; DL-MPT Fusion Linux;
> > nab@linux-iscsi.org
> > Subject: Re: [PATCH] mpt2sas: Remove queuecommand wrapper
> > void scsi_eh_wakeup(struct Scsi_Host *shost)
> > {
> > if (shost->host_busy == shost->host_failed) {
>
> I think you are right here.
>
> I did below experiment.
> Since now host_lock is removed from dispatch() callback.
> I added sleep() inside scsih_qcmd().. Just to mimic preemption. And called Host reset using
> "Sg_reset -h" at the sametime when driver is sleeping inside qcmd(). I see the kernel crash due to invalid scsi command pointer access after driver comes out from sleep().
OK, but I don't think we've introduced a new race here, just expanded
the window.
If you follow the path down from userspace, we get to
scsi_nonblockable_ioctl() (doesn't take the host_lock), then
scsi_reset_provider (which takes and releases the host_lock to
set tmf_in_progress), then scsi_try_host_reset() which calls
eh_host_reset_handler() without holding the host_lock.
So it's entirely possible to hit the same race on an SMP machine already
as there's nothing to synchronise the eh_host_reset_handler call with
queuecommand.
I think someone who uses sg_reset ought to be aware of the possibility
that they can trash their system. Doug, what do you think?
> As you said, due to actual Error handling will not wake up, but if user/customer do testing using sg_tools
> They can kick off Host reset on demand.
>
> What is your input on my above test case/observation ?
>
> > trace_scsi_eh_wakeup(shost);
> > wake_up_process(shost->ehandler);
> >
> > So the SCSI error handler doesn't run until host_busy == host_failed.
> > host_busy is incremented in scsi_request_fn() (before scsi_dispatch_cmd
> > is called). host_failed is incremented in scsi_eh_scmd_add(). So after
> > a command has been issued, it prevents the EH from running until it
> > too fails. That means queuecommand cannot be running at the same time
> > as the EH.
> >
> > That's documented in Documentation/scsi/scsi_eh.txt section [1-3].
next prev parent reply other threads:[~2011-07-05 20:24 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-04 19:27 [PATCH] mpt2sas: Remove queuecommand wrapper Matthew Wilcox
2011-07-05 4:46 ` Desai, Kashyap
2011-07-05 14:14 ` Matthew Wilcox
2011-07-05 14:55 ` Desai, Kashyap
2011-07-05 15:21 ` Matthew Wilcox
2011-07-05 17:18 ` Desai, Kashyap
2011-07-05 20:24 ` Matthew Wilcox [this message]
2011-07-06 18:00 ` Dan Williams
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=20110705202453.GC4061@linux.intel.com \
--to=willy@linux.intel.com \
--cc=DL-MPTFusionLinux@lsi.com \
--cc=Kashyap.Desai@lsi.com \
--cc=dgilbert@interlog.com \
--cc=linux-scsi@vger.kernel.org \
--cc=matthew@wil.cx \
--cc=nab@linux-iscsi.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.