From: Doug Ledford <dledford@redhat.com>
To: Oliver Neukum <oliver@neukum.name>,
Luben Tuikov <luben@splentec.com>,
Alan Stern <stern@rowland.harvard.edu>,
David Brownell <david-b@pacbell.net>,
Mike Anderson <andmike@us.ibm.com>, Greg KH <greg@kroah.com>,
linux-usb-devel@lists.sourceforge.net,
Linux SCSI list <linux-scsi@vger.kernel.org>
Subject: Re: [linux-usb-devel] Re: [PATCH] USB changes for 2.5.58
Date: Fri, 24 Jan 2003 19:05:29 -0500 [thread overview]
Message-ID: <20030125000529.GE28812@redhat.com> (raw)
In-Reply-To: <20030124152540.B27859@one-eyed-alien.net>
On Fri, Jan 24, 2003 at 03:25:40PM -0800, Matthew Dharm wrote:
> So, if I read this correctly, you're saying that the correct sequence is:
>
> (1) get disconnect notification from USB
> (2) Call scsi_set_device_offline() (must hold host lock for this)
Yes.
> (3) call scsi_done() for all command in queue (max: 1)
Hmmm...only 1? USB limit or driver limit?
> (4) Call scsi_remove_host(), which should now work because no commands are
> outstanding
We may need to add code to scsi_remove_host() to allow it to clean out the
request queue of the device when the device is offline and this call is
made. Just because we returned the 1 command you had outstanding doesn't
mean that there weren't more in the request queue (especially true of hard
disks like my mp3 player). However, once the device is offline, cleaning
out the queue is a known non-blocking operation, it just takes non-0 time
as well. Once the queue is cleaned out, we need to shut it down so that
no more commands can come in to the block level.
> (5) Call scsi_unregister()
>
> And we're done, all structures can be freed. And, as I understand it, the
> following is true:
>
> (a) once (2) is done, no more commands will be queued
To your driver, yes. If Mike makes it clean out and disable the request
queue at the same time, then we could answer this question as yes at the
request queue level as well.
> (b) once (3) is done, (4) is guaranteed to work
No! Remember, command completion is delayed! We have a tasklet that
processes your now complete command, and with that processing comes
marking the device unbusy, which is also required for 4 to work. That's
why I was suggesting waking up the error handler thread and letting it
finish this process off. The error handler thread has the luxury of being
able to wait for the command completion to happen, and in my opinion it's
a slightly better place to do the work of cleaning out the request queue.
> (c) there is nothing the user can do to make this sequence take a long time
True. We need time to do things in our very slightly async way, but the
user isn't able to keep us from completing.
> Tho, this does leave me with a couple of questions:
>
> (i) Doesn't scsi_set_device_offline() work on devices, not hosts? How do I
> map from my host to my device list?
Well, in hosts.c::scsi_remove_host() we do it thusly:
list_for_each_entry(sdev, &shost->my_devices, siblings)
if (scsi_check_device_busy(sdev))
return 1;
> (ii) Do I need to call scsi_set_device_offline() for each device? I
> presume 'yes'.
Yes. As people pointed out to me the reason a USB device is done as a
host is because it very well may *be* a host with several devices behind
it, so it must handle the multiple device scenario correctly and set all
devices offline and clean up after all of them that might be behind this
bridge.
> (iii) What should I shove into the status field of the scsi command before
> I scsi_done() it?
Well, to force an error I always put DID_ERROR into the driver byte of
the result dword, aka:
cmd->result = DID_ERROR << 16;
> Oh, and as for my being a 'prick'.... my big problem is that the documented
> interface is synchronous. Async is fine with me, but up until this e-mail,
> all I've seen is people arguing over what the sequence is, and theoretical
> issues of what users should and should not do. And I also think that a
> large number of hotplugable hosts are going to replicate a whole bunch of
> code to do (2)+(3)+(4) in one, synchronous burst.
Which would be wrong BTW. If you can support multiple devices behind a
bridge then you can't put (2)+(3)+(4) together in one burst. That's why
they aren't that way now. As to the sync vs. async, the scsi mid layer
quit being fully sync during the 2.4 timeframe. When the old error
handling code was dropped from 2.5+, all sync completion code was also
dropped.
> If someone will step forward with a 'yes' or 'no' on this sequence, then
> I'll get it done. If the answer is 'no', then what did I miss?
Just the tasklet completion issue.
--
Doug Ledford <dledford@redhat.com> 919-754-3700 x44233
Red Hat, Inc.
1801 Varsity Dr.
Raleigh, NC 27606
next prev parent reply other threads:[~2003-01-25 0:05 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <10426732153816@kroah.com>
[not found] ` <10426732212871@kroah.com>
[not found] ` <20030116093112.B29001@one-eyed-alien.net>
[not found] ` <20030116173539.GA31235@kroah.com>
2003-01-16 19:43 ` [linux-usb-devel] Re: [PATCH] USB changes for 2.5.58 Matthew Dharm
2003-01-16 19:53 ` Greg KH
[not found] ` <20030116195306.GA32697@kroah.com>
2003-01-16 20:10 ` Linus Torvalds
2003-01-16 20:43 ` greg kh
2003-01-16 21:41 ` Linus Torvalds
2003-01-16 22:51 ` Matthew Dharm
2003-01-16 20:40 ` David Brownell
2003-01-16 20:48 ` Mike Anderson
2003-01-16 23:43 ` Oliver Neukum
2003-01-17 8:50 ` Mike Anderson
2003-01-17 10:55 ` Oliver Neukum
2003-01-17 15:06 ` Alan Stern
2003-01-17 18:54 ` Matthew Dharm
2003-01-17 20:25 ` Mike Anderson
2003-01-17 22:07 ` Oliver Neukum
2003-01-17 20:26 ` [linux-usb-devel] " Oliver Neukum
2003-01-17 20:49 ` Mike Anderson
2003-01-20 17:36 ` Luben Tuikov
2003-01-20 18:23 ` Oliver Neukum
2003-01-20 18:56 ` Luben Tuikov
2003-01-20 19:10 ` [linux-usb-devel] " Oliver Neukum
2003-01-20 19:50 ` David Brownell
2003-01-21 3:31 ` Alan
2003-01-21 7:17 ` Oliver Neukum
2003-01-21 11:57 ` [linux-usb-devel] " Douglas Gilbert
2003-01-21 13:48 ` Oliver Neukum
2003-01-21 18:22 ` Luben Tuikov
2003-01-21 13:30 ` James Bottomley
2003-01-20 20:08 ` David Brownell
2003-01-20 20:48 ` [linux-usb-devel] " Oliver Neukum
2003-01-20 21:24 ` David Brownell
2003-01-20 21:51 ` [linux-usb-devel] " Oliver Neukum
2003-01-20 22:26 ` David Brownell
2003-01-20 23:00 ` Oliver Neukum
2003-01-21 0:44 ` David Brownell
2003-01-21 0:50 ` Oliver Neukum
2003-01-21 18:16 ` Luben Tuikov
2003-01-21 19:00 ` Oliver Neukum
2003-01-21 20:02 ` [linux-usb-devel] " Luben Tuikov
2003-01-21 21:02 ` Alan Stern
2003-01-22 21:50 ` Luben Tuikov
2003-01-22 22:46 ` Oliver Neukum
2003-01-23 17:46 ` Luben Tuikov
2003-01-23 18:19 ` Oliver Neukum
2003-01-23 19:07 ` Luben Tuikov
2003-01-23 19:40 ` Oliver Neukum
2003-01-23 20:28 ` Doug Ledford
2003-01-23 20:59 ` Oliver Neukum
2003-01-23 21:34 ` Doug Ledford
2003-01-23 22:39 ` Oliver Neukum
2003-01-23 23:23 ` Doug Ledford
2003-01-23 23:25 ` Matthew Dharm
2003-01-24 15:34 ` Alan Stern
2003-01-24 16:06 ` Oliver Neukum
2003-01-24 17:58 ` [linux-usb-devel] " Doug Ledford
2003-01-24 19:00 ` Luben Tuikov
2003-01-24 22:23 ` Oliver.Neukum
2003-01-24 19:10 ` Luben Tuikov
2003-01-24 19:56 ` [linux-usb-devel] " Alan Stern
2003-01-24 20:11 ` Luben Tuikov
2003-01-24 21:09 ` Luben Tuikov
2003-01-24 21:55 ` Alan Stern
2003-01-24 22:03 ` Luben Tuikov
2003-01-24 23:21 ` Mike Anderson
2003-01-24 21:48 ` Doug Ledford
2003-01-24 22:59 ` Mike Anderson
2003-01-24 23:17 ` [linux-usb-devel] " Doug Ledford
2003-01-25 0:24 ` Luben Tuikov
2003-01-25 1:35 ` Mike Anderson
2003-01-24 23:25 ` Matthew Dharm
2003-01-25 0:05 ` Doug Ledford [this message]
2003-01-25 0:45 ` Matthew Dharm
2003-01-25 1:07 ` Doug Ledford
2003-02-02 18:13 ` Matthew Dharm
2003-02-02 20:06 ` Matthew Dharm
2003-02-03 17:17 ` Mike Anderson
2003-02-16 21:18 ` Matthew Dharm
2003-02-17 19:37 ` Mike Anderson
2003-02-17 19:51 ` Patrick Mansfield
2003-02-23 7:48 ` Matthew Dharm
2003-02-26 23:37 ` Mike Anderson
2003-02-27 1:10 ` Matthew Dharm
2003-02-27 6:37 ` Mike Anderson
2003-02-27 19:32 ` Matthew Dharm
2003-03-01 1:41 ` Matthew Dharm
2003-02-02 3:49 ` Matthew Dharm
2003-01-25 1:24 ` Luben Tuikov
2003-01-24 0:15 ` Patrick Mansfield
2003-01-24 8:33 ` David Brownell
2003-01-23 20:41 ` A different look at block device hotswap in the Linux kernel Steven Dake
2003-01-23 21:07 ` Matthew Jacob
2003-01-23 21:06 ` Steven Dake
2003-01-23 21:16 ` Matthew Jacob
2003-01-24 0:07 ` Oliver Neukum
2003-01-24 0:21 ` Matthew Jacob
2003-01-24 7:53 ` David Brownell
2003-01-24 15:26 ` Matthew Jacob
2003-01-24 0:54 ` Steven Dake
2003-01-24 2:35 ` [linux-usb-devel] " Matthew Dharm
2003-01-22 21:30 ` [linux-usb-devel] Re: [PATCH] USB changes for 2.5.58 David Brownell
2003-01-20 22:16 ` Luben Tuikov
2003-01-20 22:51 ` David Brownell
2003-01-20 23:27 ` Oliver Neukum
2003-01-22 12:07 Bennie J. Venter
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=20030125000529.GE28812@redhat.com \
--to=dledford@redhat.com \
--cc=andmike@us.ibm.com \
--cc=david-b@pacbell.net \
--cc=greg@kroah.com \
--cc=linux-scsi@vger.kernel.org \
--cc=linux-usb-devel@lists.sourceforge.net \
--cc=luben@splentec.com \
--cc=oliver@neukum.name \
--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