|
@@ -892,26 +892,16 @@ xfs_trans_committed_bulk(
|
|
|
* have already been unlocked as if the commit had succeeded.
|
|
|
* Do not reference the transaction structure after this call.
|
|
|
*/
|
|
|
-int
|
|
|
-xfs_trans_commit(
|
|
|
+static int
|
|
|
+__xfs_trans_commit(
|
|
|
struct xfs_trans *tp,
|
|
|
- uint flags)
|
|
|
+ bool regrant)
|
|
|
{
|
|
|
struct xfs_mount *mp = tp->t_mountp;
|
|
|
xfs_lsn_t commit_lsn = -1;
|
|
|
int error = 0;
|
|
|
- int log_flags = 0;
|
|
|
int sync = tp->t_flags & XFS_TRANS_SYNC;
|
|
|
|
|
|
- /*
|
|
|
- * Determine whether this commit is releasing a permanent
|
|
|
- * log reservation or not.
|
|
|
- */
|
|
|
- if (flags & XFS_TRANS_RELEASE_LOG_RES) {
|
|
|
- ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES);
|
|
|
- log_flags = XFS_LOG_REL_PERM_RESERV;
|
|
|
- }
|
|
|
-
|
|
|
/*
|
|
|
* If there is nothing to be logged by the transaction,
|
|
|
* then unlock all of the items associated with the
|
|
@@ -936,7 +926,7 @@ xfs_trans_commit(
|
|
|
xfs_trans_apply_sb_deltas(tp);
|
|
|
xfs_trans_apply_dquot_deltas(tp);
|
|
|
|
|
|
- xfs_log_commit_cil(mp, tp, &commit_lsn, flags);
|
|
|
+ xfs_log_commit_cil(mp, tp, &commit_lsn, regrant);
|
|
|
|
|
|
current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS);
|
|
|
xfs_trans_free(tp);
|
|
@@ -964,6 +954,12 @@ out_unreserve:
|
|
|
*/
|
|
|
xfs_trans_unreserve_and_mod_dquots(tp);
|
|
|
if (tp->t_ticket) {
|
|
|
+ int log_flags = 0;
|
|
|
+
|
|
|
+ if (regrant)
|
|
|
+ ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES);
|
|
|
+ else
|
|
|
+ log_flags = XFS_LOG_REL_PERM_RESERV;
|
|
|
commit_lsn = xfs_log_done(mp, tp->t_ticket, NULL, log_flags);
|
|
|
if (commit_lsn == -1 && !error)
|
|
|
error = -EIO;
|
|
@@ -976,6 +972,13 @@ out_unreserve:
|
|
|
return error;
|
|
|
}
|
|
|
|
|
|
+int
|
|
|
+xfs_trans_commit(
|
|
|
+ struct xfs_trans *tp)
|
|
|
+{
|
|
|
+ return __xfs_trans_commit(tp, false);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Unlock all of the transaction's items and free the transaction.
|
|
|
* The transaction must not have modified any of its items, because
|
|
@@ -1029,7 +1032,7 @@ xfs_trans_cancel(
|
|
|
/*
|
|
|
* Roll from one trans in the sequence of PERMANENT transactions to
|
|
|
* the next: permanent transactions are only flushed out when
|
|
|
- * committed with XFS_TRANS_RELEASE_LOG_RES, but we still want as soon
|
|
|
+ * committed with xfs_trans_commit(), but we still want as soon
|
|
|
* as possible to let chunks of it go to the log. So we commit the
|
|
|
* chunk we've been working on and get a new transaction to continue.
|
|
|
*/
|
|
@@ -1063,7 +1066,7 @@ xfs_trans_roll(
|
|
|
* is in progress. The caller takes the responsibility to cancel
|
|
|
* the duplicate transaction that gets returned.
|
|
|
*/
|
|
|
- error = xfs_trans_commit(trans, 0);
|
|
|
+ error = __xfs_trans_commit(trans, true);
|
|
|
if (error)
|
|
|
return error;
|
|
|
|