From: Al Viro <viro@ZenIV.linux.org.uk>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC] readdir mess
Date: Tue, 12 Aug 2008 19:37:45 +0100 [thread overview]
Message-ID: <20080812183745.GT28946@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20080812182240.GS28946@ZenIV.linux.org.uk>
On Tue, Aug 12, 2008 at 07:22:40PM +0100, Al Viro wrote:
> PS: we might get away with both, if we used _positive_ values as well.
> E.g. have getdents() filldir return 1 if we are out of buffer *and*
> have ->previous != NULL (and -EINVAL if we are out of buffer on the
> first call)... And have some other positive constant for "->readdir()
> didn't feel like going all the way to the end of directory".
FWIW, how about that sequence:
Patch 1:
Turn all filldir(...) < 0 into filldir() != 0 in ->readdir() instances,
no changes other than that. Everything should keep working as-is.
Patch 2:
Make fillonedir() return 1 on the second call; make filldir() et.al.
return 1 instead of -EINVAL if we have ->previous != NULL. Again,
should be no breakage.
Patch 3: switch ->readdir() to your "return anything non-null we got from
callback". AFAICS, main callers will see no breakage, but in any case
we have few enough of those to adjust them as needed first.
Patch 4: get rid of ->error and its ilk; adjust callers in obvious ways
(e.g. sys_gtedents() would bail out on negative from vfs_readdir() as
it does now and treat 0 and 1 in the same way - put_user() ? -EFAULT : <how
much did we copy). Callers can be taken care one by one. Again, no breakage
and everything's bisectable.
Patch 5 (maybe):
#define READDIR_MORE INT_MAX
Have ->readdir() instances that decide to stop once they'd done several
filldir calls return it if there's still more left.
Have vfs_readdir() loop calling ->readdir() as long as it gets READDIR_MORE.
Get rid of weird loops in callers.
I'm not sure that the last one is needed - we might be better off just by
making the such instances loop themselves. In any case, loops in callers
(nfsd, etc.) are begging for trouble...
next prev parent reply other threads:[~2008-08-12 18:37 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 [this message]
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
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=20080812183745.GT28946@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=hirofumi@mail.parknet.co.jp \
--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.