From: Jeff Garzik <jgarzik@pobox.com>
To: Jens Axboe <axboe@suse.de>
Cc: linux-scsi@vger.kernel.org
Subject: Re: "do ata" scsi command?
Date: Fri, 16 May 2003 12:30:45 -0400 [thread overview]
Message-ID: <3EC51235.8090701@pobox.com> (raw)
In-Reply-To: <20030516160502.GE812@suse.de>
Jens Axboe wrote:
> On Fri, May 16 2003, Jeff Garzik wrote:
>
>>Jens Axboe wrote:
>>
>>>On Thu, May 15 2003, Jeff Garzik wrote:
>>>
>>>
>>>>In terms of a userspace interface for my ata-over-scsi gadget, I would
>>>>prefer to use /dev/sg instead of inventing a totally new interface.
>>>>That, in turn, implies a need for a "do ata taskfile" scsi command,
>>>>which is sorta like ATAPI in reverse: we are wrapping a raw ata
>>>>taskfile inside a scsi cdb.
>>>>
>>>>My question is, does an existing standard or spec exist for such an idea?
>>>>
>>>>If not, I'll just roll my own.
>>>
>>>
>>>For ATAPI/SCSI like stuff, you have SG_IO. No need to invent yet another
>>>submission interface for that. For ata, you have HDIO_DRIVE_TASKFILE
>>>which is getting to be sane on the kernel side after Bart cleaned it up.
>>
>>
>>While technically what you say is correct, I think you're missing what
>>I'm aiming for.
>>
>>Think about it this way: The SCSI layer provides two or three ways to
>>send a SCSI command to a target. The driver I'm working on presents all
>>devices as SCSI, be they ATA or ATAPI. And underneath the "scsi
>>presentation layer", you have ATA[PI] taskfiles as the lower layer.
>
>
> I think that way of thinking is screwed. You cannot shove everything
> into a SCSI command, you need a lower level interface for that.
>
>
>>Userspace has easy and obvious access to the presentation layer.
>>But how does one directly access the lower layer?
>>
>>If you like HDIO_DRIVE_TASKFILE, then my preference would be to support
>>that ioctl for sending lower layer commands directly to the device, for
>>both ATA and ATAPI. But I don't like HDIO_DRIVE_TASKFILE in this case
>>:) and here's why:
>>
>>ioctl(2) interface itself is very poor and slow compared to
>>SCSI-generic's mmap(2) interface. Also, if you go back to last year
>>when Linus was describing his ideal drive command submission interface,
>>it purposefully avoided ioctl(2) in favor of a read(2)/write(2)
>>interface -- which can be easily extended in one's mind to mmap(2).
>
>
> Well that's a given, SG_IO ioctl is just one way of doing it. I surely
> wouldn't mind (and have thought about doing myself) binding a given
> device to /dev/sg* (or whatever) and using regular read/write on those
> char devices instead.
>
> It just so happens that the majority of SG_IO uses is cd burning, and
> it's sufficiently fast for that. I can even drive a scsi disk at full
> throttle with basically cpu cost. So it's not that slow. But I do agree
> with the sentiment. Any form of asynch io won't really fly of course,
> and an ioctl interface isn't actually the holy grail :)
>
>
>>So, the goal is to allow efficient userspace access to the taskfile
>>submission/response mechanism in my driver, regardless of whether the
>>attached device is ATA or ATAPI. The solution that requires the least
>>amount of code, both in the kernel and in userspace, is having a "do
>>ata" scsi command. Because send-scsi-command mechanisms are already
>>plentiful in the kernel and userspace, because some of those mechanisms
>>are faster than ioctl(2), and because that's heading towards the "Linus
>>ideal."
>
>
> They are too plentiful...
>
> So make a nicer interface for HDIO_DRIVE_TASKFILE? If you want to add
> Yet Another Command submission interface, you damn well better make it
> the final one!
See, I think about it this way: HDIO_DRIVE_TASKFILE is Yet Another
Interface. If a SCSI driver simply implements ->queuecommand, the
interface doesn't matter! Existing code and interfaces takes care of
the rest.
* If I use HDIO_DRIVE_TASKFILE, that's additional ioctl-handling code in
a SCSI driver to support two command-submission interfaces, instead of one.
* If I create a better-HDIO_DRIVE_TASKFILE, that's design of a new
interface, plus additional handling code in a SCSI driver to support two
command-submission interfaces, instead of one.
* Or, my solution, no additional code, using existing command-submission
interfaces.
So basically my question back to you is, why should I have two separate
command submissions interfaces when one will do? :)
Think about it... the SCSI layer does all this synchronization and
command queueing for us. If the raw taskfile is NOT sent as a SCSI
command, then suddenly there is tons of additional complexity inside the
driver to handle taskfile queueing and synchronization of two ATA
taskfile sources: standard mid-layer stuff, and HDIO_DRIVE_TASKFILE.
> Let me ask you this then, just to be sure. Do you agree that whatever
> interface that takes a scsi command cannot satisfy all your needs? You
No, I don't agree.
Existing interfaces satisfy my needs.
Jeff
next prev parent reply other threads:[~2003-05-16 16:18 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-05-15 23:02 "do ata" scsi command? Jeff Garzik
2003-05-16 6:03 ` Jens Axboe
2003-05-16 15:54 ` Jeff Garzik
2003-05-16 16:05 ` Jens Axboe
2003-05-16 16:30 ` Jeff Garzik [this message]
2003-05-16 16:35 ` Jens Axboe
2003-05-16 16:41 ` Jeff Garzik
2003-05-16 16:43 ` Jens Axboe
2003-05-16 16:46 ` Jeff Garzik
2003-05-17 4:17 ` Douglas Gilbert
2003-05-17 7:49 ` Luben Tuikov
2003-05-16 16:35 ` Jeff Garzik
2003-05-16 16:40 ` Jens Axboe
2003-05-16 16:45 ` Jeff Garzik
2003-05-16 18:37 ` Andries Brouwer
2003-05-16 19:02 ` Luben Tuikov
2003-05-16 18:50 ` Luben Tuikov
2003-05-16 19:31 ` Jeff Garzik
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=3EC51235.8090701@pobox.com \
--to=jgarzik@pobox.com \
--cc=axboe@suse.de \
--cc=linux-scsi@vger.kernel.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