aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_bmap.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2011-08-27 10:45:11 -0400
committerAlex Elder <aelder@sgi.com>2011-10-11 22:15:01 -0400
commit859f57ca00805e6c482eef1a7ab073097d02c8ca (patch)
treec39d3e719c396667804a50afd37d7f8364f84388 /fs/xfs/xfs_bmap.c
parent4a06fd262dbeb70a2c315f7259e063efa493fe3d (diff)
xfs: avoid synchronous transactions when deleting attr blocks
Currently xfs_attr_inactive causes a synchronous transactions if we are removing a file that has any extents allocated to the attribute fork, and thus makes XFS extremely slow at removing files with out of line extended attributes. The code looks a like a relict from the days before the busy extent list, but with the busy extent list we avoid reusing data and attr extents that have been freed but not commited yet, so this code is just as superflous as the synchronous transactions for data blocks. Signed-off-by: Christoph Hellwig <hch@lst.de> Reported-by: Bernd Schubert <bernd.schubert@itwm.fraunhofer.de> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Alex Elder <aelder@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_bmap.c')
-rw-r--r--fs/xfs/xfs_bmap.c10
1 files changed, 1 insertions, 9 deletions
diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c
index 452a291383ab..a6075c0f8456 100644
--- a/fs/xfs/xfs_bmap.c
+++ b/fs/xfs/xfs_bmap.c
@@ -3782,19 +3782,11 @@ xfs_bmap_compute_maxlevels(
3782 * Routine to be called at transaction's end by xfs_bmapi, xfs_bunmapi 3782 * Routine to be called at transaction's end by xfs_bmapi, xfs_bunmapi
3783 * caller. Frees all the extents that need freeing, which must be done 3783 * caller. Frees all the extents that need freeing, which must be done
3784 * last due to locking considerations. We never free any extents in 3784 * last due to locking considerations. We never free any extents in
3785 * the first transaction. This is to allow the caller to make the first 3785 * the first transaction.
3786 * transaction a synchronous one so that the pointers to the data being
3787 * broken in this transaction will be permanent before the data is actually
3788 * freed. This is necessary to prevent blocks from being reallocated
3789 * and written to before the free and reallocation are actually permanent.
3790 * We do not just make the first transaction synchronous here, because
3791 * there are more efficient ways to gain the same protection in some cases
3792 * (see the file truncation code).
3793 * 3786 *
3794 * Return 1 if the given transaction was committed and a new one 3787 * Return 1 if the given transaction was committed and a new one
3795 * started, and 0 otherwise in the committed parameter. 3788 * started, and 0 otherwise in the committed parameter.
3796 */ 3789 */
3797/*ARGSUSED*/
3798int /* error */ 3790int /* error */
3799xfs_bmap_finish( 3791xfs_bmap_finish(
3800 xfs_trans_t **tp, /* transaction pointer addr */ 3792 xfs_trans_t **tp, /* transaction pointer addr */