linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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/

  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).