From: Mike Anderson <andmike@us.ibm.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: Alan Stern <stern@rowland.harvard.edu>,
SCSI development list <linux-scsi@vger.kernel.org>
Subject: Re: Suggestion for aiding debugging of host removal
Date: Wed, 10 Dec 2003 23:48:28 -0800 [thread overview]
Message-ID: <20031211074827.GA3076@beaverton.ibm.com> (raw)
In-Reply-To: <20031210151456.A2927@infradead.org>
Christoph Hellwig [hch@infradead.org] wrote:
> On Wed, Dec 10, 2003 at 10:02:22AM -0500, Alan Stern wrote:
> > Mike:
> >
> > I've got a question about host removal. Once scsi_remove_host() has
> > returned, the host driver's module is free to unload from memory (assuming
> > the module's reference count is 0, which it normally is). Hence it is a
> > mistake to access the host template in any way after that time.
Normally it would not be zero on the return from scsi_remove_host. It
would not go to zero until scsi_host_put is called. If the scsi_host_put
is the last ref then prior to the returning of the scsi_host_put
scsi_host_dev_release would have been called. If it is not then there
must of been a open on a device outstanding (which would keep a rmmod
from being called, but would allow hotplug and unexpectged disconnects).
When the device ref count drops this will cause the module count to drop
and allow the module to be removed. We may want to reorder our
scsi_device_put calls to module_put and put_device, but I do not know if
that would prevent any races.
> >
> > But it looks like scsi_host_dev_release() can be called after
> > scsi_remove_host() has returned, and it uses shost->hostt. There may be
> > other uses as well.
> >
> > Would it help flush out such illegal accesses if at some appropriate point
> > shost->hostt was set to NULL, maybe near the end of scsi_remove_host()?
If we wanted to set this to something to catch illegal access it might
be good to set hostt to a fake hostt that did a WARN_ON so that it would
not take the system down.
>
> In fact that's a bug in the current scsi_host lifetime handling - before
> the driver can leave it's upper layer ->remove function we need to wait
> to the host refcount to become zero, similar to what free_netdev does.
>
> I'll see whether I can come up with a fix.
Unless I missing something I do not see any interlock / wait in free_netdev
(in looking at test11).
Currently the host refcount will not go to zero until the scsi_host_put
is made from the LLDD post the return of the scsi_remove_host call.
While it is valid to sleep in the remove call and we could reorder the
scsi_host_put, I thought the previous goal was to not have an unbounded
time in scsi_remove_host. I thought we where trying to allow the host to
cleanup fast and if user space wanted to take time we would allow that
to happen, but just not send any commands to the LLDD.
-andmike
--
Michael Anderson
andmike@us.ibm.com
next prev parent reply other threads:[~2003-12-11 7:45 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20030619213109.GB5644@kroah.com>
2003-06-20 20:05 ` Host drivers and conversion of SCSI to the driver model Alan Stern
2003-06-20 21:07 ` Mike Anderson
2003-06-23 14:57 ` Alan Stern
2003-06-27 10:03 ` Christoph Hellwig
2003-06-27 17:56 ` Alan Stern
2003-06-27 18:04 ` Christoph Hellwig
2003-06-27 19:23 ` Mike Anderson
2003-06-28 8:34 ` Christoph Hellwig
2003-06-28 15:08 ` Jeff Garzik
2003-06-28 15:12 ` Christoph Hellwig
2003-07-03 15:15 ` Alan Stern
2003-07-06 16:04 ` Christoph Hellwig
2003-07-03 21:02 ` scsi_forget_host() and scsi_remove_device() Alan Stern
2003-07-03 22:19 ` Mike Anderson
2003-07-04 14:16 ` Alan Stern
2003-07-04 19:36 ` Alan Stern
2003-07-04 19:54 ` Matthew Dharm
2003-07-05 14:11 ` Alan Stern
2003-07-05 16:25 ` Matthew Dharm
2003-07-06 16:13 ` Christoph Hellwig
2003-07-07 15:19 ` PATCH: (as54) Fix hot-unplugging for sr.c Alan Stern
2003-07-08 22:29 ` Mike Anderson
2003-07-09 14:04 ` Alan Stern
2003-07-09 14:44 ` Mike Anderson
2003-07-09 16:02 ` Alan Stern
2003-07-31 19:38 ` PATCH: (as33e) Fix removal of /proc/scsi/hostdir on hot-unplug Alan Stern
2003-08-01 20:03 ` Mike Anderson
2003-08-15 20:05 ` PATCH: (as84) Fix my earlier scsi procdir patch Alan Stern
2003-09-16 14:50 ` PATCH: (as84) Small fixup for SCSI proc code Alan Stern
2003-10-16 21:09 ` Race in removal of host class device attribute file Alan Stern
2003-10-16 22:47 ` Mike Anderson
2003-10-17 12:18 ` Alan Stern
2003-10-17 12:30 ` Christoph Hellwig
2003-12-10 15:02 ` Suggestion for aiding debugging of host removal Alan Stern
2003-12-10 15:14 ` Christoph Hellwig
2003-12-11 4:16 ` DMA Timeout with Promise S150TX4 and 2.6.0-test11-bk8 Paul
2003-12-11 7:48 ` Mike Anderson [this message]
2003-12-11 11:39 ` Suggestion for aiding debugging of host removal Christoph Hellwig
2003-12-11 15:14 ` Alan Stern
2003-07-06 16:11 ` scsi_forget_host() and scsi_remove_device() Christoph Hellwig
2003-07-07 16:06 ` Alan Stern
2003-07-03 20:20 ` SCSI documentation in scsi_mid_low_api.txt Alan Stern
2003-07-03 20:42 ` aic7xxx driver schedules() while holding spinlock Tony Battersby
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=20031211074827.GA3076@beaverton.ibm.com \
--to=andmike@us.ibm.com \
--cc=hch@infradead.org \
--cc=linux-scsi@vger.kernel.org \
--cc=stern@rowland.harvard.edu \
/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