1. 04 Jan, 2012 10 commits
  2. 07 Nov, 2011 1 commit
    • Al Viro's avatar
      VFS: we need to set LOOKUP_JUMPED on mountpoint crossing · a3fbbde7
      Al Viro authored
      
      Mountpoint crossing is similar to following procfs symlinks - we do
      not get ->d_revalidate() called for dentry we have arrived at, with
      unpleasant consequences for NFS4.
      
      Simple way to reproduce the problem in mainline:
      
          cat >/tmp/a.c <<'EOF'
          #include <unistd.h>
          #include <fcntl.h>
          #include <stdio.h>
          main()
          {
                  struct flock fl = {.l_type = F_RDLCK, .l_whence = SEEK_SET, .l_len = 1};
                  if (fcntl(0, F_SETLK, &fl))
                          perror("setlk");
          }
          EOF
          cc /tmp/a.c -o /tmp/test
      
      then on nfs4:
      
          mount --bind file1 file2
          /tmp/test < file1		# ok
          /tmp/test < file2		# spews "setlk: No locks available"...
      
      What happens is the missing call of ->d_revalidate() after mountpoint
      crossing and that's where NFS4 would issue OPEN request to server.
      
      The fix is simple - treat mountpoint crossing the same way we deal with
      following procfs-style symlinks.  I.e.  set LOOKUP_JUMPED...
      
      Cc: stable@kernel.org
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a3fbbde7
  3. 02 Nov, 2011 1 commit
    • Andy Whitcroft's avatar
      readlinkat: ensure we return ENOENT for the empty pathname for normal lookups · 1fa1e7f6
      Andy Whitcroft authored
      Since the commit below which added O_PATH support to the *at() calls, the
      error return for readlink/readlinkat for the empty pathname has switched
      from ENOENT to EINVAL:
      
        commit 65cfc672
        Author: Al Viro <viro@zeniv.linux.org.uk>
        Date:   Sun Mar 13 15:56:26 2011 -0400
      
          readlinkat(), fchownat() and fstatat() with empty relative pathnames
      
      This is both unexpected for userspace and makes readlink/readlinkat
      inconsistant with all other interfaces; and inconsistant with our stated
      return for these pathnames.
      
      As the readlinkat call does not have a flags parameter we cannot use the
      AT_EMPTY_PATH approach used in the other calls.  Therefore expose whether
      the original path is infact entry via a new user_path_at_empty() path
      lookup function.  Use this to determine whether to default to EINVAL or
      ENOENT for failures.
      
      Addresses http://bugs.launchpad.net/bugs/817187
      
      
      
      [akpm@linux-foundation.org: remove unused getname_flags()]
      Signed-off-by: default avatarAndy Whitcroft <apw@canonical.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: <stable@kernel.org>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      1fa1e7f6
  4. 28 Oct, 2011 4 commits
  5. 27 Sep, 2011 2 commits
    • Linus Torvalds's avatar
      vfs: remove LOOKUP_NO_AUTOMOUNT flag · b6c8069d
      Linus Torvalds authored
      
      That flag no longer makes sense, since we don't look up automount points
      as eagerly any more.  Additionally, it turns out that the NO_AUTOMOUNT
      handling was buggy to begin with: it would avoid automounting even for
      cases where we really *needed* to do the automount handling, and could
      return ENOENT for autofs entries that hadn't been instantiated yet.
      
      With our new non-eager automount semantics, one discussion has been
      about adding a AT_AUTOMOUNT flag to vfs_fstatat (and thus the
      newfstatat() and fstatat64() system calls), but it's probably not worth
      it: you can always force at least directory automounting by simply
      adding the final '/' to the filename, which works for *all* of the stat
      family system calls, old and new.
      
      So AT_NO_AUTOMOUNT (and thus LOOKUP_NO_AUTOMOUNT) really were just a
      result of our bad default behavior.
      Acked-by: default avatarIan Kent <raven@themaw.net>
      Acked-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      b6c8069d
    • Linus Torvalds's avatar
      vfs pathname lookup: Add LOOKUP_AUTOMOUNT flag · d94c177b
      Linus Torvalds authored
      
      Since we've now turned around and made LOOKUP_FOLLOW *not* force an
      automount, we want to add the ability to force an automount event on
      lookup even if we don't happen to have one of the other flags that force
      it implicitly (LOOKUP_OPEN, LOOKUP_DIRECTORY, LOOKUP_PARENT..)
      
      Most cases will never want to use this, since you'd normally want to
      delay automounting as long as possible, which usually implies
      LOOKUP_OPEN (when we open a file or directory, we really cannot avoid
      the automount any more).
      
      But Trond argued sufficiently forcefully that at a minimum bind mounting
      a file and quotactl will want to force the automount lookup.  Some other
      cases (like nfs_follow_remote_path()) could use it too, although
      LOOKUP_DIRECTORY would work there as well.
      
      This commit just adds the flag and logic, no users yet, though.  It also
      doesn't actually touch the LOOKUP_NO_AUTOMOUNT flag that is related, and
      was made irrelevant by the same change that made us not follow on
      LOOKUP_FOLLOW.
      
      Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
      Cc: Ian Kent <raven@themaw.net>
      Cc: Jeff Layton <jlayton@redhat.com>
      Cc: Miklos Szeredi <miklos@szeredi.hu>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Greg KH <gregkh@suse.de>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d94c177b
  6. 14 Sep, 2011 1 commit
  7. 09 Sep, 2011 1 commit
    • Miklos Szeredi's avatar
      vfs: automount should ignore LOOKUP_FOLLOW · 0ec26fd0
      Miklos Szeredi authored
      Prior to 2.6.38 automount would not trigger on either stat(2) or
      lstat(2) on the automount point.
      
      After 2.6.38, with the introduction of the ->d_automount()
      infrastructure, stat(2) and others would start triggering automount
      while lstat(2), etc. still would not.  This is a regression and a
      userspace ABI change.
      
      Problem originally reported here:
      
        http://thread.gmane.org/gmane.linux.kernel.autofs/6098
      
      
      
      It appears that there was an attempt at fixing various userspace tools
      to not trigger the automount.  But since the stat system call is
      rather common it is impossible to "fix" all userspace.
      
      This patch reverts the original behavior, which is to not trigger on
      stat(2) and other symlink following syscalls.
      
      [ It's not really clear what the right behavior is.  Apparently Solaris
        does the "automount on stat, leave alone on lstat".  And some programs
        can get unhappy when "stat+open+fstat" ends up giving a different
        result from the fstat than from the initial stat.
      
        But the change in 2.6.38 resulted in problems for some people, so
        we're going back to old behavior.  Maybe we can re-visit this
        discussion at some future date  - Linus ]
      Reported-by: default avatarLeonardo Chiquitto <leonardo.lists@gmail.com>
      Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
      Acked-by: default avatarIan Kent <raven@themaw.net>
      Cc: David Howells <dhowells@redhat.com>
      Cc: stable@kernel.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      0ec26fd0
  8. 07 Aug, 2011 3 commits
    • Linus Torvalds's avatar
      vfs: rename 'do_follow_link' to 'should_follow_link' · 7813b94a
      Linus Torvalds authored
      
      Al points out that the do_follow_link() helper function really is
      misnamed - it's about whether we should try to follow a symlink or not,
      not about actually doing the following.
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      7813b94a
    • Ari Savolainen's avatar
      Fix POSIX ACL permission check · 206b1d09
      Ari Savolainen authored
      After commit 3567866b
      
      : "RCUify freeing acls, let check_acl() go ahead in
      RCU mode if acl is cached" posix_acl_permission is being called with an
      unsupported flag and the permission check fails. This patch fixes the issue.
      Signed-off-by: default avatarAri Savolainen <ari.m.savolainen@gmail.com>
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      206b1d09
    • Linus Torvalds's avatar
      vfs: optimize inode cache access patterns · 3ddcd056
      Linus Torvalds authored
      
      The inode structure layout is largely random, and some of the vfs paths
      really do care.  The path lookup in particular is already quite D$
      intensive, and profiles show that accessing the 'inode->i_op->xyz'
      fields is quite costly.
      
      We already optimized the dcache to not unnecessarily load the d_op
      structure for members that are often NULL using the DCACHE_OP_xyz bits
      in dentry->d_flags, and this does something very similar for the inode
      ops that are used during pathname lookup.
      
      It also re-orders the fields so that the fields accessed by 'stat' are
      together at the beginning of the inode structure, and roughly in the
      order accessed.
      
      The effect of this seems to be in the 1-2% range for an empty kernel
      "make -j" run (which is fairly kernel-intensive, mostly in filename
      lookup), so it's visible.  The numbers are fairly noisy, though, and
      likely depend a lot on exact microarchitecture.  So there's more tuning
      to be done.
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      3ddcd056
  9. 03 Aug, 2011 1 commit
  10. 01 Aug, 2011 1 commit
  11. 26 Jul, 2011 2 commits
  12. 25 Jul, 2011 2 commits
  13. 21 Jul, 2011 1 commit
  14. 20 Jul, 2011 10 commits