1. 29 3月, 2009 1 次提交
  2. 28 7月, 2008 5 次提交
    • B
      [XFS] Fix returning case-preserved name with CI node form directories · 90bb7ab0
      Barry Naujok 提交于
      xfs_dir2_node_lookup() calls xfs_da_node_lookup_int() which iterates
      through leaf blocks containing the matching hash value for the name being
      looked up. Inside xfs_da_node_lookup_int(), it calls the
      xfs_dir2_leafn_lookup_for_entry() for each leaf block.
      xfs_dir2_leafn_lookup_for_entry() iterates through each matching
      hash/offset pair doing a name comparison to find the matching dirent.
      
      For CI mode, the state->extrablk retains the details of the block that has
      the CI match so xfs_dir2_node_lookup() can return the case-preserved name.
      
      The original implementation didn't retain the xfs_da_buf_t properly, so
      the lookup was returning a bogus name to be stored in the dentry.
      
      In the case of unlink, the bad name was passed and in debug mode, ASSERTed
      when it can't find the entry.
      
      SGI-PV: 983284
      
      SGI-Modid: xfs-linux-melb:xfs-kern:31337a
      Signed-off-by: NBarry Naujok <bnaujok@sgi.com>
      Signed-off-by: NChristoph Hellwig <hch@infradead.org>
      Signed-off-by: NLachlan McIlroy <lachlan@sgi.com>
      90bb7ab0
    • B
      [XFS] Return case-insensitive match for dentry cache · 384f3ced
      Barry Naujok 提交于
      This implements the code to store the actual filename found during a
      lookup in the dentry cache and to avoid multiple entries in the dcache
      pointing to the same inode.
      
      To avoid polluting the dcache, we implement a new directory inode
      operations for lookup. xfs_vn_ci_lookup() stores the correct case name in
      the dcache.
      
      The "actual name" is only allocated and returned for a case- insensitive
      match and not an actual match.
      
      Another unusual interaction with the dcache is not storing negative
      dentries like other filesystems doing a d_add(dentry, NULL) when an ENOENT
      is returned. During the VFS lookup, if a dentry returned has no inode,
      dput is called and ENOENT is returned. By not doing a d_add, this actually
      removes it completely from the dcache to be reused. create/rename have to
      be modified to support unhashed dentries being passed in.
      
      SGI-PV: 981521
      SGI-Modid: xfs-linux-melb:xfs-kern:31208a
      Signed-off-by: NBarry Naujok <bnaujok@sgi.com>
      Signed-off-by: NChristoph Hellwig <hch@infradead.org>
      384f3ced
    • B
      [XFS] Add op_flags field and helpers to xfs_da_args · 6a178100
      Barry Naujok 提交于
      The end of the xfs_da_args structure has 4 unsigned char fields for
      true/false information on directory and attr operations using the
      xfs_da_args structure.
      
      The following converts these 4 into a op_flags field that uses the first 4
      bits for these fields and allows expansion for future operation
      information (eg. case-insensitive lookup request).
      
      SGI-PV: 981520
      SGI-Modid: xfs-linux-melb:xfs-kern:31206a
      Signed-off-by: NBarry Naujok <bnaujok@sgi.com>
      Signed-off-by: NChristoph Hellwig <hch@infradead.org>
      6a178100
    • B
      [XFS] Name operation vector for hash and compare · 5163f95a
      Barry Naujok 提交于
      Adds two pieces of functionality for the basis of case-insensitive support
      in XFS:
      
      1. A comparison result enumerated type: xfs_dacmp. It represents an
      
      exact match, case-insensitive match or no match at all. This patch
      
      only implements different and exact results.
      
      2. xfs_nameops vector for specifying how to perform the hash generation
      
      of filenames and comparision methods. In this patch the hash vector
      
      points to the existing xfs_da_hashname function and the comparison
      
      method does a length compare, and if the same, does a memcmp and
      
      return the xfs_dacmp result.
      
      All filename functions that use the hash (create, lookup remove, rename,
      etc) now use the xfs_nameops.hashname function and all directory lookup
      functions also use the xfs_nameops.compname function.
      
      The lookup functions also handle case-insensitive results even though the
      default comparison function cannot return that. And important aspect of
      the lookup functions is that an exact match always has precedence over a
      case-insensitive. So while a case-insensitive match is found, we have to
      keep looking just in case there is an exact match. In the meantime, the
      info for the first case-insensitive match is retained if no exact match is
      found.
      
      SGI-PV: 981519
      SGI-Modid: xfs-linux-melb:xfs-kern:31205a
      Signed-off-by: NBarry Naujok <bnaujok@sgi.com>
      Signed-off-by: NChristoph Hellwig <hch@infradead.org>
      5163f95a
    • B
      [XFS] Split xfs_dir2_leafn_lookup_int into its two pieces of functionality · f9f6dce0
      Barry Naujok 提交于
      SGI-PV: 976035
      SGI-Modid: xfs-linux-melb:xfs-kern:30834a
      Signed-off-by: NBarry Naujok <bnaujok@sgi.com>
      Signed-off-by: NChristoph Hellwig <hch@infradead.org>
      Signed-off-by: NLachlan McIlroy <lachlan@sgi.com>
      f9f6dce0
  3. 14 2月, 2008 1 次提交
  4. 15 10月, 2007 1 次提交
    • D
      [XFS] Radix tree based inode caching · da353b0d
      David Chinner 提交于
      One of the perpetual scaling problems XFS has is indexing it's incore
      inodes. We currently uses hashes and the default hash sizes chosen can
      only ever be a tradeoff between memory consumption and the maximum
      realistic size of the cache.
      
      As a result, anyone who has millions of inodes cached on a filesystem
      needs to tunes the size of the cache via the ihashsize mount option to
      allow decent scalability with inode cache operations.
      
      A further problem is the separate inode cluster hash, whose size is based
      on the ihashsize but is smaller, and so under certain conditions (sparse
      cluster cache population) this can become a limitation long before the
      inode hash is causing issues.
      
      The following patchset removes the inode hash and cluster hash and
      replaces them with radix trees to avoid the scalability limitations of the
      hashes. It also reduces the size of the inodes by 3 pointers....
      
      SGI-PV: 969561
      SGI-Modid: xfs-linux-melb:xfs-kern:29481a
      Signed-off-by: NDavid Chinner <dgc@sgi.com>
      Signed-off-by: NChristoph Hellwig <hch@infradead.org>
      Signed-off-by: NTim Shimmin <tes@sgi.com>
      da353b0d
  5. 14 7月, 2007 1 次提交
  6. 08 5月, 2007 1 次提交
  7. 20 6月, 2006 1 次提交
  8. 09 6月, 2006 3 次提交
  9. 29 3月, 2006 1 次提交
  10. 17 3月, 2006 8 次提交
  11. 02 11月, 2005 2 次提交
  12. 17 4月, 2005 1 次提交
    • L
      Linux-2.6.12-rc2 · 1da177e4
      Linus Torvalds 提交于
      Initial git repository build. I'm not bothering with the full history,
      even though we have it. We can create a separate "historical" git
      archive of that later if we want to, and in the meantime it's about
      3.2GB when imported into git - space that would just make the early
      git days unnecessarily complicated, when we don't have a lot of good
      infrastructure for it.
      
      Let it rip!
      1da177e4