1. 14 3月, 2012 1 次提交
  2. 08 4月, 2011 1 次提交
  3. 19 10月, 2010 1 次提交
  4. 27 7月, 2010 3 次提交
  5. 24 6月, 2010 2 次提交
  6. 23 6月, 2010 1 次提交
  7. 06 3月, 2010 1 次提交
  8. 22 1月, 2010 1 次提交
  9. 16 1月, 2010 1 次提交
    • D
      xfs: Replace per-ag array with a radix tree · 1c1c6ebc
      Dave Chinner 提交于
      The use of an array for the per-ag structures requires reallocation
      of the array when growing the filesystem. This requires locking
      access to the array to avoid use after free situations, and the
      locking is difficult to get right. To avoid needing to reallocate an
      array, change the per-ag structures to an allocated object per ag
      and index them using a tree structure.
      
      The AGs are always densely indexed (hence the use of an array), but
      the number supported is 2^32 and lookups tend to be random and hence
      indexing needs to scale. A simple choice is a radix tree - it works
      well with this sort of index.  This change also removes another
      large contiguous allocation from the mount/growfs path in XFS.
      
      The growing process now needs to change to only initialise the new
      AGs required for the extra space, and as such only needs to
      exclusively lock the tree for inserts. The rest of the code only
      needs to lock the tree while doing lookups, and hence this will
      remove all the deadlocks that currently occur on the m_perag_lock as
      it is now an innermost lock. The lock is also changed to a spinlock
      from a read/write lock as the hold time is now extremely short.
      
      To complete the picture, the per-ag structures will need to be
      reference counted to ensure that we don't free/modify them while
      they are still in use.  This will be done in subsequent patch.
      Signed-off-by: NDave Chinner <david@fromorbit.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NAlex Elder <aelder@sgi.com>
      1c1c6ebc
  10. 09 10月, 2009 1 次提交
    • C
      xfs: implement ->dirty_inode to fix timestamp handling · f9581b14
      Christoph Hellwig 提交于
      This is picking up on Felix's repost of Dave's patch to implement a
      .dirty_inode method.  We really need this notification because
      the VFS keeps writing directly into the inode structure instead
      of going through methods to update this state.  In addition to
      the long-known atime issue we now also have a caller in VM code
      that updates c/mtime that way for shared writeable mmaps.  And
      I found another one that no one has noticed in practice in the FIFO
      code.
      
      So implement ->dirty_inode to set i_update_core whenever the
      inode gets externally dirtied, and switch the c/mtime handling to
      the same scheme we already use for atime (always picking up
      the value from the Linux inode).
      
      Note that this patch also removes the xfs_synchronize_atime call
      in xfs_reclaim it was superflous as we already synchronize the time
      when writing the inode via the log (xfs_inode_item_format) or the
      normal buffers (xfs_iflush_int).
      
      In addition also remove the I_CLEAR check before copying the Linux
      timestamps - now that we always have the Linux inode available
      we can always use the timestamps in it.
      
      Also switch to just using file_update_time for regular reads/writes -
      that will get us all optimization done to it for free and make
      sure we notice early when it breaks.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Reviewed-by: NFelix Blyakher <felixb@sgi.com>
      Reviewed-by: NAlex Elder <aelder@sgi.com>
      Signed-off-by: NAlex Elder <aelder@sgi.com>
      f9581b14
  11. 02 9月, 2009 2 次提交
  12. 01 9月, 2009 1 次提交
  13. 02 7月, 2009 1 次提交
  14. 29 3月, 2009 1 次提交
  15. 16 3月, 2009 1 次提交
  16. 19 1月, 2009 1 次提交
  17. 16 1月, 2009 1 次提交
  18. 02 12月, 2008 2 次提交
  19. 01 12月, 2008 4 次提交
  20. 30 10月, 2008 4 次提交
  21. 13 8月, 2008 2 次提交
  22. 28 7月, 2008 1 次提交
  23. 29 4月, 2008 1 次提交
  24. 18 4月, 2008 2 次提交
    • D
      [XFS] xfs_bulkstat_one_dinode() never returns an error. · 7b073390
      David Chinner 提交于
      Mark it void.
      
      SGI-PV: 980084
      SGI-Modid: xfs-linux-melb:xfs-kern:30828a
      Signed-off-by: NDavid Chinner <dgc@sgi.com>
      Signed-off-by: NNiv Sardi <xaiki@sgi.com>
      Signed-off-by: NLachlan McIlroy <lachlan@sgi.com>
      7b073390
    • D
      [XFS] Don't block pdflush when writing back inodes · a3f74ffb
      David Chinner 提交于
      When pdflush is writing back inodes, it can get stuck on inode cluster
      buffers that are currently under I/O. This occurs when we write data to
      multiple inodes in the same inode cluster at the same time.
      
      Effectively, delayed allocation marks the inode dirty during the data
      writeback. Hence if the inode cluster was flushed during the writeback of
      the first inode, the writeback of the second inode will block waiting for
      the inode cluster write to complete before writing it again for the newly
      dirtied inode.
      
      Basically, we want to avoid this from happening so we don't block pdflush
      and slow down all of writeback. Hence we introduce a non-blocking async
      inode flush flag that pdflush uses. If this flag is set, we use
      non-blocking operations (e.g. try locks) whereever we can to avoid
      blocking or extra I/O being issued.
      
      SGI-PV: 970925
      SGI-Modid: xfs-linux-melb:xfs-kern:30501a
      Signed-off-by: NDavid Chinner <dgc@sgi.com>
      Signed-off-by: NLachlan McIlroy <lachlan@sgi.com>
      a3f74ffb
  25. 10 4月, 2008 1 次提交
  26. 07 2月, 2008 2 次提交
    • C
      [XFS] Remove CFORK macros and use code directly in IFORK and DFORK macros. · 45ba598e
      Christoph Hellwig 提交于
      Currently XFS_IFORK_* and XFS_DFORK* are implemented by means of
      XFS_CFORK* macros. But given that XFS_IFORK_* operates on an xfs_inode
      that embedds and xfs_icdinode_core and XFS_DFORK_* operates on an
      xfs_dinode that embedds a xfs_dinode_core one will have to do endian
      swapping while the other doesn't. Instead of having the current mess with
      the CFORK macros that have byteswapping and non-byteswapping version
      (which are inconsistantly named while we're at it) just define each family
      of the macros to stand by itself and simplify the whole matter.
      
      A few direct references to the CFORK variants were cleaned up to use IFORK
      or DFORK to make this possible.
      
      SGI-PV: 971186
      SGI-Modid: xfs-linux-melb:xfs-kern:30163a
      Signed-off-by: NChristoph Hellwig <hch@infradead.org>
      Signed-off-by: NTim Shimmin <tes@sgi.com>
      Signed-off-by: NLachlan McIlroy <lachlan@sgi.com>
      45ba598e
    • T
      [XFS] Remove the BPCSHIFT and NB* based macros from XFS. · e6a4b37f
      Tim Shimmin 提交于
      The BPCSHIFT based macros, btoc*, ctob*, offtoc* and ctooff are either not
      used or don't need to be used. The NDPP, NDPP, NBBY macros don't need to
      be used but instead are replaced directly by PAGE_SIZE and PAGE_CACHE_SIZE
      where appropriate. Initial patch and motivation from Nicolas Kaiser.
      
      SGI-PV: 971186
      SGI-Modid: xfs-linux-melb:xfs-kern:30096a
      Signed-off-by: NTim Shimmin <tes@sgi.com>
      Signed-off-by: NLachlan McIlroy <lachlan@sgi.com>
      e6a4b37f