diff options
Diffstat (limited to 'fs/xfs')
-rw-r--r-- | fs/xfs/xfs_bmap_item.c | 8 | ||||
-rw-r--r-- | fs/xfs/xfs_refcount_item.c | 8 |
2 files changed, 16 insertions, 0 deletions
diff --git a/fs/xfs/xfs_bmap_item.c b/fs/xfs/xfs_bmap_item.c index 956ebd583e27..478bfc798861 100644 --- a/fs/xfs/xfs_bmap_item.c +++ b/fs/xfs/xfs_bmap_item.c @@ -441,6 +441,7 @@ xfs_bui_recover( XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK), 0, 0, &tp); if (error) return error; + tp->t_dfops = dfops; budp = xfs_trans_get_bud(tp, buip); /* Grab the inode. */ @@ -487,6 +488,12 @@ xfs_bui_recover( } set_bit(XFS_BUI_RECOVERED, &buip->bui_flags); + /* + * Recovery finishes all deferred ops once intent processing is + * complete. Reset the trans reference because commit expects a finished + * dfops or none at all. + */ + tp->t_dfops = NULL; error = xfs_trans_commit(tp); xfs_iunlock(ip, XFS_ILOCK_EXCL); IRELE(ip); @@ -494,6 +501,7 @@ xfs_bui_recover( return error; err_inode: + tp->t_dfops = NULL; xfs_trans_cancel(tp); if (ip) { xfs_iunlock(ip, XFS_ILOCK_EXCL); diff --git a/fs/xfs/xfs_refcount_item.c b/fs/xfs/xfs_refcount_item.c index 472a73e9d331..2064c689bc72 100644 --- a/fs/xfs/xfs_refcount_item.c +++ b/fs/xfs/xfs_refcount_item.c @@ -452,6 +452,7 @@ xfs_cui_recover( mp->m_refc_maxlevels * 2, 0, XFS_TRANS_RESERVE, &tp); if (error) return error; + tp->t_dfops = dfops; cudp = xfs_trans_get_cud(tp, cuip); for (i = 0; i < cuip->cui_format.cui_nextents; i++) { @@ -514,11 +515,18 @@ xfs_cui_recover( xfs_refcount_finish_one_cleanup(tp, rcur, error); set_bit(XFS_CUI_RECOVERED, &cuip->cui_flags); + /* + * Recovery finishes all deferred ops once intent processing is + * complete. Reset the trans reference because commit expects a finished + * dfops or none at all. + */ + tp->t_dfops = NULL; error = xfs_trans_commit(tp); return error; abort_error: xfs_refcount_finish_one_cleanup(tp, rcur, error); + tp->t_dfops = NULL; xfs_trans_cancel(tp); return error; } |