[Btrfs-devel] btrfs and git-reflog

Chris Mason chris.mason at oracle.com
Fri Jan 25 13:57:24 PST 2008


On Friday 25 January 2008, Theodore Tso wrote:
> On Fri, Jan 25, 2008 at 04:37:25PM -0500, Chris Mason wrote:
> > Hmmm, for seekdir and telldir, my understanding was that I was allowed to
> > return entries more than once, especially in the face of changes to the
> > directory in between calls.
>
> You are, but only for the files that have changed.  That is, if you
> create a new directory entry, or remove a directory entry (in the
> link() or unlink() sense of the word), it is undefined whether they
> will be retuned by readdir() zero, once, or twice, either as you
> interate through the readdir(), or if you use telldir/seekdir.
>
> But for entries that were not changed, they must be returned once and
> only once.  The problem with just using an inode number as the readdir
> off_t, of course, is you can get in trouble even without deleting or
> adding new files or hard links.
>
> For example, if a particular inode #12345, is hard linked three times,
> as file names "foo", "bar", and "baz", after you have readdir()
> returns "foo" and "bar", the application does a telldir()/seekdir()
> pair, you're not supposed to return "foo" and "bar" again, but go
> straight to "baz".  But if you use the inode number as the telldir
> cookie, then you don't know whether to resume the readdir() stream
> after "foo", "bar", or "baz".
>
> > http://www.opengroup.org/onlinepubs/000095399/functions/seekdir.html
> >
> > Does the JFS cookie allow you to get from the file to to the
> > directory entry?  We've got that now via backrefs.
>
> The JFS cookie is basically a stable identifier, whose size fits in a
> off_t, which given a directory, will get you back to the directory
> entry.  The requirments of a telldir() cookie is that it must be
> stable until closedir().  The requirements of the NFSv2 readdir()
> cookie is that it must be stable across reboots.  Hence, indexing the
> 32-bit telldir/NFS cookie in a separate btree which is persistent in
> the filesystem meets both the requirements of telldir/seekdir and
> NFSv2.
>

Ok, I'm recording this now in the name hash index.  So, for telldir and 
seekdir I can use those.  I'll need some magic for figuring out when to use 
which one, but it can be done.

Thanks for the details!

-chris



More information about the Btrfs-devel mailing list