xfs: remove xlog_state_want_sync
authorChristoph Hellwig <hch@lst.de>
Fri, 20 Mar 2020 15:49:21 +0000 (08:49 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Mon, 23 Mar 2020 15:27:59 +0000 (08:27 -0700)
Open code the xlog_state_want_sync logic in its two callers given that
this function is a trivial wrapper around xlog_state_switch_iclogs.

Move the lockdep assert into xlog_state_switch_iclogs to not lose this
debugging aid, and improve the comment that documents
xlog_state_switch_iclogs as well.

Signed-off-by: Christoph Hellwig <hch@lst.de>
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

index 7e39835..2a90a48 100644 (file)
@@ -62,11 +62,6 @@ xlog_state_switch_iclogs(
        struct xlog_in_core     *iclog,
        int                     eventual_size);
 STATIC void
-xlog_state_want_sync(
-       struct xlog             *log,
-       struct xlog_in_core     *iclog);
-
-STATIC void
 xlog_grant_push_ail(
        struct xlog             *log,
        int                     need_bytes);
@@ -938,7 +933,11 @@ out_err:
        spin_lock(&log->l_icloglock);
        iclog = log->l_iclog;
        atomic_inc(&iclog->ic_refcnt);
-       xlog_state_want_sync(log, iclog);
+       if (iclog->ic_state == XLOG_STATE_ACTIVE)
+               xlog_state_switch_iclogs(log, iclog, 0);
+       else
+               ASSERT(iclog->ic_state == XLOG_STATE_WANT_SYNC ||
+                      iclog->ic_state == XLOG_STATE_IOERROR);
        error = xlog_state_release_iclog(log, iclog);
        xlog_wait_on_iclog(iclog);
 
@@ -2293,7 +2292,11 @@ xlog_write_copy_finish(
                *record_cnt = 0;
                *data_cnt = 0;
 
-               xlog_state_want_sync(log, iclog);
+               if (iclog->ic_state == XLOG_STATE_ACTIVE)
+                       xlog_state_switch_iclogs(log, iclog, 0);
+               else
+                       ASSERT(iclog->ic_state == XLOG_STATE_WANT_SYNC ||
+                              iclog->ic_state == XLOG_STATE_IOERROR);
                if (!commit_iclog)
                        goto release_iclog;
                spin_unlock(&log->l_icloglock);
@@ -3108,11 +3111,12 @@ xlog_ungrant_log_space(
 }
 
 /*
- * This routine will mark the current iclog in the ring as WANT_SYNC
- * and move the current iclog pointer to the next iclog in the ring.
- * When this routine is called from xlog_state_get_iclog_space(), the
- * exact size of the iclog has not yet been determined.  All we know is
- * that every data block.  We have run out of space in this log record.
+ * Mark the current iclog in the ring as WANT_SYNC and move the current iclog
+ * pointer to the next iclog in the ring.
+ *
+ * When called from xlog_state_get_iclog_space(), the exact size of the iclog
+ * has not yet been determined, all we know is that we have run out of space in
+ * the current iclog.
  */
 STATIC void
 xlog_state_switch_iclogs(
@@ -3121,6 +3125,8 @@ xlog_state_switch_iclogs(
        int                     eventual_size)
 {
        ASSERT(iclog->ic_state == XLOG_STATE_ACTIVE);
+       assert_spin_locked(&log->l_icloglock);
+
        if (!eventual_size)
                eventual_size = iclog->ic_offset;
        iclog->ic_state = XLOG_STATE_WANT_SYNC;
@@ -3362,26 +3368,6 @@ xfs_log_force_lsn(
        return ret;
 }
 
-/*
- * Called when we want to mark the current iclog as being ready to sync to
- * disk.
- */
-STATIC void
-xlog_state_want_sync(
-       struct xlog             *log,
-       struct xlog_in_core     *iclog)
-{
-       assert_spin_locked(&log->l_icloglock);
-
-       if (iclog->ic_state == XLOG_STATE_ACTIVE) {
-               xlog_state_switch_iclogs(log, iclog, 0);
-       } else {
-               ASSERT(iclog->ic_state == XLOG_STATE_WANT_SYNC ||
-                      iclog->ic_state == XLOG_STATE_IOERROR);
-       }
-}
-
-
 /*****************************************************************************
  *
  *             TICKET functions