linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ulrich Drepper <drepper@redhat.com>
To: bharata@linux.vnet.ibm.com
Cc: libc-alpha@sourceware.org, Jan Blunck <jblunck@suse.de>,
	        Erez Zadok <ezk@cs.sunysb.edu>,
	linux-kernel@vger.kernel.org,
	        linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk,
	        Christoph Hellwig <hch@lst.de>,
	Mingming Cao <cmm@us.ibm.com>,
	        Dave Hansen <haveblue@us.ibm.com>
Subject: Re: [RFC] Union mount readdir support in glibc
Date: Thu, 13 Mar 2008 20:53:48 -0700	[thread overview]
Message-ID: <47D9F6CC.6010009@redhat.com> (raw)
In-Reply-To: <20080311055527.GA7256@in.ibm.com>

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Bharata B Rao wrote:
> readdir in glibc
> ----------------
> glibc readdir would maintain a cache of dirents returned by readdir/getdents
> system call to perform duplicate elimination and whiteout supression.

As an optimization I have no problem with adding the code to glibc if it
does not impact non-union directories.  But requiring lockstep update of
kernel and glibc to use a feature like this which is not under control
of the application is a huge problem.  I don't think we ever had to
resort to this.  I consider this absolutely only the last resort.

Current readdir requires:


  opendir:   open
             fstat  (this can probably even be removed)
             malloc small buffer

  readdir:   if buffer is empty
                  getdents call (read multiple entries)
             return next entry


There is very little overhead.  Since we copy using getdents multiple
records it is more efficient than implementing readdir in the kernel.
This is how efficient normal directory operations must remain.  The only
slight inefficiency is that we have to copy the entries after getdents()
because the d_type field is not in the place we expect it at userlevel.
 For this a new interface could help.


To handle union FS at userlevel somewhere in that code sequence (perhaps
in the fstat call) we'd have to recognize such mounts.  Before any
agreement on userlevel sorting can be made you'll have to answer a
question Roland already asked:

- - How does this work with NFS?


Regarding questions you have: if a directory currently is read and file
are added or removed, all bets are off.

re seeking: you have to support seeking.  There is no way around it.
Once again, if any file has been added/removed, all bets are off.  So,
why not provide a cookie similar to what is done today?  I think it is
not acceptable to require caching the entire directory content at
userlevel.  It's bad enough if we have to store the file names for
duplicate elimination.

- --
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org

iEYEARECAAYFAkfZ9GgACgkQ2ijCOnn/RHS/nACgx/NQqWB0kIbXBkwuSZIr1alX
78EAn2PECJ/9Ax3RzyayatE61ZM9I42W
=vFJP
-----END PGP SIGNATURE-----

  parent reply	other threads:[~2008-03-14  3:53 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-11  5:55 [RFC] Union mount readdir support in glibc Bharata B Rao
2008-03-11  8:09 ` Roland McGrath
2008-03-11 12:49   ` Bharata B Rao
2008-03-12  4:28   ` Bharata B Rao
2008-03-14  3:53 ` Ulrich Drepper [this message]
2008-03-14  5:39   ` Al Viro
2008-03-14  7:13     ` Ulrich Drepper
2008-03-14  8:41       ` Miklos Szeredi
2008-03-14 17:53         ` Peter Staubach
2008-03-14 20:51           ` Miklos Szeredi
2008-03-14 20:58           ` Trond Myklebust
2008-03-14 15:07   ` Jan Blunck

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=47D9F6CC.6010009@redhat.com \
    --to=drepper@redhat.com \
    --cc=bharata@linux.vnet.ibm.com \
    --cc=cmm@us.ibm.com \
    --cc=ezk@cs.sunysb.edu \
    --cc=haveblue@us.ibm.com \
    --cc=hch@lst.de \
    --cc=jblunck@suse.de \
    --cc=libc-alpha@sourceware.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /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).