From: Anton Altaparmakov <aia21@cam.ac.uk>
To: Miklos Szeredi <miklos@szeredi.hu>
Cc: aaranya@cs.sunysb.edu, linux-fsdevel@vger.kernel.org
Subject: Re: Expected getdents behaviour
Date: Thu, 15 Sep 2005 22:17:12 +0100 (BST) [thread overview]
Message-ID: <Pine.LNX.4.60.0509152132110.26539@hermes-1.csi.cam.ac.uk> (raw)
In-Reply-To: <E1EFwxL-0003I3-00@dorka.pomaz.szeredi.hu>
On Thu, 15 Sep 2005, Miklos Szeredi wrote:
> > The file position in a directory is completely up to the caller and
> > in particular when a directory is modified the file position in that
> > directory is not changed by the filesystem. Doing this would in
> > fact be impossible since the creation/deletion in the kernel has no
> > access to all the "struct file"s with which a directory has been
> > opened.
>
> And does not need to. The only thing the filesystem must do is to
> guarantee, that IF the file position wasn't changed since the last
> getdents() call (i.e. no lseek(), or zero relative offset lseek() was
> done), the directory reading should continue from the place where it
> has been left off.
But how do you define "the place where it has been left off"? What you
are saying is hand waving. No actual meaning behind those words.
Example:
f_pos = logical byte offset inside the linear on-disk directory stream.
(This is what ntfs uses.)
So if you do not change f_pos, the next readdir() will continue at the
same logical byte offset inside the linear on-disk directory stream, i.e.
it will continue at "the place where it has been left off". Which is what
you specified! Notice the problem? There is no guarantee whatsoever that
after a rm or create, this offset inside the on-disk directory stream
points to the same directory entry any more since the entries will have
been moved around. Even worse the very entry it was pointing to may have
been removed altogether so its place will have been filled by a different
entry.
> Look at dcache_readdir() in fs/libfs.c for a way to deal with exactly
> this problem.
AFAICS this only works because it is a linked list. But I am rather tired
now so I may well be missing something. That function is not very easy to
understand...
Best regards,
Anton
--
Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @)
Unix Support, Computing Service, University of Cambridge, CB2 3QH, UK
Linux NTFS maintainer / IRC: #ntfs on irc.freenode.net
WWW: http://linux-ntfs.sf.net/ & http://www-stu.christs.cam.ac.uk/~aia21/
next prev parent reply other threads:[~2005-09-15 21:17 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-15 13:57 Expected getdents behaviour Akshat Aranya
2005-09-15 14:03 ` Peter Staubach
2005-09-15 14:07 ` Anton Altaparmakov
2005-09-15 14:12 ` Anton Altaparmakov
2005-09-15 14:45 ` Miklos Szeredi
2005-09-15 15:17 ` Anton Altaparmakov
2005-09-15 16:41 ` Jan Blunck
2005-09-15 17:46 ` Jörn Engel
2005-09-15 18:19 ` Theodore Ts'o
2005-09-15 21:04 ` Anton Altaparmakov
2005-09-16 7:50 ` Nikita Danilov
2005-09-15 21:47 ` Jörn Engel
2005-09-16 7:29 ` Nikita Danilov
2005-09-16 11:58 ` Theodore Ts'o
2005-09-15 21:00 ` Anton Altaparmakov
2005-09-15 21:15 ` Charles P. Wright
2005-09-15 21:19 ` Anton Altaparmakov
2005-09-15 20:28 ` Anton Altaparmakov
2005-09-15 16:51 ` Miklos Szeredi
2005-09-15 21:17 ` Anton Altaparmakov [this message]
2005-09-15 15:51 ` Theodore Ts'o
2005-09-15 16:52 ` Bryan Henderson
2005-09-15 16:57 ` Jeremy Allison
2005-09-15 20:51 ` Anton Altaparmakov
2005-09-15 20:50 ` Anton Altaparmakov
2005-09-15 23:41 ` Bryan Henderson
2005-09-15 20:25 ` Anton Altaparmakov
2005-09-16 3:39 ` Theodore Ts'o
2005-09-16 11:57 ` Dave Kleikamp
2005-09-15 18:08 ` Nikita Danilov
2005-09-16 11:23 ` Miklos Szeredi
2005-09-16 1:28 ` tridge
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=Pine.LNX.4.60.0509152132110.26539@hermes-1.csi.cam.ac.uk \
--to=aia21@cam.ac.uk \
--cc=aaranya@cs.sunysb.edu \
--cc=linux-fsdevel@vger.kernel.org \
--cc=miklos@szeredi.hu \
/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;
as well as URLs for NNTP newsgroup(s).