Re: Kernel Compile in tmpfs crumples in 2.4.12 w/epoll patch

Theodore Tso (tytso@mit.edu)
Tue, 30 Oct 2001 12:29:08 -0500


On Mon, Oct 22, 2001 at 06:01:32AM -0400, Alexander Viro wrote:
>
> If you are changing directory between the calls of getdents(2) - you have
> no warranty that offsets will stay stable. It's not just Linux.
>

Umm... it's not Linux, but it is POSIX. POSIX states that if a file
is removed or created in a directory in the middle of a readir() scan,
that it's undefined whether or not that file which has been removed or
created will be returned by readdir(). But you're not allowed to
randomly shuffle things around and make files disappear or be returned
multiple times. Otherwise, it becomes impossible for readdir() to be
used reliably --- after all, even if an individual process isn't
deleting or creating files while doing a readdir(), it can't protect
itself from other processes happening to create or delete files while
it's doing an readdir() scan.

> Frankly, I don't see what could be done, short of doing qsort() by inumber
> or something equivalent...

Yup, that's what you'd have to do. Readdir() semantics are a bitch,
and a pain in the *ss for filesystems that are doing something other
than a FFS-style linear directory. Telldir()/seedir() semantics makes
things even worse....

- Ted
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/