xfs: __percpu_counter_compare() inode count debug too expensive
authorDave Chinner <dchinner@redhat.com>
Mon, 22 Mar 2021 16:52:06 +0000 (09:52 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Thu, 25 Mar 2021 23:47:52 +0000 (16:47 -0700)
- 21.92% __xfs_trans_commit
     - 21.62% xfs_log_commit_cil
- 11.69% xfs_trans_unreserve_and_mod_sb
   - 11.58% __percpu_counter_compare
      - 11.45% __percpu_counter_sum
 - 10.29% _raw_spin_lock_irqsave
    - 10.28% do_raw_spin_lock
 __pv_queued_spin_lock_slowpath

We debated just getting rid of it last time this came up and
there was no real objection to removing it. Now it's the biggest
scalability limitation for debug kernels even on smallish machines,
so let's just get rid of it.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
fs/xfs/xfs_trans.c

index b22a09e9daeefd84ad7bd30e049bcad5884e43b7..631cca73198f3e756843850459a3351e4f06cc90 100644 (file)
@@ -618,19 +618,12 @@ xfs_trans_unreserve_and_mod_sb(
                ASSERT(!error);
        }
 
-       if (idelta) {
+       if (idelta)
                percpu_counter_add_batch(&mp->m_icount, idelta,
                                         XFS_ICOUNT_BATCH);
-               if (idelta < 0)
-                       ASSERT(__percpu_counter_compare(&mp->m_icount, 0,
-                                                       XFS_ICOUNT_BATCH) >= 0);
-       }
 
-       if (ifreedelta) {
+       if (ifreedelta)
                percpu_counter_add(&mp->m_ifree, ifreedelta);
-               if (ifreedelta < 0)
-                       ASSERT(percpu_counter_compare(&mp->m_ifree, 0) >= 0);
-       }
 
        if (rtxdelta == 0 && !(tp->t_flags & XFS_TRANS_SB_DIRTY))
                return;