1. 16 Oct, 2007 30 commits
  2. 15 Oct, 2007 10 commits
    • Christoph Hellwig's avatar
      [XFS] decontaminate vnode operations from behavior details · 993386c1
      Christoph Hellwig authored
      All vnode ops now take struct xfs_inode pointers and the behaviour related
      glue is split out into methods of it's own. This required fixing
      xfs_create/mkdir/symlink to not mess with the inode pointer but rather use
      a separate boolean for error handling. Thanks to Dave Chinner for that
      fix.
      
      SGI-PV: 969608
      SGI-Modid: xfs-linux-melb:xfs-kern:29492a
      Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
      Signed-off-by: default avatarDavid Chinner <dgc@sgi.com>
      Signed-off-by: default avatarTim Shimmin <tes@sgi.com>
      993386c1
    • Vlad Apostolov's avatar
      [XFS] do not have XFSMNT_IDELETE as default when mounted with XFSMNT_DMAPI · b93bd20c
      Vlad Apostolov authored
      XFS inodes are dynamically allocated on demand, rather than being
      allocated at mkfs time. Chunks of 64 inodes are allocated at once, but
      they are never freed. Over time, this can lead to filesystem
      fragmentation, clusters of inodes and the btrees which point at them can
      be scattered around the system.
      
      By freeing clusters as they are emptied, we will reduce fragmentation of
      the free space after removing files. This in turn will allow us to make
      better placement decisions when repopulating a filesystem. The
      XFSMNT_IDELETE mount option enables freeing clusters when they get empty.
      
      Unfortunately a side effect of freeing inode clusters is that the inode
      generation numbers of such inodes would be reset to zero when the cluster
      is reclaimed. This is a problem in particular for a DMAPI enabled
      filesystem as the the DMAPI handles need to be unique and persistent in
      time. An unique DMAPI handle is built with the help of the inode
      generation number. When the last one is prematurely reset by an inode
      cluster reclaim, there is a high probability of different generation
      inodes to end up having identical DMAPI handles.
      
      To avoid the problem with identical DMAPI handles, the XFSMNT_IDELETE
      mount option should be set as default, only if the filesystem is not
      mounted with XFSMNT_DMAPI.
      
      SGI-PV: 969192
      SGI-Modid: xfs-linux-melb:xfs-kern:29486a
      Signed-off-by: default avatarVlad Apostolov <vapo@sgi.com>
      Signed-off-by: default avatarDavid Chinner <dgc@sgi.com>
      Signed-off-by: default avatarMark Goodwin <markgw@sgi.com>
      Signed-off-by: default avatarTim Shimmin <tes@sgi.com>
      b93bd20c
    • David Chinner's avatar
      [XFS] Radix tree based inode caching · da353b0d
      David Chinner authored
      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: default avatarDavid Chinner <dgc@sgi.com>
      Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
      Signed-off-by: default avatarTim Shimmin <tes@sgi.com>
      da353b0d
    • Christoph Hellwig's avatar
      [XFS] kill move.[ch] · 39cd9f87
      Christoph Hellwig authored
      Kill uio related functions and defines now that they're unused.
      
      SGI-PV: 968563
      SGI-Modid: xfs-linux-melb:xfs-kern:29480a
      Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
      Signed-off-by: default avatarDavid Chinner <dgc@sgi.com>
      Signed-off-by: default avatarTim Shimmin <tes@sgi.com>
      39cd9f87
    • Christoph Hellwig's avatar
      [XFS] stop using uio in the readlink code · 804c83c3
      Christoph Hellwig authored
      Simplify the readlink code to get rid of the last user of uio.
      
      SGI-PV: 968563
      SGI-Modid: xfs-linux-melb:xfs-kern:29479a
      Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
      Signed-off-by: default avatarDavid Chinner <dgc@sgi.com>
      Signed-off-by: default avatarTim Shimmin <tes@sgi.com>
      804c83c3
    • Christoph Hellwig's avatar
      [XFS] use filldir internally · 051e7cd4
      Christoph Hellwig authored
      Currently xfs has a rather complicated internal scheme to allow for
      different directory formats in IRIX. This patch rips all code related to
      this out and pushes useage of the Linux filldir callback into the lowlevel
      directory code. This does not make the code any less portable because
      filldir can be used to create dirents of all possible variations
      (including the IRIX ones as proved by the IRIX binary emulation code under
      arch/mips/).
      
      This patch get rid of an unessecary copy in the readdir path, about 400
      lines of code and one of the last two users of the uio structure.
      
      This version is updated to deal with dmapi aswell which greatly simplifies
      the get_dirattrs code. The dmapi part has been tested using the
      get_dirattrs tools from the xfstest dmapi suite1 with various small and
      large directories.
      
      SGI-PV: 968563
      SGI-Modid: xfs-linux-melb:xfs-kern:29478a
      Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
      Signed-off-by: default avatarDavid Chinner <dgc@sgi.com>
      Signed-off-by: default avatarTim Shimmin <tes@sgi.com>
      051e7cd4
    • Christoph Hellwig's avatar
      [XFS] superblock endianess annotations · 2bdf7cd0
      Christoph Hellwig authored
      Creates a new xfs_dsb_t that is __be annotated and keeps xfs_sb_t for the
      incore one. xfs_xlatesb is renamed to xfs_sb_to_disk and only handles the
      incore -> disk conversion. A new helper xfs_sb_from_disk handles the other
      direction and doesn't need the slightly hacky table-driven approach
      because we only ever read the full sb from disk.
      
      The handling of shared r/o filesystems has been buggy on little endian
      system and fixing this required shuffling around of some code in that
      area.
      
      SGI-PV: 968563
      SGI-Modid: xfs-linux-melb:xfs-kern:29477a
      Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
      Signed-off-by: default avatarDavid Chinner <dgc@sgi.com>
      Signed-off-by: default avatarTim Shimmin <tes@sgi.com>
      2bdf7cd0
    • Christoph Hellwig's avatar
      [XFS] dinode endianess annotations · 347d1c01
      Christoph Hellwig authored
      Biggest bit is duplicating the dinode structure so we have one annotated for
      native endianess and one for disk endianess. The other significant change
      is that xfs_xlate_dinode_core is split into one helper per direction to
      allow for proper annotations, everything else is trivial.
      
      As a sidenode splitting out the incore dinode means we can move it into
      xfs_inode.h in a later patch and severely improving on the include hell in
      xfs.
      
      SGI-PV: 968563
      SGI-Modid: xfs-linux-melb:xfs-kern:29476a
      Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
      Signed-off-by: default avatarDavid Chinner <dgc@sgi.com>
      Signed-off-by: default avatarTim Shimmin <tes@sgi.com>
      347d1c01
    • Michal Piotrowski's avatar
      [XFS] Fix build regression from mod/commit which did cleanup of xfs_bmbt_*set_allf · ddc6d3b3
      Michal Piotrowski authored
      In sgi mod# xfs-linux-melb:xfs-kern:29319a, the variable renaming was not
      complete and variable 'b' was left unchanged for non-lbd 32 bit machines.
      
      SGI-PV: 968563
      SGI-Modid: xfs-linux-melb:xfs-kern:29469a
      Signed-off-by: default avatarMichal Piotrowski <michal.k.k.piotrowski@gmail.com>
      Signed-off-by: default avatarTim Shimmin <tes@sgi.com>
      ddc6d3b3
    • Eric Sandeen's avatar
      [XFS] optimize dmapi event tests w/o dmapi config · 948c6d4f
      Eric Sandeen authored
      SGI-PV: 969372
      SGI-Modid: xfs-linux-melb:xfs-kern:29444a
      Signed-off-by: default avatarEric Sandeen <sandeen@sandeen.net>
      Signed-off-by: default avatarVlad Apostolov <vapo@sgi.com>
      Signed-off-by: default avatarTim Shimmin <tes@sgi.com>
      948c6d4f