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 _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs