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 11:54:09 -0400 [thread overview]
Message-ID: <3EC509A1.10503@pobox.com> (raw)
In-Reply-To: <20030516060324.GT812@suse.de>
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.
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).
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."
I did consider hdio_drive_taskfile, but that's more code for less
flexibility, as I see it. In my case specifically, send-scsi-command is
essentially talking directly to the low-level driver's standard code path...
The only downside (AFAICS) is that I need to add maybe 50-100 lines of
code to hdparm. But I think that's a small price to pay if the keeps
the driver much more simple.
Jeff
next prev parent reply other threads:[~2003-05-16 15:41 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 [this message]
2003-05-16 16:05 ` Jens Axboe
2003-05-16 16:30 ` Jeff Garzik
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=3EC509A1.10503@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