1. 25 5月, 2012 1 次提交
  2. 05 5月, 2012 1 次提交
    • L
      vfs: clean up __d_lookup_rcu() and dentry_cmp() interfaces · 12f8ad4b
      Linus Torvalds 提交于
      The calling conventions for __d_lookup_rcu() and dentry_cmp() are
      annoying in different ways, and there is actually one single underlying
      reason for both of the annoyances.
      
      The fundamental reason is that we do the returned dentry sequence number
      check inside __d_lookup_rcu() instead of doing it in the caller.  This
      results in two annoyances:
      
       - __d_lookup_rcu() now not only needs to return the dentry and the
         sequence number that goes along with the lookup, it also needs to
         return the inode pointer that was validated by that sequence number
         check.
      
       - and because we did the sequence number check early (to validate the
         name pointer and length) we also couldn't just pass the dentry itself
         to dentry_cmp(), we had to pass the counted string that contained the
         name.
      
      So that sequence number decision caused two separate ugly calling
      conventions.
      
      Both of these problems would be solved if we just did the sequence
      number check in the caller instead.  There's only one caller, and that
      caller already has to do the sequence number check for the parent
      anyway, so just do that.
      
      That allows us to stop returning the dentry->d_inode in that in-out
      argument (pointer-to-pointer-to-inode), so we can make the inode
      argument just a regular input inode pointer.  The caller can just load
      the inode from dentry->d_inode, and then do the sequence number check
      after that to make sure that it's synchronized with the name we looked
      up.
      
      And it allows us to just pass in the dentry to dentry_cmp(), which is
      what all the callers really wanted.  Sure, dentry_cmp() has to be a bit
      careful about the dentry (which is not stable during RCU lookup), but
      that's actually very simple.
      
      And now that dentry_cmp() can clearly see that the first string argument
      is a dentry, we can use the direct word access for that, instead of the
      careful unaligned zero-padding.  The dentry name is always properly
      aligned, since it is a single path component that is either embedded
      into the dentry itself, or was allocated with kmalloc() (see __d_alloc).
      
      Finally, this also uninlines the nasty slow-case for dentry comparisons:
      that one *does* need to do a sequence number check, since it will call
      in to the low-level filesystems, and we want to give those a stable
      inode pointer and path component length/start arguments.  Doing an extra
      sequence check for that slow case is not a problem, though.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      12f8ad4b
  3. 04 5月, 2012 1 次提交
    • L
      vfs: make word-at-a-time accesses handle a non-existing page · e419b4cc
      Linus Torvalds 提交于
      It turns out that there are more cases than CONFIG_DEBUG_PAGEALLOC that
      can have holes in the kernel address space: it seems to happen easily
      with Xen, and it looks like the AMD gart64 code will also punch holes
      dynamically.
      
      Actually hitting that case is still very unlikely, so just do the
      access, and take an exception and fix it up for the very unlikely case
      of it being a page-crosser with no next page.
      
      And hey, this abstraction might even help other architectures that have
      other issues with unaligned word accesses than the possible missing next
      page.  IOW, this could do the byte order magic too.
      
      Peter Anvin fixed a thinko in the shifting for the exception case.
      Reported-and-tested-by: NJana Saout <jana@saout.de>
      Cc:  Peter Anvin <hpa@zytor.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      e419b4cc
  4. 03 5月, 2012 1 次提交
  5. 29 4月, 2012 1 次提交
    • L
      VFS: clean up and simplify getname_flags() · 3f9f0aa6
      Linus Torvalds 提交于
      This removes a number of silly games around strncpy_from_user() in
      do_getname(), and removes that helper function entirely.  We instead
      make getname_flags() just use strncpy_from_user() properly directly.
      
      Removing the wrapper function simplifies things noticeably, mostly
      because we no longer play the unnecessary games with segments (x86
      strncpy_from_user() no longer needs the hack), but also because the
      empty path handling is just much more obvious.  The return value of
      "strncpy_to_user()" is much more obvious than checking an odd error
      return case from do_getname().
      
      [ non-x86 architectures were notified of this change several weeks ago,
        since it is possible that they have copied the old broken x86
        strncpy_from_user. But nobody reacted, so .. See
      
          http://www.spinics.net/lists/linux-arch/msg17313.html
      
        for details ]
      
      Cc: linux-arch@vger.kernel.org
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      3f9f0aa6
  6. 08 4月, 2012 1 次提交
    • E
      userns: Replace the hard to write inode_userns with inode_capable. · 1a48e2ac
      Eric W. Biederman 提交于
      This represents a change in strategy of how to handle user namespaces.
      Instead of tagging everything explicitly with a user namespace and bulking
      up all of the comparisons of uids and gids in the kernel,  all uids and gids
      in use will have a mapping to a flat kuid and kgid spaces respectively.  This
      allows much more of the existing logic to be preserved and in general
      allows for faster code.
      
      In this new and improved world we allow someone to utiliize capabilities
      over an inode if the inodes owner mapps into the capabilities holders user
      namespace and the user has capabilities in their user namespace.  Which
      is simple and efficient.
      
      Moving the fs uid comparisons to be comparisons in a flat kuid space
      follows in later patches, something that is only significant if you
      are using user namespaces.
      Acked-by: NSerge Hallyn <serge.hallyn@canonical.com>
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      1a48e2ac
  7. 07 4月, 2012 1 次提交
    • L
      Make the "word-at-a-time" helper functions more commonly usable · f68e556e
      Linus Torvalds 提交于
      I have a new optimized x86 "strncpy_from_user()" that will use these
      same helper functions for all the same reasons the name lookup code uses
      them.  This is preparation for that.
      
      This moves them into an architecture-specific header file.  It's
      architecture-specific for two reasons:
      
       - some of the functions are likely to want architecture-specific
         implementations.  Even if the current code happens to be "generic" in
         the sense that it should work on any little-endian machine, it's
         likely that the "multiply by a big constant and shift" implementation
         is less than optimal for an architecture that has a guaranteed fast
         bit count instruction, for example.
      
       - I expect that if architectures like sparc want to start playing
         around with this, we'll need to abstract out a few more details (in
         particular the actual unaligned accesses).  So we're likely to have
         more architecture-specific stuff if non-x86 architectures start using
         this.
      
         (and if it turns out that non-x86 architectures don't start using
         this, then having it in an architecture-specific header is still the
         right thing to do, of course)
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      f68e556e
  8. 03 4月, 2012 1 次提交
  9. 01 4月, 2012 14 次提交
  10. 23 3月, 2012 3 次提交
  11. 22 3月, 2012 1 次提交
  12. 21 3月, 2012 2 次提交
  13. 20 3月, 2012 1 次提交
  14. 11 3月, 2012 2 次提交
  15. 09 3月, 2012 1 次提交
  16. 03 3月, 2012 3 次提交
    • L
      vfs: export full_name_hash() function to modules · ae942ae7
      Linus Torvalds 提交于
      Commit 5707c87f "vfs: uninline full_name_hash()" broke the modular
      build, because it needs exporting now that it isn't inlined any more.
      Reported-by: NTetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      ae942ae7
    • L
      vfs: split up name hashing in link_path_walk() into helper function · 200e9ef7
      Linus Torvalds 提交于
      The code in link_path_walk() that finds out the length and the hash of
      the next path component is some of the hottest code in the kernel.  And
      I have a version of it that does things at the full width of the CPU
      wordsize at a time, but that means that we *really* want to split it up
      into a separate helper function.
      
      So this re-organizes the code a bit and splits the hashing part into a
      helper function called "hash_name()".  It returns the length of the
      pathname component, while at the same time computing and writing the
      hash to the appropriate location.
      
      The code generation is slightly changed by this patch, but generally for
      the better - and the added abstraction actually makes the code easier to
      read too.  And the new interface is well suited for replacing just the
      "hash_name()" function with alternative implementations.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      200e9ef7
    • L
      vfs: uninline full_name_hash() · 0145acc2
      Linus Torvalds 提交于
      .. and also use it in lookup_one_len() rather than open-coding it.
      
      There aren't any performance-critical users, so inlining it is silly.
      But it wouldn't matter if it wasn't for the fact that the word-at-a-time
      dentry name patches want to conditionally replace the function, and
      uninlining it sets the stage for that.
      
      So again, this is a preparatory patch that doesn't change any semantics,
      and only prepares for a much cleaner and testable word-at-a-time dentry
      name accessor patch.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      0145acc2
  17. 29 2月, 2012 1 次提交
  18. 14 2月, 2012 1 次提交
  19. 18 1月, 2012 1 次提交
  20. 04 1月, 2012 2 次提交