Merge tag 'docs-5.7-2' of git://git.lwn.net/linux
[linux-block.git] / fs / xfs / xfs_trans.c
index 1adc6bc53a56bd5551eea7f2792d77679ff96fb3..28b983ff8b113baaa8f84775ea99fc09c6bc26ef 100644 (file)
@@ -9,6 +9,7 @@
 #include "xfs_shared.h"
 #include "xfs_format.h"
 #include "xfs_log_format.h"
+#include "xfs_log_priv.h"
 #include "xfs_trans_resv.h"
 #include "xfs_mount.h"
 #include "xfs_extent_busy.h"
@@ -150,8 +151,9 @@ xfs_trans_reserve(
        uint                    blocks,
        uint                    rtextents)
 {
-       int             error = 0;
-       bool            rsvd = (tp->t_flags & XFS_TRANS_RESERVE) != 0;
+       struct xfs_mount        *mp = tp->t_mountp;
+       int                     error = 0;
+       bool                    rsvd = (tp->t_flags & XFS_TRANS_RESERVE) != 0;
 
        /* Mark this thread as being in a transaction */
        current_set_flags_nested(&tp->t_pflags, PF_MEMALLOC_NOFS);
@@ -162,7 +164,7 @@ xfs_trans_reserve(
         * fail if the count would go below zero.
         */
        if (blocks > 0) {
-               error = xfs_mod_fdblocks(tp->t_mountp, -((int64_t)blocks), rsvd);
+               error = xfs_mod_fdblocks(mp, -((int64_t)blocks), rsvd);
                if (error != 0) {
                        current_restore_flags_nested(&tp->t_pflags, PF_MEMALLOC_NOFS);
                        return -ENOSPC;
@@ -191,9 +193,9 @@ xfs_trans_reserve(
 
                if (tp->t_ticket != NULL) {
                        ASSERT(resp->tr_logflags & XFS_TRANS_PERM_LOG_RES);
-                       error = xfs_log_regrant(tp->t_mountp, tp->t_ticket);
+                       error = xfs_log_regrant(mp, tp->t_ticket);
                } else {
-                       error = xfs_log_reserve(tp->t_mountp,
+                       error = xfs_log_reserve(mp,
                                                resp->tr_logres,
                                                resp->tr_logcount,
                                                &tp->t_ticket, XFS_TRANSACTION,
@@ -213,7 +215,7 @@ xfs_trans_reserve(
         * fail if the count would go below zero.
         */
        if (rtextents > 0) {
-               error = xfs_mod_frextents(tp->t_mountp, -((int64_t)rtextents));
+               error = xfs_mod_frextents(mp, -((int64_t)rtextents));
                if (error) {
                        error = -ENOSPC;
                        goto undo_log;
@@ -229,7 +231,7 @@ xfs_trans_reserve(
         */
 undo_log:
        if (resp->tr_logres > 0) {
-               xfs_log_done(tp->t_mountp, tp->t_ticket, NULL, false);
+               xfs_log_ticket_ungrant(mp->m_log, tp->t_ticket);
                tp->t_ticket = NULL;
                tp->t_log_res = 0;
                tp->t_flags &= ~XFS_TRANS_PERM_LOG_RES;
@@ -237,7 +239,7 @@ undo_log:
 
 undo_blocks:
        if (blocks > 0) {
-               xfs_mod_fdblocks(tp->t_mountp, (int64_t)blocks, rsvd);
+               xfs_mod_fdblocks(mp, (int64_t)blocks, rsvd);
                tp->t_blk_res = 0;
        }
 
@@ -1004,9 +1006,10 @@ out_unreserve:
         */
        xfs_trans_unreserve_and_mod_dquots(tp);
        if (tp->t_ticket) {
-               commit_lsn = xfs_log_done(mp, tp->t_ticket, NULL, regrant);
-               if (commit_lsn == -1 && !error)
-                       error = -EIO;
+               if (regrant && !XLOG_FORCED_SHUTDOWN(mp->m_log))
+                       xfs_log_ticket_regrant(mp->m_log, tp->t_ticket);
+               else
+                       xfs_log_ticket_ungrant(mp->m_log, tp->t_ticket);
                tp->t_ticket = NULL;
        }
        current_restore_flags_nested(&tp->t_pflags, PF_MEMALLOC_NOFS);
@@ -1065,7 +1068,7 @@ xfs_trans_cancel(
        xfs_trans_unreserve_and_mod_dquots(tp);
 
        if (tp->t_ticket) {
-               xfs_log_done(mp, tp->t_ticket, NULL, false);
+               xfs_log_ticket_ungrant(mp->m_log, tp->t_ticket);
                tp->t_ticket = NULL;
        }