1. 10 8月, 2009 3 次提交
  2. 08 8月, 2009 9 次提交
  3. 04 8月, 2009 4 次提交
  4. 02 8月, 2009 2 次提交
  5. 01 8月, 2009 2 次提交
    • R
      nilfs2: fix oops due to inconsistent state in page with discrete b-tree nodes · a9777845
      Ryusuke Konishi 提交于
      Andrea Gelmini gave me a report that a kernel oops hit on a nilfs
      filesystem with a 1KB block size when doing rsync.
      
      This turned out to be caused by an inconsistency of dirty state
      between a page and its buffers storing b-tree node blocks.
      
      If the page had multiple buffers split over multiple logs, and if the
      logs were written at a time, a dirty flag remained in the page even
      every dirty flag in the buffers was cleared.
      
      This will fix the failure by dropping the dirty flag properly for
      pages with the discrete multiple b-tree nodes.
      Reported-by: NAndrea Gelmini <andrea.gelmini@gmail.com>
      Signed-off-by: NRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
      Tested-by: NAndrea Gelmini <andrea.gelmini@gmail.com>
      Cc: stable@kernel.org
      a9777845
    • C
      Btrfs: make sure the async caching thread advances the key · 013f1b12
      Chris Mason 提交于
      The async caching thread can end up looping forever if a given
      search puts it at the last key in a leaf.  It will end up calling
      btrfs_next_leaf and then checking if it needs to politely drop
      the read semaphore.
      
      Most of the time this looping isn't noticed because it is able to
      make progress the next time around.  But, during log replay,
      we wait on the async caching thread to finish, and the async thread
      is waiting on the commit, and no progress is really made.
      
      The fix used here is to copy the key out of the next leaf,
      that way our search lands there properly.
      Signed-off-by: NChris Mason <chris.mason@oracle.com>
      013f1b12
  6. 31 7月, 2009 3 次提交
    • J
      Btrfs: fix btrfs_remove_from_free_space corner case · 6606bb97
      Josef Bacik 提交于
      Yan Zheng hit a problem where we tried to remove some free space but failed
      because we couldn't find the free space entry.  This is because the free space
      was held within a bitmap that had a starting offset well before the actual
      offset of the free space, and there were free space extents that were in the
      same range as that offset, so tree_search_offset returned with NULL because we
      couldn't find a free space extent that had that offset.  This is fixed by
      making sure that if we fail to find the entry, we re-search again with
      bitmap_only set to 1 and do an offset_to_bitmap so we can get the appropriate
      bitmap.  A similar problem happens in btrfs_alloc_from_bitmap for the
      clustering code, but that is not as bad since we will just go and redo our
      cluster allocation.
      
      Also this adds some debugging checks to make sure that the free space we are
      trying to remove from the bitmap is in fact there.  This can probably go away
      after a while, but since this code is only used by the tree-logging stuff it
      would be nice to run with it for a while to make sure there are no problems.
      Signed-off-by: NJosef Bacik <jbacik@redhat.com>
      Signed-off-by: NChris Mason <chris.mason@oracle.com>
      6606bb97
    • E
      xfs: bump up nr_to_write in xfs_vm_writepage · c8a4051c
      Eric Sandeen 提交于
      VM calculation for nr_to_write seems off.  Bump it way
      up, this gets simple streaming writes zippy again.
      To be reviewed again after Jens' writeback changes.
      Signed-off-by: NChristoph Hellwig <hch@infradead.org>
      Signed-off-by: NEric Sandeen <sandeen@sandeen.net>
      Cc: Chris Mason <chris.mason@oracle.com>
      Reviewed-by: NFelix Blyakher <felixb@sgi.com>
      Signed-off-by: NFelix Blyakher <felixb@sgi.com>
      c8a4051c
    • E
      xfs: reduce bmv_count in xfs_vn_fiemap · 97db39a1
      Eric Sandeen 提交于
      commit 6321e3ed caused
      the full bmv_count's worth of getbmapx structures to get
      allocated; telling it to do MAXEXTNUM was a bit insane,
      resulting in ENOMEM every time.
      
      Chop it down to something reasonable, the number of slots
      in the caller's input buffer.  If this is too large the
      caller may get ENOMEM but the reason should not be a
      mystery, and they can try again with something smaller.
      
      We add 1 to the value because in the normal getbmap
      world, bmv_count includes the header and xfs_getbmap does:
      
              nex = bmv->bmv_count - 1;
              if (nex <= 0)
                      return XFS_ERROR(EINVAL);
      Signed-off-by: NEric Sandeen <sandeen@sandeen.net>
      Reviewed-by: NOlaf Weber <olaf@sgi.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NFelix Blyakher <felixb@sgi.com>
      97db39a1
  7. 30 7月, 2009 14 次提交
  8. 29 7月, 2009 3 次提交