From: Jeff Garzik <jgarzik@pobox.com>
To: andrew.patterson@hp.com
Cc: Luben Tuikov <luben_tuikov@adaptec.com>,
Christoph Hellwig <hch@lst.de>,
"Moore, Eric Dean" <Eric.Moore@lsil.com>,
jejb@steeleye.com, linux-scsi@vger.kernel.org,
Linux Kernel <linux-kernel@vger.kernel.org>,
Linus Torvalds <torvalds@osdl.org>
Subject: ioctls, etc. (was Re: [PATCH 1/4] sas: add flag for locally attached PHYs)
Date: Thu, 20 Oct 2005 20:46:11 -0400 [thread overview]
Message-ID: <43583A53.2090904@pobox.com> (raw)
In-Reply-To: <1129852879.30258.137.camel@bluto.andrew>
Andrew Patterson wrote:
> I believe there is a common understanding that IOCTL's are bad and
> should be avoided. See:
>
> http://lkml.org/lkml/2001/5/20/81
Yep. Linus's rant here reflects not only his opinion, but general
consensus, I feel.
> Yes, CSMI should have had more Linux input when it was developed. The
> no-new IOCTL policy certainly came as a surprise to the authors. Still,
> there doesn't seem to be any other usable cross-platform interface that
> is acceptable to the linux community (or at least to Christoph)'s corner
Beyond Linus's rant, ioctls have a practical limitation, too: because
they are untyped, we have to deal with stuff like the 32<->64 compat
ioctl thunking.
Consider what an ioctl is, overall: a domain-specific "do this
operation" interface. Which, further, is nothing but a wrapping of a
"send message" + "receive response" interface. There are several ways
to do this in Linux:
* block driver. a block driver is nothing but a message queue. This is
why James has suggested implementing SMP as a block driver. People get
stuck into thinking "block driver == block device", which is wrong. The
Linux block layer is nothing but a message queueing interface.
* netlink. You connect to <an object> and send/receive messages. Not
strictly limited to networking, as this is used in some areas of the
kernel now for generic event delivery.
* char driver. Poor man's netlink. Unless its done right, it suffers
from the same binary problems as ioctls. I don't recommend this path.
* sysfs. This has no inherent message/queue properties by itself, and
is less structured than blockdrvr or netlink, so dealing with more than
one outstanding operation at a time requires some coding.
sysfs's attractiveness is in its ease of use. It works with standard
Unix filesystem tools. You don't need to use a library to read
information, cat(1) often suffices. sysfs, since its normal ASCII
(UTF8), also has none of the annoying 32<->64 compatibility issues that
ioctls suffer from.
Which is best? I don't have a good answer. Largely depends on the
situation, particularly queueing needs. Networking and storage are
rapidly converging into "messaging", so the situation is highly fluid in
any case. Coming from a networking background, I sorta lean towards the
solution noone has attempted yet: netlink.
> of it). My personal preference is to hide this stuff in a library, so
> the kernel implementation is hidden. But even a library needs an
> underlying kernel implementation.
Strongly agree here. libc shelters userspace from [most] kernel
changes, by exporting syscalls in a standard manner. alsa-lib was
created to shelter userspace from current and future changes in the
kernel audio interface. libsdi is quite reasonable.
Jeff
next prev parent reply other threads:[~2005-10-21 0:46 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-10-20 15:25 [PATCH 1/4] sas: add flag for locally attached PHYs Moore, Eric Dean
2005-10-20 15:55 ` Luben Tuikov
2005-10-20 16:01 ` Christoph Hellwig
2005-10-20 16:51 ` Luben Tuikov
2005-10-20 17:03 ` Christoph Hellwig
2005-10-20 17:22 ` Arjan van de Ven
2005-10-20 20:10 ` Luben Tuikov
2005-10-21 8:16 ` Arjan van de Ven
2005-10-20 20:02 ` Luben Tuikov
2005-10-21 0:01 ` Andrew Patterson
2005-10-21 0:46 ` Jeff Garzik [this message]
2005-10-21 5:09 ` ioctls, etc. (was Re: [PATCH 1/4] sas: add flag for locally attached PHYs) Mike Christie
2005-10-21 5:41 ` Douglas Gilbert
2005-10-21 6:19 ` Jeff Garzik
2005-10-21 18:37 ` Luben Tuikov
2005-10-21 17:48 ` Luben Tuikov
2005-10-21 18:04 ` Christoph Hellwig
2005-10-21 18:12 ` Luben Tuikov
2005-10-21 18:20 ` Matthew Wilcox
2005-10-22 2:30 ` Douglas Gilbert
2005-10-22 2:54 ` Jeff Garzik
2005-10-22 3:53 ` Jeff Garzik
2005-10-22 17:14 ` Luben Tuikov
2005-10-22 17:49 ` Francois Romieu
2005-10-22 16:51 ` Luben Tuikov
2005-10-21 18:18 ` Jeff Garzik
2005-10-21 18:50 ` Luben Tuikov
2005-10-21 18:54 ` Jeff Garzik
2005-10-21 19:13 ` Luben Tuikov
2005-10-21 19:23 ` Jeff Garzik
2005-10-21 22:20 ` Stefan Richter
2005-10-21 19:22 ` Luben Tuikov
2005-10-21 19:39 ` Jeff Garzik
2005-10-21 20:41 ` Luben Tuikov
2005-10-21 21:12 ` Jeff Garzik
2005-10-21 21:24 ` Luben Tuikov
2005-10-21 21:41 ` Jeff Garzik
2005-10-21 22:14 ` Luben Tuikov
2005-10-21 22:43 ` Jeff Garzik
2005-10-22 9:26 ` Stefan Richter
2005-10-22 17:23 ` Luben Tuikov
2005-10-22 10:42 ` Stefan Richter
2005-10-22 10:58 ` Christoph Hellwig
2005-10-22 15:28 ` Sergey Panov
2005-10-22 17:19 ` Christoph Hellwig
2005-10-22 17:38 ` Sergey Panov
2005-10-24 15:18 ` Luben Tuikov
2005-10-22 18:27 ` Alan Cox
2005-10-24 13:51 ` Luben Tuikov
2005-10-24 15:41 ` Alan Cox
2005-10-24 15:14 ` Luben Tuikov
2005-10-24 15:59 ` Regala
2005-10-24 16:03 ` Regala
2005-10-24 16:13 ` Luben Tuikov
2005-10-24 16:04 ` Regala
2005-10-22 17:30 ` Luben Tuikov
2005-10-22 18:19 ` Jeff Garzik
2005-10-22 17:49 ` Stefan Richter
2005-10-24 22:09 ` ioctls, etc. (was Re: [PATCH 1/4] sas: add flag for locally attachedPHYs) David Lang
2005-10-24 23:09 ` Stefan Richter
2005-10-22 11:12 ` David Lang
2005-10-22 17:39 ` Luben Tuikov
2005-10-22 17:41 ` Stefan Richter
2005-10-22 17:51 ` Christoph Hellwig
2005-10-22 18:21 ` Stefan Richter
2005-10-22 18:39 ` Sergey Panov
2005-10-22 13:27 ` ioctls, etc. (was Re: [PATCH 1/4] sas: add flag for locally attached PHYs) Stefan Richter
2005-10-22 16:09 ` Luben Tuikov
2005-10-21 19:41 ` Matthew Wilcox
2005-10-21 19:48 ` Luben Tuikov
2005-10-21 19:54 ` Matthew Wilcox
2005-10-21 20:05 ` Luben Tuikov
2005-10-21 19:46 ` Arjan van de Ven
2005-10-21 19:50 ` Luben Tuikov
2005-10-21 9:06 ` [PATCH 1/4] sas: add flag for locally attached PHYs Arjan van de Ven
2005-10-21 17:05 ` Andrew Patterson
2005-10-21 17:18 ` Arjan van de Ven
2005-10-21 18:57 ` Luben Tuikov
2005-10-21 17:32 ` Luben Tuikov
2005-10-21 1:50 ` Douglas Gilbert
2005-10-21 2:16 ` Jeff Garzik
2005-10-21 3:25 ` Douglas Gilbert
2005-10-21 18:04 ` Luben Tuikov
-- strict thread matches above, loose matches on Subject: below --
2005-10-21 20:31 ioctls, etc. (was Re: [PATCH 1/4] sas: add flag for locally attached PHYs) Salyzyn, Mark
2005-10-21 20:31 ` Salyzyn, Mark
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=43583A53.2090904@pobox.com \
--to=jgarzik@pobox.com \
--cc=Eric.Moore@lsil.com \
--cc=andrew.patterson@hp.com \
--cc=hch@lst.de \
--cc=jejb@steeleye.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=luben_tuikov@adaptec.com \
--cc=torvalds@osdl.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.