xfs
[Top] [All Lists]

[XFS updates] XFS development tree branch, for-linus, updated. v2.6.37-r

To: xfs@xxxxxxxxxxx
Subject: [XFS updates] XFS development tree branch, for-linus, updated. v2.6.37-rc4-9207-g0e6e847
From: xfs@xxxxxxxxxxx
Date: Mon, 28 Mar 2011 14:24:58 -0500
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "XFS development tree".

The branch, for-linus has been updated
  0e6e847 xfs: stop using the page cache to back the buffer cache
  704b290 xfs: register the inode cache shrinker before quotachecks
  7401aaf xfs: xfs_trans_read_buf() should return an error on failure
  1bfd8d0 xfs: introduce inode cluster buffer trylocks for xfs_iflush
  a19fb38 vmap: flush vmap aliases when mapping fails
  8287889 xfs: preallocation transactions do not need to be synchronous
      from  0c9ba97318fc9a905bcc1419b6966de061203a70 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 0e6e847ffe37436e331c132639f9f872febce82e
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Sat Mar 26 09:16:45 2011 +1100

    xfs: stop using the page cache to back the buffer cache
    
    Now that the buffer cache has it's own LRU, we do not need to use
    the page cache to provide persistent caching and reclaim
    infrastructure. Convert the buffer cache to use alloc_pages()
    instead of the page cache. This will remove all the overhead of page
    cache management from setup and teardown of the buffers, as well as
    needing to mark pages accessed as we find buffers in the buffer
    cache.
    
    By avoiding the page cache, we also remove the need to keep state in
    the page_private(page) field for persistant storage across buffer
    free/buffer rebuild and so all that code can be removed. This also
    fixes the long-standing problem of not having enough bits in the
    page_private field to track all the state needed for a 512
    sector/64k page setup.
    
    It also removes the need for page locking during reads as the pages
    are unique to the buffer and nobody else will be attempting to
    access them.
    
    Finally, it removes the buftarg address space lock as a point of
    global contention on workloads that allocate and free buffers
    quickly such as when creating or removing large numbers of inodes in
    parallel. This remove the 16TB limit on filesystem size on 32 bit
    machines as the page index (32 bit) is no longer used for lookups
    of metadata buffers - the buffer cache is now solely indexed by disk
    address which is stored in a 64 bit field in the buffer.
    
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

commit 704b2907c2d47ceb187c0e25a6bbc2174b198f2f
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Sat Mar 26 09:14:57 2011 +1100

    xfs: register the inode cache shrinker before quotachecks
    
    During mount, we can do a quotacheck that involves a bulkstat pass
    on all inodes. If there are more inodes in the filesystem than can
    be held in memory, we require the inode cache shrinker to run to
    ensure that we don't run out of memory.
    
    Unfortunately, the inode cache shrinker is not registered until we
    get to the end of the superblock setup process, which is after a
    quotacheck is run if it is needed. Hence we need to register the
    inode cache shrinker earlier in the mount process so that we don't
    OOM during mount. This requires that we also initialise the syncd
    work before we register the shrinker, so we nee dto juggle that
    around as well.
    
    While there, make sure that we have set up the block sizes in the
    VFS superblock correctly before the quotacheck is run so that any
    inodes that are cached as a result of the quotacheck have their
    block size fields set up correctly.
    
    Cc: stable@xxxxxxxxxx
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

commit 7401aafd5019d32a888e5f27332cf580945574bf
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Sat Mar 26 09:14:44 2011 +1100

    xfs: xfs_trans_read_buf() should return an error on failure
    
    When inside a transaction and we fail to read a buffer,
    xfs_trans_read_buf returns a null buffer pointer and no error.
    xfs_do_da_buf() checks the error return, but not the buffer, and as
    a result this read failure condition causes a panic when it attempts
    to dereference the non-existant buffer.
    
    Make xfs_trans_read_buf() return the same error for this situation
    regardless of whether it is in a transaction or not. This means
    every caller does not need to check both the error return and the
    buffer before proceeding to use the buffer.
    
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

