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 20:24:19 +0100 [thread overview]
Message-ID: <20080812192419.GU28946@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20080812183745.GT28946@ZenIV.linux.org.uk>
On Tue, Aug 12, 2008 at 07:37:45PM +0100, Al Viro wrote:
> 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.
aargh...
Patch 2.5:
Fix braindead instances of ->readdir() that return odd crap on success
(e.g. coda_readdir() returning the count of filldir calls that had returned
zero).
> 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...
> --
> To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2008-08-12 19:24 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 [this message]
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=20080812192419.GU28946@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.