xfs
[Top] [All Lists]

[XFS updates] XFS development tree branch, master, updated. v2.6.38-9281

To: xfs@xxxxxxxxxxx
Subject: [XFS updates] XFS development tree branch, master, updated. v2.6.38-9281-ga1b7ea5
From: xfs@xxxxxxxxxxx
Date: Fri, 8 Apr 2011 16:55:01 -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, master has been updated
  a1b7ea5 xfs: use proper interfaces for on-stack plugging
  957935d xfs: fix xfs_debug warnings
  ecb697c xfs: fix variable set but not used warnings
  da8a1a4 xfs: convert log tail checking to a warning
  be65b18 xfs: catch bad block numbers freeing extents.
  fd07484 xfs: push the AIL from memory reclaim and periodic sync
  cd4a3c5 xfs: clean up code layout in xfs_trans_ail.c
  0bf6a5b xfs: convert the xfsaild threads to a workqueue
  a7b339f xfs: introduce background inode reclaim work
  89e4cb5 xfs: convert ENOSPC inode flushing to use new syncd workqueue
  c6d09b6 xfs: introduce a xfssyncd workqueue
  e828776 xfs: fix extent format buffer allocation size
      from  89b3600ccfb01aed6873bc499442fc0bed00bbdd (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 a1b7ea5d58c53c13f082110e535d98bc4e8e5cfe
Author: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date:   Wed Mar 30 11:05:09 2011 +0000

    xfs: use proper interfaces for on-stack plugging
    
    Add proper blk_start_plug/blk_finish_plug pairs for the two places where
    we issue buffer I/O, and remove the blk_flush_plug in xfs_buf_lock and
    xfs_buf_iowait, given that context switches already flush the per-process
    plugging lists.
    
    Signed-off-by: Christoph Hellwig <hch@xxxxxx>
    Signed-off-by: Alex Elder <aelder@xxxxxxx>

commit 957935dcd8e11d6f789b4ed769b376040e15565b
Author: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date:   Sat Apr 2 18:13:40 2011 +0000

    xfs: fix xfs_debug warnings
    
    For a CONFIG_XFS_DEBUG=n build gcc complains about statements with no
    effect in xfs_debug:
    
    fs/xfs/quota/xfs_qm_syscalls.c: In function 'xfs_qm_scall_trunc_qfiles':
    fs/xfs/quota/xfs_qm_syscalls.c:291:3: warning: statement with no effect
    
    The reason for that is that the various new xfs message functions have a
    return value which is never used, and in case of the non-debug build
    xfs_debug the macro evaluates to a plain 0 which produces the above
    warnings.  This can be fixed by turning xfs_debug into an inline function
    instead of a macro, but in addition to that I've also changed all the
    message helpers to return void as we never use their return values.
    
    Signed-off-by: Christoph Hellwig <hch@xxxxxx>
    Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Signed-off-by: Alex Elder <aelder@xxxxxxx>

commit ecb697c16c1718ae97bb73ce41a5d5ac2aed29ec
Author: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date:   Mon Apr 4 12:55:44 2011 +0000

    xfs: fix variable set but not used warnings
    
    GCC 4.6 now warnings about variables set but not used.  Fix the trivially
    fixable warnings of this sort.
    
    Signed-off-by: Christoph Hellwig <hch@xxxxxx>
    Signed-off-by: Alex Elder <aelder@xxxxxxx>

commit da8a1a4a4dfc1ead12c343b992fc8300a22d33d0
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Fri Apr 8 12:45:07 2011 +1000

    xfs: convert log tail checking to a warning
    
    On the Power platform, the log tail debug checks fire excessively
    causing the system to panic early in testing. The debug checks are
    known to be racy, though on x86_64 there is no evidence that they
    trigger at all.
    
    We want to keep the checks active on debug systems to alert us to
    problems with log space accounting, but we need to reduce the impact
    of a racy check on testing on the Power platform.
    
    As a result, convert the ASSERT conditions to warnings, and
    allow them to fire only once per filesystem mount. This will prevent
    false positives from interfering with testing, whilst still
    providing us with the indication that they may be a problem with log
    space accounting should that occur.
    
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Christoph Hellwig <hch@xxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

commit be65b18a10e62321c5ba09a1dc0f70babeb0eba1
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Fri Apr 8 12:45:07 2011 +1000

    xfs: catch bad block numbers freeing extents.
    
    A fuzzed filesystem crashed a kernel when freeing an extent with a
    block number beyond the end of the filesystem. Convert all the debug
    asserts in xfs_free_extent() to active checks so that we catch bad
    extents and return that the filesytsem is corrupted rather than
    crashing.
    
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Christoph Hellwig <hch@xxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

commit fd074841cfe01b006465fb9388091012585e8dfb
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Fri Apr 8 12:45:07 2011 +1000

    xfs: push the AIL from memory reclaim and periodic sync
    
    When we are short on memory, we want to expedite the cleaning of
    dirty objects.  Hence when we run short on memory, we need to kick
    the AIL flushing into action to clean as many dirty objects as
    quickly as possible.  To implement this, sample the lsn of the log
    item at the head of the AIL and use that as the push target for the
    AIL flush.
    
    Further, we keep items in the AIL that are dirty that are not
    tracked any other way, so we can get objects sitting in the AIL that
    don't get written back until the AIL is pushed. Hence to get the
    filesystem to the idle state, we might need to push the AIL to flush
    out any remaining dirty objects sitting in the AIL. This requires
    the same push mechanism as the reclaim push.
    
    This patch also renames xfs_trans_ail_tail() to xfs_ail_min_lsn() to
    match the new xfs_ail_max_lsn() function introduced in this patch.
    Similarly for xfs_trans_ail_push -> xfs_ail_push.
    
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

commit cd4a3c503c185f5f0a20f04f90da0a6966dd03bd
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Fri Apr 8 12:45:07 2011 +1000

    xfs: clean up code layout in xfs_trans_ail.c
    
    This patch rearranges the location of functions in xfs_trans_ail.c
    to remove the need for forward declarations of those functions in
    preparation for adding new functions without the need for forward
    declarations.
    
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

commit 0bf6a5bd4b55b466964ead6fa566d8f346a828ee
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Fri Apr 8 12:45:07 2011 +1000

    xfs: convert the xfsaild threads to a workqueue
    
    Similar to the xfssyncd, the per-filesystem xfsaild threads can be
    converted to a global workqueue and run periodically by delayed
    works. This makes sense for the AIL pushing because it uses
    variable timeouts depending on the work that needs to be done.
    
    By removing the xfsaild, we simplify the AIL pushing code and
    remove the need to spread the code to implement the threading
    and pushing across multiple files.
    
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Christoph Hellwig <hch@xxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

commit a7b339f1b8698667eada006e717cdb4523be2ed5
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Fri Apr 8 12:45:07 2011 +1000

    xfs: introduce background inode reclaim work
    
    Background inode reclaim needs to run more frequently that the XFS
    syncd work is run as 30s is too long between optimal reclaim runs.
    Add a new periodic work item to the xfs syncd workqueue to run a
    fast, non-blocking inode reclaim scan.
    
    Background inode reclaim is kicked by the act of marking inodes for
    reclaim.  When an AG is first marked as having reclaimable inodes,
    the background reclaim work is kicked. It will continue to run
    periodically untill it detects that there are no more reclaimable
    inodes. It will be kicked again when the first inode is queued for
    reclaim.
    
    To ensure shrinker based inode reclaim throttles to the inode
    cleaning and reclaim rate but still reclaim inodes efficiently, make it 
kick the
    background inode reclaim so that when we are low on memory we are
    trying to reclaim inodes as efficiently as possible. This kick shoul
    d not be necessary, but it will protect against failures to kick the
    background reclaim when inodes are first dirtied.
    
    To provide the rate throttling, make the shrinker pass do
    synchronous inode reclaim so that it blocks on inodes under IO. This
    means that the shrinker will reclaim inodes rather than just
    skipping over them, but it does not adversely affect the rate of
    reclaim because most dirty inodes are already under IO due to the
    background reclaim work the shrinker kicked.
    
    These two modifications solve one of the two OOM killer invocations
    Chris Mason reported recently when running a stress testing script.
    The particular workload trigger for the OOM killer invocation is
    where there are more threads than CPUs all unlinking files in an
    extremely memory constrained environment. Unlike other solutions,
    this one does not have a performance impact on performance when
    memory is not constrained or the number of concurrent threads
    operating is <= to the number of CPUs.
    
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Christoph Hellwig <hch@xxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

commit 89e4cb550a492cfca038a555fcc1bdac58822ec3
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Fri Apr 8 12:45:07 2011 +1000

    xfs: convert ENOSPC inode flushing to use new syncd workqueue
    
    On of the problems with the current inode flush at ENOSPC is that we
    queue a flush per ENOSPC event, regardless of how many are already
    queued. Thi can result in    hundreds of queued flushes, most of
    which simply burn CPU scanned and do no real work. This simply slows
    down allocation at ENOSPC.
    
    We really only need one active flush at a time, and we can easily
    implement that via the new xfs_syncd_wq. All we need to do is queue
    a flush if one is not already active, then block waiting for the
    currently active flush to complete. The result is that we only ever
    have a single ENOSPC inode flush active at a time and this greatly
    reduces the overhead of ENOSPC processing.
    
    On my 2p test machine, this results in tests exercising ENOSPC
    conditions running significantly faster - 042 halves execution time,
    083 drops from 60s to 5s, etc - while not introducing test
    regressions.
    
    This allows us to remove the old xfssyncd threads and infrastructure
    as they are no longer used.
    
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Christoph Hellwig <hch@xxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

commit c6d09b666de11eb272326a6eb6cd3246da571014
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Fri Apr 8 12:45:07 2011 +1000

    xfs: introduce a xfssyncd workqueue
    
    All of the work xfssyncd does is background functionality. There is
    no need for a thread per filesystem to do this work - it can al be
    managed by a global workqueue now they manage concurrency
    effectively.
    
    Introduce a new gglobal xfssyncd workqueue, and convert the periodic
    work to use this new functionality. To do this, use a delayed work
    construct to schedule the next running of the periodic sync work
    for the filesystem. When the sync work is complete, queue a new
    delayed work for the next running of the sync work.
    
    For laptop mode, we wait on completion for the sync works, so ensure
    that the sync work queuing interface can flush and wait for work to
    complete to enable the work queue infrastructure to replace the
    current sequence number and wakeup that is used.
    
    Because the sync work does non-trivial amounts of work, mark the
    new work queue as CPU intensive.
    
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Christoph Hellwig <hch@xxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

commit e828776a8abe6b9bae7ed9638710bff7642c568a
Author: Dave Chinner <dchinner@xxxxxxxxxx>
Date:   Fri Apr 8 12:45:07 2011 +1000

    xfs: fix extent format buffer allocation size
    
    When formatting an inode item, we have to allocate a separate buffer
    to hold extents when there are delayed allocation extents on the
    inode and it is in extent format. The allocation size is derived
    from the in-core data fork representation, which accounts for
    delayed allocation extents, while the on-disk representation does
    not contain any delalloc extents.
    
    As a result of this mismatch, the allocated buffer can be far larger
    than needed to hold the real extent list which, due to the fact the
    inode is in extent format, is limited to the size of the literal
    area of the inode. However, we can have thousands of delalloc
    extents, resulting in an allocation size orders of magnitude larger
    than is needed to hold all the real extents.
    
    Fix this by limiting the size of the buffer being allocated to the
    size of the literal area of the inodes in the filesystem (i.e. the
    maximum size an inode fork can grow to).
    
    Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Alex Elder <aelder@xxxxxxx>

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

Summary of changes:
 fs/xfs/linux-2.6/xfs_buf.c     |   22 +--
 fs/xfs/linux-2.6/xfs_message.c |   27 +--
 fs/xfs/linux-2.6/xfs_message.h |   24 ++-
 fs/xfs/linux-2.6/xfs_super.c   |  129 +++++--------
 fs/xfs/linux-2.6/xfs_sync.c    |  228 +++++++++++-----------
 fs/xfs/linux-2.6/xfs_sync.h    |    2 +
 fs/xfs/quota/xfs_qm.c          |    7 -
 fs/xfs/quota/xfs_qm.h          |    5 -
 fs/xfs/quota/xfs_qm_syscalls.c |    2 -
 fs/xfs/xfs_alloc.c             |   30 +++-
 fs/xfs/xfs_inode_item.c        |   67 ++++---
 fs/xfs/xfs_itable.c            |    2 -
 fs/xfs/xfs_log.c               |   38 +++-
 fs/xfs/xfs_log_priv.h          |    1 +
 fs/xfs/xfs_mount.h             |    9 +-
 fs/xfs/xfs_trans_ail.c         |  421 ++++++++++++++++++++++------------------
 fs/xfs/xfs_trans_priv.h        |   22 ++-
 17 files changed, 531 insertions(+), 505 deletions(-)


hooks/post-receive
-- 
XFS development tree

<Prev in Thread] Current Thread [Next in Thread>
  • [XFS updates] XFS development tree branch, master, updated. v2.6.38-9281-ga1b7ea5, xfs <=