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. */
}
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);
return error;
err_inode:
+ tp->t_dfops = NULL;
xfs_trans_cancel(tp);
if (ip) {
xfs_iunlock(ip, XFS_ILOCK_EXCL);
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++) {
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;
}