commit 1bfd8d04190c615bb8d1d98188dead0c09702208
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Sat Mar 26 09:13:55 2011 +1100

    xfs: introduce inode cluster buffer trylocks for xfs_iflush
    
    There is an ABBA deadlock between synchronous inode flushing in
    xfs_reclaim_inode and xfs_icluster_free. xfs_icluster_free locks the
    buffer, then takes inode ilocks, whilst synchronous reclaim takes
    the ilock followed by the buffer lock in xfs_iflush().
    
    To avoid this deadlock, separate the inode cluster buffer locking
    semantics from the synchronous inode flush semantics, allowing
    callers to attempt to lock the buffer but still issue synchronous IO
    if it can get the buffer. This requires xfs_iflush() calls that
    currently use non-blocking semantics to pass SYNC_TRYLOCK rather
    than 0 as the flags parameter.
    
    This allows xfs_reclaim_inode to avoid the deadlock on the buffer
    lock and detect the failure so that it can drop the inode ilock and
    restart the reclaim attempt on the inode. This allows
    xfs_ifree_cluster to obtain the inode lock, mark the inode stale and
    release it and hence defuse the deadlock situation. It also has the
    pleasant side effect of avoiding IO in xfs_reclaim_inode when it
    tries to next reclaim the inode as it is now marked stale.
    
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Christoph Hellwig <hch@xxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

commit a19fb380961f209a3a406443686647bcd01bb9a6
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Sat Mar 26 09:13:42 2011 +1100

    vmap: flush vmap aliases when mapping fails
    
    On 32 bit systems, vmalloc space is limited and XFS can chew through
    it quickly as the vmalloc space is lazily freed. This can result in
    failure to map buffers, even when there is apparently large amounts
    of vmalloc space available. Hence, if we fail to map a buffer, purge
    the aliases that have not yet been freed to hopefuly free up enough
    vmalloc space to allow a retry to succeed.
    
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Christoph Hellwig <hch@xxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

commit 8287889742940cf3c416e755322090d09f2829be
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Sat Mar 26 09:13:08 2011 +1100

    xfs: preallocation transactions do not need to be synchronous
    
    Preallocation and hole punch transactions are currently synchronous
    and this is causing performance problems in some cases. The
    transactions don't need to be synchronous as we don't need to
    guarantee the preallocation is persistent on disk until a
    fdatasync, fsync, sync operation occurs. If the file is opened
    O_SYNC or O_DATASYNC, only then should the transaction be issued
    synchronously.
    
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Christoph Hellwig <hch@xxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

-----------------------------------------------------------------------

Summary of changes:
 fs/xfs/linux-2.6/xfs_buf.c   |  355 +++++++++++-------------------------------
 fs/xfs/linux-2.6/xfs_buf.h   |   40 +-----
 fs/xfs/linux-2.6/xfs_file.c  |    6 +-
 fs/xfs/linux-2.6/xfs_ioctl.c |    4 +
 fs/xfs/linux-2.6/xfs_super.c |   36 +++--
 fs/xfs/linux-2.6/xfs_sync.c  |   30 ++++-
 fs/xfs/xfs_inode.c           |    2 +-
 fs/xfs/xfs_inode_item.c      |    6 +-
 fs/xfs/xfs_trans_buf.c       |    3 +-
 fs/xfs/xfs_vnodeops.c        |    3 +-
 fs/xfs/xfs_vnodeops.h        |    1 +
 11 files changed, 165 insertions(+), 321 deletions(-)


hooks/post-receive
-- 
XFS development tree

<Prev in Thread] Current Thread [Next in Thread>
  • [XFS updates] XFS development tree branch, for-linus, updated. v2.6.37-rc4-9207-g0e6e847, xfs <=