From: Al Viro <viro@ZenIV.linux.org.uk>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Jan Harkes <jaharkes@cs.cmu.edu>,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC] readdir mess
Date: Sun, 24 Aug 2008 20:59:08 +0100 [thread overview]
Message-ID: <20080824195908.GQ28946@ZenIV.linux.org.uk> (raw)
In-Reply-To: <alpine.LFD.1.10.0808241017580.3363@nehalem.linux-foundation.org>
On Sun, Aug 24, 2008 at 10:20:52AM -0700, Linus Torvalds wrote:
>
>
> On Sun, 24 Aug 2008, Al Viro wrote:
> >
> > One obvious note: that'll break old_readdir() on coda. There you need to
> > change the existing check (you need to check buf.result, then ignore error
> > unless buf.result ended up 0).
>
> Hmm? old_readdir() was the only one that I didn't change, because it
> didn't need changing. It already ignores the return value of
> "vfs_readdir()" entirely if it is positive or zero, and takes it from
> buf.result.
>
> So old_readdir() literally doesn't care at all (and never has) whether a
> ->readdir() function returns zero or a positive number. So changing coda
> readdir() it to return zero _instead_ of a positive number makes
> absolutely zero difference: old_readdir() will do the same thing
> regardless.
>
> What am I missing?
The fact that coda_readdir() will _not_ be returning 0 with your change
when called with the arguments old_readdir() gives it? You'll get ret
from filldir, i.e. what you'll normally see will be -EINVAL in case of
fillonedir as callback.
The normal sequence for old_readdir() is
* call fillonedir on the current entry
* have it bump ->result from 0 to 1 and return 0
* advance f_pos to the next entry
* call fillonedir for it
* have it see ->result != 0 and immediately bail out with -EINVAL
* seeing a negative from the callback, foo_readdir does *not* advance
f_pos this time and returns 0 (or at least something non-negative)
* old_readdir() sees non-negative from vfs_readdir() and returns
buf->result (i.e. 1)
Now you've got vfs_readdir() returning -EINVAL in that scenario. See why
old_readdir() needs an update too? It doesn't have the "OK, we'd already
called its filldir, so bugger whatever had happened afterwards" logics -
and it'll need it now.
next prev parent reply other threads:[~2008-08-24 19:59 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-12 6:22 [RFC] readdir mess Al Viro
2008-08-12 17:02 ` OGAWA Hirofumi
2008-08-12 17:18 ` Linus Torvalds
2008-08-12 18:10 ` Al Viro
2008-08-12 18:22 ` Al Viro
2008-08-12 18:37 ` Al Viro
2008-08-12 19:24 ` Al Viro
2008-08-12 20:02 ` Linus Torvalds
2008-08-12 20:21 ` Linus Torvalds
2008-08-12 20:38 ` Al Viro
2008-08-12 21:04 ` Linus Torvalds
2008-08-13 0:04 ` Al Viro
2008-08-13 0:28 ` Linus Torvalds
2008-08-13 1:19 ` Al Viro
2008-08-13 1:51 ` Linus Torvalds
2008-08-13 8:36 ` Brad Boyer
2008-08-13 16:19 ` Al Viro
2008-08-15 5:06 ` Jan Harkes
2008-08-15 5:34 ` Al Viro
2008-08-15 16:58 ` Linus Torvalds
2008-08-24 10:10 ` Al Viro
2008-08-24 11:03 ` Al Viro
2008-08-25 16:16 ` J. Bruce Fields
2008-08-24 17:20 ` Linus Torvalds
2008-08-24 19:59 ` Al Viro [this message]
2008-08-24 23:51 ` Linus Torvalds
2008-08-25 1:33 ` Al Viro
2008-08-25 1:44 ` Al Viro
2008-08-12 19:45 ` OGAWA Hirofumi
2008-08-12 20:05 ` Linus Torvalds
2008-08-12 20:59 ` Al Viro
2008-08-12 21:24 ` Linus Torvalds
2008-08-12 21:54 ` Al Viro
2008-08-12 22:04 ` Linus Torvalds
2008-08-13 16:20 ` J. Bruce Fields
2008-08-12 21:47 ` Alan Cox
2008-08-12 22:20 ` Linus Torvalds
2008-08-12 22:10 ` Alan Cox
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=20080824195908.GQ28946@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=jaharkes@cs.cmu.edu \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.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.