xfs: split xlog_ticket_done
authorChristoph Hellwig <hch@lst.de>
Thu, 26 Mar 2020 01:18:23 +0000 (18:18 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Fri, 27 Mar 2020 15:32:53 +0000 (08:32 -0700)
Remove xlog_ticket_done and just call the renamed low-level helpers for
ungranting or regranting log space directly.  To make that a little
the reference put on the ticket and all tracing is moved into the actual
helpers.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
fs/xfs/xfs_log.c
fs/xfs/xfs_log_cil.c
fs/xfs/xfs_log_priv.h
fs/xfs/xfs_trace.h
fs/xfs/xfs_trans.c

index 3ccc3ca..a22962e 100644 (file)
@@ -66,14 +66,6 @@ xlog_grant_push_ail(
        struct xlog             *log,
        int                     need_bytes);
 STATIC void
-xlog_regrant_reserve_log_space(
-       struct xlog             *log,
-       struct xlog_ticket      *ticket);
-STATIC void
-xlog_ungrant_log_space(
-       struct xlog             *log,
-       struct xlog_ticket      *ticket);
-STATIC void
 xlog_sync(
        struct xlog             *log,
        struct xlog_in_core     *iclog);
@@ -502,27 +494,6 @@ xlog_write_done(
        return xlog_commit_record(log, ticket, iclog, lsn);
 }
 
-/*
- * Release or regrant the ticket reservation now the transaction is done with
- * it depending on caller context. Rolling transactions need the ticket
- * regranted, otherwise we release it completely.
- */
-void
-xlog_ticket_done(
-       struct xlog             *log,
-       struct xlog_ticket      *ticket,
-       bool                    regrant)
-{
-       if (!regrant || XLOG_FORCED_SHUTDOWN(log)) {
-               trace_xfs_log_done_nonperm(log, ticket);
-               xlog_ungrant_log_space(log, ticket);
-       } else {
-               trace_xfs_log_done_perm(log, ticket);
-               xlog_regrant_reserve_log_space(log, ticket);
-       }
-       xfs_log_ticket_put(ticket);
-}
-
 static bool
 __xlog_state_release_iclog(
        struct xlog             *log,
@@ -921,8 +892,7 @@ out_err:
 
        if (tic) {
                trace_xfs_log_umount_write(log, tic);
-               xlog_ungrant_log_space(log, tic);
-               xfs_log_ticket_put(tic);
+               xfs_log_ticket_ungrant(log, tic);
        }
 }
 
@@ -2992,19 +2962,18 @@ restart:
        return 0;
 }      /* xlog_state_get_iclog_space */
 
-/* The first cnt-1 times through here we don't need to
- * move the grant write head because the permanent
- * reservation has reserved cnt times the unit amount.
- * Release part of current permanent unit reservation and
- * reset current reservation to be one units worth.  Also
- * move grant reservation head forward.
+/*
+ * The first cnt-1 times through here we don't need to move the grant write head
+ * because the permanent reservation has reserved cnt times the unit amount.
+ * Release part of current permanent unit reservation and reset current
+ * reservation to be one units worth.  Also move grant reservation head forward.
  */
