From: Luben Tuikov <luben@splentec.com>
To: Oliver Neukum <oliver@neukum.name>
Cc: Alan Stern <stern@rowland.harvard.edu>,
David Brownell <david-b@pacbell.net>,
Matthew Dharm <mdharm-scsi@one-eyed-alien.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: Thu, 23 Jan 2003 14:07:10 -0500 [thread overview]
Message-ID: <3E303D5E.5020000@splentec.com> (raw)
In-Reply-To: 200301231919.40422.oliver@neukum.name
Oliver Neukum wrote:
>
> Very well, so you agree that the SCSI layer should export to the LLDD
> a function to set devices offline?
I've never really disagreed -- simpler transports will make use
of such a function. The important point to note is that the error
return value for simpler and more complicated transports has to
be the same (i.e. ones which know about the device disconnect and
others which send out the CDB and which will return with error).
I forgot to mention this with my previous email: think of a LLDD
more as part of the transport than of SCSI Core.
> Yes, sorry. To be precise, this means that the LLDD has to do nothing
> special, as it has to implement checking for a failing command anyway.
> But it's not entirely the same. If a command cannot be delivered it may or may
> not be appropriate to start error recovery. After the LLDD has told
> the SCSI layer that it has noticed a device going away, there must be no
> error recovery.
Error recovery should not be that complicated for device being disconnected,
just error out all commands new and old -- as I've said so many times.
The command structs will return back to LLDD and all will be good.
(Simple transports.)
More complicated transports will just return Service Delivery Failure.
(See below.)
> Good.
> So the first thing a LLDD has to do after it has learned about a device
> being removed is to have the device block.
``block'' (verb) is such a strong word.
* Simple transports: call scsi_set_device_offline(dev) or something like this.
* More complicated transports: SCSI Core sees Service Response of Service
Delivery Failure and it itself calls scsi_set_device_offline(dev).
scsi_set_device_offline(dev) calls a high-level kernel function to start
higher level things (block queue cut off, etc) which *may* need to be done.
The control path will eventually bubble down to SCSI Core which will
error out already queued commands (unless they've returned already
with the appropriate error code), remove the device, etc, etc, etc.
> 1. set device offline
> But commands may still be in flight.IMHO it is not right to assume that
> all commands now in flight to a device have failed, as some may have
> completed successfully in time, or failed for other reasons than unplugging.
They will just return with ok status and after a certain point in time,
all others will return with the appropriate error -- in which case see above.
> So it should be the LLDD's responsibility to finish the outstanding commands.
LLDD cannot really ``finish'' outstanding commands, it's just a transport
portal.
> Furthermore, there's a window for commands already having passed the check
> for offline but not yet being noticed by the LLDD.
They will return with an appropriate error.
> The simplest solution is to
> use a waiting primitive from RCU. So we are at:
>
> 1. set device offline
> 2. synchronize the kernel
> 3. finish all pending commands
I told you before: 3 starts *before* 2 and 3 is *part* of 2.
Furthermore, after 1 has happened in time, all pending commands
will error out (wrt a time line).
2 is what I call ``higher-level hook'', but it's not really
``synchronization''. Synchronization will take delta-time, it
will not happen instantaneously.
> So far with me?
> The LLDD could now forget about the device and be done with it.
Some LLDD will not have the concept of device -- they'll just
set up the remote procedure call Execute Command and initiate
it, given a target and LUN. Who knows what happens after that?
I mean the command may go through several transports..., the LUN
may get translated a few times, etc.
We have to keep this in mind.
And some other transports will know about devices.
I.e. you have to allow for the possibility of a command
being sent to a non-existent device through LLDD, in which
case the LLDD/transport will have to error it out.
> However there's a problem left. The device may come back.
> What happens if a device with the same ID is reconnected?
--
Luben
next prev parent reply other threads:[~2003-01-23 19:07 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 [this message]
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
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=3E303D5E.5020000@splentec.com \
--to=luben@splentec.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=mdharm-scsi@one-eyed-alien.net \
--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