diff options
Diffstat (limited to 'fs/xfs/libxfs/xfs_defer.c')
| -rw-r--r-- | fs/xfs/libxfs/xfs_defer.c | 12 | 
1 files changed, 11 insertions, 1 deletions
diff --git a/fs/xfs/libxfs/xfs_defer.c b/fs/xfs/libxfs/xfs_defer.c index c13276095cc0..4a078e07e1a0 100644 --- a/fs/xfs/libxfs/xfs_defer.c +++ b/fs/xfs/libxfs/xfs_defer.c @@ -27,6 +27,7 @@  #include "xfs_da_btree.h"  #include "xfs_attr.h"  #include "xfs_trans_priv.h" +#include "xfs_exchmaps.h"  static struct kmem_cache	*xfs_defer_pending_cache; @@ -1091,7 +1092,11 @@ xfs_defer_ops_continue(  	ASSERT(!(tp->t_flags & XFS_TRANS_DIRTY));  	/* Lock the captured resources to the new transaction. */ -	if (dfc->dfc_held.dr_inos == 2) +	if (dfc->dfc_held.dr_inos > 2) { +		xfs_sort_inodes(dfc->dfc_held.dr_ip, dfc->dfc_held.dr_inos); +		xfs_lock_inodes(dfc->dfc_held.dr_ip, dfc->dfc_held.dr_inos, +				XFS_ILOCK_EXCL); +	} else if (dfc->dfc_held.dr_inos == 2)  		xfs_lock_two_inodes(dfc->dfc_held.dr_ip[0], XFS_ILOCK_EXCL,  				    dfc->dfc_held.dr_ip[1], XFS_ILOCK_EXCL);  	else if (dfc->dfc_held.dr_inos == 1) @@ -1176,6 +1181,10 @@ xfs_defer_init_item_caches(void)  	error = xfs_attr_intent_init_cache();  	if (error)  		goto err; +	error = xfs_exchmaps_intent_init_cache(); +	if (error) +		goto err; +  	return 0;  err:  	xfs_defer_destroy_item_caches(); @@ -1186,6 +1195,7 @@ err:  void  xfs_defer_destroy_item_caches(void)  { +	xfs_exchmaps_intent_destroy_cache();  	xfs_attr_intent_destroy_cache();  	xfs_extfree_intent_destroy_cache();  	xfs_bmap_intent_destroy_cache();  |