public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Daniel Phillips <phillips@bonn-fries.net>
To: Edgar Toernig <froese@gmx.de>
Cc: Oliver Xymoron <oxymoron@waste.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	linux-fsdevel@vger.kernel.org
Subject: Re: Why side-effects on open(2) are evil. (was Re: [RFD w/info-PATCH]device arguments from lookup)
Date: Wed, 23 May 2001 15:50:39 +0200	[thread overview]
Message-ID: <0105231550390K.06233@starship> (raw)
In-Reply-To: <Pine.LNX.4.30.0105220957400.19818-100000@waste.org> <0105221851200C.06233@starship> <3B0B3A4C.FD7143F9@gmx.de>
In-Reply-To: <3B0B3A4C.FD7143F9@gmx.de>

On Wednesday 23 May 2001 06:19, Edgar Toernig wrote:
> Daniel Phillips wrote:
> > On Tuesday 22 May 2001 17:24, Oliver Xymoron wrote:
> > > On Mon, 21 May 2001, Daniel Phillips wrote:
> > > > On Monday 21 May 2001 19:16, Oliver Xymoron wrote:
> > > > > What I'd like to see:
> > > > >
> > > > > - An interface for registering an array of related devices
> > > > > (almost always two: raw and ctl) and their legacy device
> > > > > numbers with a single userspace callout that does whatever
> > > > > /dev/ creation needs to be done. Thus, naming and permissions
> > > > > live in user space. No "device node is also a directory"
> > > > > weirdness...
> > > >
> > > > Could you be specific about what is weird about it?
> > >
> > > *boggle*
> > >
> > >[general sense of unease]
>
> I fully agree with Oliver.  It's an abomination.

We are, or at least, I am, investigating this question purely on
technical grounds - name calling is a noop.  I'd be happy to find a
real reason why this is a bad idea but so far none has been
presented.

Don't get me wrong, the fact that people I respect have reservations
about the idea does mean something to me, but this still needs to be
investigated properly.  Now on to the technical content...

> > > I don't think it's likely to be even workable. Just consider the
> > > directory entry for a moment - is it going to be marked d or
> > > [cb]?
> >
> > It's going to be marked 'd', it's a directory, not a file.
>
> Aha.  So you lose the S_ISCHR/BLK attribute.

Readdir fills in a directory type, so ls sees it as a directory and does
the right thing.  On the other hand, we know we're on a device 
filesystem so we will next open the name as a regular file, and find
ISCHR or ISBLK: good.

The rule for this filesystem is: if you open with O_DIRECTORY then
directory operations are permitted, nothing else.  If you open without
O_DIRECTORY then directory operations are forbidden (as
usual) and normal device semantics apply.

If there is weirdness anywhere, it's right here with this rule.  The
question is: what if anything breaks?

> > > If it doesn't have the directory bit set, Midnight commander
> > > won't let me look at it, and I wouldn't blame cd or ls for
> > > complaining. If it does have the 'd' bit set, I wouldn't blame
> > > cp, tar, find, or a million other programs if they did the wrong
> > > thing. They've had 30 years to expect that files aren't
> > > directories. They're going to act weird.
> >
> > No problem, it's a directory.
>
> Directories are not allowed to be read from/written to.  The VFS may
> support it, but it's not (current) UNIX.

Here, we obey this rule: if you open it with O_DIRECTORY then you
can't read from or write to it.

> > > Linus has been kicking this idea around for a couple years now
> > > and it's still a cute solution looking for a problem. It just
> > > doesn't belong in UNIX.
> >
> > Hmm, ok, do we still have any *technical* reasons?
>
> So with your definition, I have a fs-object that is marked as a
> directory but opening it opens a device.  Pretty nice..

No, you have to open it without O_DIRECTORY to get your device
fd handle.

> How I'm supposed to list it's contents?  open+readdir?

Nothing breaks here, ls works as it always did.

This is what ls does:

open("foobar", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
fcntl64(0x3, 0x2, 0x1, 0x2)             = -1 ENOSYS (Function not implemented)
fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
brk(0x805b000)                          = 0x805b000
getdents64(0x3, 0x8058270, 0x1000, 0x26) = -1 ENOSYS (Function not implemented)
getdents(3, /* 2 entries */, 2980)      = 28
getdents(3, /* 0 entries */, 2980)      = 0
close(3)                                = 0

Note that ls doesn't do anything as inconvenient as opening 
foobar as a normal file first, expecting that operation to fail.

> But the open has nasty side effects.
> So you have a directory that you are not allowed
> to list (because of the possible side effects) but is allowed to be
> read from/written to maybe even issue ioctls to?. 

No, you would get side effects only if you open as a regular file.
I'd agree that that sucks, but that's not what we're trying to fix
just now.

> And you call that sane???

I would hope it seems saner now, after the clarification.
Please, if you know something that actually breaks, tell me.

--
Daniel

  parent reply	other threads:[~2001-05-23 13:49 UTC|newest]

Thread overview: 161+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-05-19  6:23 [RFD w/info-PATCH] device arguments from lookup, partion code in userspace Ben LaHaise
2001-05-19  6:57 ` [RFD w/info-PATCH] device arguments from lookup, partion code inuserspace Andrew Clausen
2001-05-19  7:04   ` Alexander Viro
2001-05-19  7:23     ` Andrew Clausen
2001-05-19  8:30       ` Alexander Viro
2001-05-19 10:13         ` Andrew Clausen
2001-05-19 14:02         ` [RFD w/info-PATCH] device arguments from lookup, partion code Alan Cox
2001-05-19 16:48           ` Erik Mouw
2001-05-19 17:45             ` Aaron Lehmann
2001-05-19 19:38               ` Erik Mouw
2001-05-19 20:53                 ` Steven Walter
2001-05-19 18:51           ` Richard Gooch
2001-05-20  2:18             ` Matthew Wilcox
2001-05-20  2:22               ` Richard Gooch
2001-05-20  2:34                 ` Matthew Wilcox
2001-05-20  2:48                   ` Richard Gooch
2001-05-20  3:26                     ` Linus Torvalds
2001-05-20 10:23                       ` Russell King
2001-05-20 10:35                         ` Alexander Viro
2001-05-20 18:46                         ` Linus Torvalds
2001-05-20 18:57                           ` Russell King
2001-05-20 19:10                             ` Linus Torvalds
2001-05-20 19:42                               ` Alexander Viro
2001-05-20 20:07                                 ` Alan Cox
2001-05-20 20:33                                   ` Alexander Viro
2001-05-20 23:59                                   ` Paul Fulghum
2001-05-21  0:36                                     ` Alexander Viro
2001-05-21  3:08                                       ` Paul Fulghum
2001-05-20 20:07                                 ` Alan Cox
2001-05-20 23:46                                 ` Ingo Molnar
2001-05-21  0:32                                   ` Alexander Viro
2001-05-21  3:12                                   ` Linus Torvalds
2001-05-21 19:32                                     ` Kai Henningsen
2001-05-23  1:15                                     ` Albert D. Cahalan
2001-05-20  2:36                 ` Alexander Viro
2001-05-20  2:51                   ` Richard Gooch
2001-05-20 21:13                     ` Pavel Machek
2001-05-21 20:20                       ` Alan Cox
2001-05-21 20:41                         ` Alexander Viro
2001-05-21 21:29                           ` Alan Cox
2001-05-21 21:51                             ` Alexander Viro
2001-05-21 21:56                               ` Alan Cox
2001-05-21 22:10                                 ` Linus Torvalds
2001-05-21 22:22                                   ` Alexander Viro
2001-05-22  2:28                                     ` Paul Mackerras
2001-05-22 15:41                                     ` Oliver Xymoron
2001-05-22 13:33                                   ` Jan Harkes
2001-05-22 16:30                                     ` Linus Torvalds
2001-05-22  0:22                               ` Ingo Oeser
2001-05-22  0:57                                 ` Matthew Wilcox
2001-05-22  1:13                                   ` Linus Torvalds
2001-05-22  1:18                                     ` Matthew Wilcox
2001-05-22  7:49                                       ` Alan Cox
2001-05-22 15:31                                         ` Matthew Wilcox
2001-05-22 15:31                                           ` Alan Cox
2001-05-22 15:38                                             ` Matthew Wilcox
2001-05-22 15:42                                               ` Alan Cox
2001-05-20  2:31             ` Alexander Viro
2001-05-20 16:57             ` David Woodhouse
2001-05-20 19:02               ` Linus Torvalds
2001-05-20 19:11                 ` Alexander Viro
2001-05-20 19:18                   ` Matthew Wilcox
2001-05-20 19:24                     ` Alexander Viro
2001-05-20 19:34                       ` Linus Torvalds
2001-05-20 19:27                   ` Linus Torvalds
2001-05-20 19:33                     ` Alexander Viro
2001-05-20 19:38                       ` Linus Torvalds
2001-05-20 19:57                 ` David Woodhouse
2001-05-21 13:57                 ` Ingo Oeser
2001-05-19  9:11     ` [RFD w/info-PATCH] device arguments from lookup, partion code inuserspace Andrew Morton
2001-05-19  9:20       ` Alexander Viro
2001-05-19  7:58   ` Ben LaHaise
2001-05-19  8:10     ` Alexander Viro
2001-05-19  8:16       ` Ben LaHaise
2001-05-19  8:32         ` Alexander Viro
2001-05-19  9:42 ` [RFD w/info-PATCH] device arguments from lookup, partion code in userspace Christer Weinigel
2001-05-19  9:51 ` Christer Weinigel
2001-05-19 11:37 ` Eric W. Biederman
2001-05-19 14:25   ` Daniel Phillips
2001-05-21  8:14     ` Lars Marowsky-Bree
2001-05-22  9:07       ` Daniel Phillips
2001-05-19 13:53 ` Daniel Phillips
2001-05-19 13:57 ` Why side-effects on open(2) are evil. (was Re: [RFD w/info-PATCH] device arguments from lookup) Alexander Viro
2001-05-19 15:10   ` Why side-effects on open(2) are evil. (was Re: [RFD w/info-PATCH]device " Abramo Bagnara
2001-05-19 15:18     ` Alexander Viro
2001-05-19 16:01     ` Willem Konynenberg
2001-05-20 20:52       ` Pavel Machek
2001-05-20 20:53       ` Pavel Machek
2001-05-19 18:13   ` Why side-effects on open(2) are evil. (was Re: [RFD w/info-PATCH] device " Linus Torvalds
2001-05-19 23:19     ` Alexander Viro
2001-05-19 23:31       ` Why side-effects on open(2) are evil. (was Re: [RFD w/info-PATCH]device " Jeff Garzik
2001-05-19 23:32         ` Jeff Garzik
2001-05-19 23:39         ` Alexander Viro
2001-05-20 15:47           ` F_CTRLFD (was Re: Why side-effects on open(2) are evil.) Edgar Toernig
2001-05-20 16:20             ` Alexander Viro
2001-05-20 19:01               ` Edgar Toernig
2001-05-20 19:30                 ` Alexander Viro
2001-05-21 17:16           ` Why side-effects on open(2) are evil. (was Re: [RFD w/info-PATCH]device arguments from lookup) Oliver Xymoron
2001-05-21 16:26             ` David Lang
2001-05-21 18:04               ` Oliver Xymoron
2001-05-21 20:14             ` Daniel Phillips
2001-05-22 15:24               ` Oliver Xymoron
2001-05-22 16:51                 ` Daniel Phillips
2001-05-22 17:49                   ` Oliver Xymoron
2001-05-22 20:22                     ` Daniel Phillips
2001-05-23  4:19                   ` Edgar Toernig
2001-05-23  4:50                     ` Alexander Viro
2001-05-23 13:50                     ` Daniel Phillips
2001-05-23 13:50                     ` Daniel Phillips [this message]
2001-05-23 15:58                       ` Oliver Xymoron
2001-05-24  0:23                       ` Edgar Toernig
2001-05-24  7:47                         ` Marko Kreen
2001-05-24 14:39                           ` Oliver Xymoron
2001-05-24 15:20                             ` CHR/BLK needed? was: Re: Why side-effects on open Marko Kreen
2001-05-24 17:12                             ` Why side-effects on open(2) are evil. (was Re: [RFD w/info-PATCH]device Albert D. Cahalan
2001-05-24 17:25                         ` Why side-effects on open(2) are evil. (was Re: [RFD w/info-PATCH]device arguments from lookup) Daniel Phillips
2001-05-24 20:59                           ` Edgar Toernig
2001-05-24 21:26                             ` Alexander Viro
2001-05-25  1:03                               ` Daniel Phillips
2001-05-25 11:00                             ` Daniel Phillips
2001-05-26  3:07                               ` Edgar Toernig
2001-05-26 22:36                                 ` Daniel Phillips
2001-05-27 13:32                                   ` Edgar Toernig
2001-05-27 20:40                                     ` Ben LaHaise
2001-05-27 20:45                                     ` Daniel Phillips
2001-05-27 21:50                                       ` Marko Kreen
2001-05-28  1:26                                       ` Horst von Brand
2001-05-29 10:54                                         ` Daniel Phillips
2001-05-29 13:54                                           ` Horst von Brand
2001-05-19 23:52   ` Edgar Toernig
2001-05-20  0:18     ` Alexander Viro
2001-05-20  0:32       ` Linus Torvalds
2001-05-20  0:52         ` Jeff Garzik
2001-05-20  1:03         ` Jeff Garzik
2001-05-20 19:41           ` Why side-effects on open(2) are evil. (was Re: [RFD Alan Cox
2001-05-21  9:45           ` Why side-effects on open(2) are evil. (was Re: [RFD w/info-PATCH]device arguments from lookup) Andrew Clausen
2001-05-21 17:22           ` Oliver Xymoron
2001-05-22 18:53           ` Andreas Dilger
2001-05-24  9:20             ` Malcolm Beattie
2001-05-24 19:15               ` Andreas Dilger
2001-05-22 18:41         ` Andreas Dilger
2001-05-22 19:06           ` Linus Torvalds
2001-05-22 19:16             ` Peter J. Braam
2001-05-22 20:10               ` Andreas Dilger
2001-05-22 20:59                 ` Peter J. Braam
2001-05-23  9:23                   ` Stephen C. Tweedie
2001-05-24 21:07                 ` Daniel Phillips
2001-05-24 22:00                   ` Hans Reiser
2001-05-25 10:56                     ` Daniel Phillips
2001-06-01  3:24                       ` [reiserfs-list] " Hans Reiser
2001-05-23  9:13               ` Stephen C. Tweedie
2001-05-20 20:23   ` Why side-effects on open(2) are evil. (was Re: [RFD w/info-PATCH] device " Pavel Machek
2001-05-21 20:38     ` Alexander Viro
2001-05-19 18:31 ` [RFD w/info-PATCH] device arguments from lookup, partion code in userspace Linus Torvalds
  -- strict thread matches above, loose matches on Subject: below --
2001-05-19 14:19 Why side-effects on open(2) are evil. (was Re: [RFD w/info-PATCH] device arguments from lookup) Andries.Brouwer
2001-05-19 14:58 ` Alexander Viro
2001-05-19 16:41 Andries.Brouwer
2001-05-19 16:51 ` Alexander Viro
2001-05-19 17:14   ` Matthew Wilcox
2001-05-19 23:24     ` Alexander Viro
2001-05-20 11:18 ` Matthew Kirkwood

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=0105231550390K.06233@starship \
    --to=phillips@bonn-fries.net \
    --cc=froese@gmx.de \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oxymoron@waste.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