1. 30 10月, 2008 1 次提交
  2. 13 8月, 2008 2 次提交
  3. 28 7月, 2008 1 次提交
  4. 29 4月, 2008 1 次提交
  5. 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
  6. 10 4月, 2008 1 次提交
  7. 07 2月, 2008 3 次提交
  8. 10 12月, 2007 1 次提交
    • L
      [XFS] 971064 Various fixups for xfs_bulkstat(). · cd57e594
      Lachlan McIlroy 提交于
      - sanity check for NULL user buffer in xfs_ioc_bulkstat[_compat]()
      - remove the special case for XFS_IOC_FSBULKSTAT with count == 1. This
        special case causes bulkstat to fail because the special case uses
        xfs_bulkstat_single() instead of xfs_bulkstat() and the two functions
        have different semantics.  xfs_bulkstat() will return the next inode
        after the one supplied while skipping internal inodes (ie quota inodes).
        xfs_bulkstate_single() will only lookup the inode supplied and return
        an error if it is an internal inode.
      - in xfs_bulkstat(), need to initialise 'lastino' to the inode supplied
        so in cases were we return without examining any inodes the scan wont
        restart back at zero.
      - sanity check for valid *ubcountp values. Cannot sanity check for valid
        ubuffer here because some users of xfs_bulkstat() don't supply a buffer.
      - checks against 'ubleft' (the space left in the user's buffer) should be
        against 'statstruct_size' which is the supplied minimum object size.
        The mixture of checks against statstruct_size and 0 was one of the
        reasons we were skipping inodes.
      - if the formatter function returns BULKSTAT_RV_NOTHING and an error and
        the error is not ENOENT or EINVAL then we need to abort the scan. ENOENT
        is for inodes that are no longer valid and we just skip them. EINVAL is
        returned if we try to lookup an internal inode so we skip them too. For
        a DMF scan if the inode and DMF attribute cannot fit into the space left
        in the user's buffer it would return ERANGE. We didn't handle this error
        and skipped the inode. We would continue to skip inodes until one fitted
        into the user's buffer or we completed the scan.
      - put back the recalculation of agino (that got removed with the last fix)
        at the end of the while loop. This is because the code at the start of
        the loop expects agino to be the last inode examined if it is non-zero.
      - if we found some inodes but then encountered an error, return success
        this time and the error next time. If the formatter aborted with ENOMEM
        we will now return this error but only if we couldn't read any inodes.
        Previously if we encountered ENOMEM without reading any inodes we
        returned a zero count and no error which falsely indicated the scan was
        complete.
      
      SGI-PV: 973431
      SGI-Modid: xfs-linux-melb:xfs-kern:30089a
      Signed-off-by: NLachlan McIlroy <lachlan@sgi.com>
      Signed-off-by: NDavid Chinner <dgc@sgi.com>
      cd57e594
  9. 16 10月, 2007 2 次提交
    • L
      [XFS] This fix prevents bulkstat from spinning in an infinite loop. · c2cba57e
      Lachlan McIlroy 提交于
      Here 'agino' increments through the inodes in an allocation group. At the
      end of the innermost 'for' loop it will hold the value of the next inode
      to look at (ie the first inode in the next cluster/chunk). Assigning
      'lastino' to 'agino' resets it to the last inode in the last inode cluster
      we just looked at. This causes us to look up the very same cluster and
      examine all the inodes all over again, and again, and again...
      
      We also want to set 'lastino' for the cases when we're not interested in
      the inode so that the next call to bulkstat won't re-examine the same
      uninteresting inodes.
      
      SGI-PV: 971064
      SGI-Modid: xfs-linux-melb:xfs-kern:29840a
      Signed-off-by: NLachlan McIlroy <lachlan@sgi.com>
      Signed-off-by: NDavid Chinner <dgc@sgi.com>
      Signed-off-by: NTim Shimmin <tes@sgi.com>
      c2cba57e
    • V
      [XFS] get_bulkall() could return incorrect inode state · 859d7182
      Vlad Apostolov 提交于
      In the following scenario xfs_bulkstat() returns incorrect stale inode
      state:
      
      1. File_A is created and its inode synced to disk. 2. File_A is unlinked
      and doesn't exist anymore. 3. Filesystem sync is invoked. 4. File_B is
      created. File_B happens to reclaim File_A's inode. 5. xfs_bulkstat() is
      called and detects File_B but reports the
      
      incorrect File_A inode state.
      
      Explanation for the incorrect inode state is that inodes are not
      immediately synced on file create for performance reasons. This leaves the
      on-disk inode buffer uninitialized (or with old state from a previous
      generation inode) and this is what xfs_bulkstat() would report.
      
      The patch marks the on-disk inode buffer "dirty" on unlink. When the inode
      is reclaimed (by a new file create), xfs_bulkstat() would filter this
      inode by the "dirty" mark. Once the inode is flushed to disk, the on-disk
      buffer "dirty" mark is automatically removed and a following
      xfs_bulkstat() would return the correct inode state.
      
      Marking the on-disk inode buffer "dirty" on unlink is achieved by setting
      the on-disk di_nlink field to 0. Note that the in-core di_nlink has
      already been set to 0 and a corresponding transaction logged by
      xfs_droplink(). This is an exception from the rule that any on-disk inode
      buffer changes has to be followed by a disk write (inode flush).
      Synchronizing the in-core to on-disk di_nlink values in advance (before
      the actual inode flush to disk) should be fine in this case because the
      inode is already unlinked and it would never change its di_nlink again for
      this inode generation.
      
      SGI-PV: 970842
      SGI-Modid: xfs-linux-melb:xfs-kern:29757a
      Signed-off-by: NVlad Apostolov <vapo@sgi.com>
      Signed-off-by: NAlex Elder <aelder@sgi.com>
      Signed-off-by: NDavid Chinner <dgc@sgi.com>
      Signed-off-by: NChristoph Hellwig <hch@infradead.org>
      Signed-off-by: NMark Goodwin <markgw@sgi.com>
      Signed-off-by: NTim Shimmin <tes@sgi.com>
      859d7182
  10. 15 10月, 2007 1 次提交
    • C
      [XFS] dinode endianess annotations · 347d1c01
      Christoph Hellwig 提交于
      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: NChristoph Hellwig <hch@infradead.org>
      Signed-off-by: NDavid Chinner <dgc@sgi.com>
      Signed-off-by: NTim Shimmin <tes@sgi.com>
      347d1c01
  11. 14 7月, 2007 1 次提交
    • M
      [XFS] Fix XFS_IOC_FSBULKSTAT{,_SINGLE} & XFS_IOC_FSINUMBERS in compat mode · faa63e95
      Michal Marek 提交于
      * 32bit struct xfs_fsop_bulkreq has different size and layout of
      members, no matter the alignment. Move the code out of the #else
      branch (why was it there in the first place?). Define _32 variants of
      the ioctl constants.
      * 32bit struct xfs_bstat is different because of time_t and on
      i386 because of different padding. Make xfs_bulkstat_one() accept a
      custom "output formatter" in the private_data argument which takes care
      of the xfs_bulkstat_one_compat() that takes care of the different
      layout in the compat case.
      * i386 struct xfs_inogrp has different padding.
      Add a similar "output formatter" mecanism to xfs_inumbers().
      
      SGI-PV: 967354
      SGI-Modid: xfs-linux-melb:xfs-kern:29102a
      Signed-off-by: NMichal Marek <mmarek@suse.cz>
      Signed-off-by: NDavid Chinner <dgc@sgi.com>
      Signed-off-by: NTim Shimmin <tes@sgi.com>
      faa63e95
  12. 09 5月, 2007 1 次提交
  13. 28 9月, 2006 12 次提交
  14. 20 6月, 2006 1 次提交
  15. 09 6月, 2006 2 次提交
  16. 29 3月, 2006 1 次提交
  17. 17 3月, 2006 1 次提交
  18. 11 1月, 2006 2 次提交
  19. 02 11月, 2005 3 次提交
  20. 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