-STATIC void
-xlog_regrant_reserve_log_space(
+void
+xfs_log_ticket_regrant(
        struct xlog             *log,
        struct xlog_ticket      *ticket)
 {
-       trace_xfs_log_regrant_reserve_enter(log, ticket);
+       trace_xfs_log_ticket_regrant(log, ticket);
 
        if (ticket->t_cnt > 0)
                ticket->t_cnt--;
@@ -3016,21 +2985,20 @@ xlog_regrant_reserve_log_space(
        ticket->t_curr_res = ticket->t_unit_res;
        xlog_tic_reset_res(ticket);
 
-       trace_xfs_log_regrant_reserve_sub(log, ticket);
+       trace_xfs_log_ticket_regrant_sub(log, ticket);
 
        /* just return if we still have some of the pre-reserved space */
-       if (ticket->t_cnt > 0)
-               return;
+       if (!ticket->t_cnt) {
+               xlog_grant_add_space(log, &log->l_reserve_head.grant,
+                                    ticket->t_unit_res);
+               trace_xfs_log_ticket_regrant_exit(log, ticket);
 
-       xlog_grant_add_space(log, &log->l_reserve_head.grant,
-                                       ticket->t_unit_res);
-
-       trace_xfs_log_regrant_reserve_exit(log, ticket);
-
-       ticket->t_curr_res = ticket->t_unit_res;
-       xlog_tic_reset_res(ticket);
-}      /* xlog_regrant_reserve_log_space */
+               ticket->t_curr_res = ticket->t_unit_res;
+               xlog_tic_reset_res(ticket);
+       }
 
+       xfs_log_ticket_put(ticket);
+}
 
 /*
  * Give back the space left from a reservation.
@@ -3046,18 +3014,19 @@ xlog_regrant_reserve_log_space(
  * space, the count will stay at zero and the only space remaining will be
  * in the current reservation field.
  */
-STATIC void
-xlog_ungrant_log_space(
+void
+xfs_log_ticket_ungrant(
        struct xlog             *log,
        struct xlog_ticket      *ticket)
 {
-       int     bytes;
+       int                     bytes;
+
+       trace_xfs_log_ticket_ungrant(log, ticket);
 
        if (ticket->t_cnt > 0)
                ticket->t_cnt--;
 
-       trace_xfs_log_ungrant_enter(log, ticket);
-       trace_xfs_log_ungrant_sub(log, ticket);
+       trace_xfs_log_ticket_ungrant_sub(log, ticket);
 
        /*
         * If this is a permanent reservation ticket, we may be able to free
@@ -3072,9 +3041,10 @@ xlog_ungrant_log_space(
        xlog_grant_sub_space(log, &log->l_reserve_head.grant, bytes);
        xlog_grant_sub_space(log, &log->l_write_head.grant, bytes);
 
-       trace_xfs_log_ungrant_exit(log, ticket);
+       trace_xfs_log_ticket_ungrant_exit(log, ticket);
 
        xfs_log_space_wake(log->l_mp);
+       xfs_log_ticket_put(ticket);
 }
 
 /*
index 666041e..0ae187f 100644 (file)
@@ -843,7 +843,7 @@ restart:
        if (error)
                goto out_abort_free_ticket;
 
-       xlog_ticket_done(log, tic, false);
+       xfs_log_ticket_ungrant(log, tic);
 
        spin_lock(&commit_iclog->ic_callback_lock);
        if (commit_iclog->ic_state == XLOG_STATE_IOERROR) {
@@ -876,7 +876,7 @@ out_skip:
        return;
 
 out_abort_free_ticket:
-       xlog_ticket_done(log, tic, false);
+       xfs_log_ticket_ungrant(log, tic);
 out_abort:
        ASSERT(XLOG_FORCED_SHUTDOWN(log));
        xlog_cil_committed(ctx);
@@ -1008,7 +1008,10 @@ xfs_log_commit_cil(
        if (commit_lsn)
                *commit_lsn = xc_commit_lsn;
 
-       xlog_ticket_done(log, tp->t_ticket, regrant);
+       if (regrant && !XLOG_FORCED_SHUTDOWN(log))
+               xfs_log_ticket_regrant(log, tp->t_ticket);
+       else
+               xfs_log_ticket_ungrant(log, tp->t_ticket);
        tp->t_ticket = NULL;
        xfs_trans_unreserve_and_mod_sb(tp);
 
index fd63400..0941b46 100644 (file)
@@ -443,8 +443,8 @@ int xlog_write(struct xlog *log, struct xfs_log_vec *log_vector,
                bool need_start_rec);
 int    xlog_write_done(struct xlog *log, struct xlog_ticket *ticket,
                struct xlog_in_core **iclog, xfs_lsn_t *lsn);
-void   xlog_ticket_done(struct xlog *log, struct xlog_ticket *ticket,
-               bool regrant);
+void   xfs_log_ticket_ungrant(struct xlog *log, struct xlog_ticket *ticket);
+void   xfs_log_ticket_regrant(struct xlog *log, struct xlog_ticket *ticket);
 
 /*
  * When we crack an atomic LSN, we sample it first so that the value will not
index efc7751..f7f12d3 100644 (file)
@@ -1001,8 +1001,6 @@ DECLARE_EVENT_CLASS(xfs_loggrant_class,
 DEFINE_EVENT(xfs_loggrant_class, name, \
        TP_PROTO(struct xlog *log, struct xlog_ticket *tic), \
        TP_ARGS(log, tic))
-DEFINE_LOGGRANT_EVENT(xfs_log_done_nonperm);
-DEFINE_LOGGRANT_EVENT(xfs_log_done_perm);
 DEFINE_LOGGRANT_EVENT(xfs_log_umount_write);
 DEFINE_LOGGRANT_EVENT(xfs_log_grant_sleep);
 DEFINE_LOGGRANT_EVENT(xfs_log_grant_wake);
@@ -1011,12 +1009,12 @@ DEFINE_LOGGRANT_EVENT(xfs_log_reserve);
 DEFINE_LOGGRANT_EVENT(xfs_log_reserve_exit);
 DEFINE_LOGGRANT_EVENT(xfs_log_regrant);
 DEFINE_LOGGRANT_EVENT(xfs_log_regrant_exit);
-DEFINE_LOGGRANT_EVENT(xfs_log_regrant_reserve_enter);
-DEFINE_LOGGRANT_EVENT(xfs_log_regrant_reserve_exit);
-DEFINE_LOGGRANT_EVENT(xfs_log_regrant_reserve_sub);
-DEFINE_LOGGRANT_EVENT(xfs_log_ungrant_enter);
-DEFINE_LOGGRANT_EVENT(xfs_log_ungrant_exit);
-DEFINE_LOGGRANT_EVENT(xfs_log_ungrant_sub);
+DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant);
+DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant_exit);
+DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant_sub);
+DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant);
+DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant_sub);
+DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant_exit);
 
 DECLARE_EVENT_CLASS(xfs_log_item_class,
        TP_PROTO(struct xfs_log_item *lip),
index e20c759..28b983f 100644 (file)
@@ -231,7 +231,7 @@ xfs_trans_reserve(
         */
 undo_log:
        if (resp->tr_logres > 0) {
-               xlog_ticket_done(mp->m_log, tp->t_ticket, 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;
@@ -1006,7 +1006,10 @@ out_unreserve:
         */
        xfs_trans_unreserve_and_mod_dquots(tp);
        if (tp->t_ticket) {
-               xlog_ticket_done(mp->m_log, tp->t_ticket, regrant);
+               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) {
-               xlog_ticket_done(mp->m_log, tp->t_ticket, false);
+               xfs_log_ticket_ungrant(mp->m_log, tp->t_ticket);
                tp->t_ticket = NULL;
        }