]> www.infradead.org Git - users/hch/xfs.git/commitdiff
xfs: reflow xfs_dec_freecounter
authorChristoph Hellwig <hch@lst.de>
Sun, 9 Feb 2025 04:33:43 +0000 (05:33 +0100)
committerChristoph Hellwig <hch@lst.de>
Thu, 13 Feb 2025 04:17:51 +0000 (05:17 +0100)
Let the successful allocation be the main path through the function
with exception handling in branches to make the code easier to
follow.

Signed-off-by: Christoph Hellwig <hch@lst.de>
fs/xfs/xfs_mount.c

index 477c5262cf912074e637a04010c24e10ab6a1259..0598e9db488cdbd0461f4ed9f44ca079393a32bb 100644 (file)
@@ -1260,7 +1260,6 @@ xfs_dec_freecounter(
        uint64_t                delta,
        bool                    rsvd)
 {
-       int64_t                 lcounter;
        uint64_t                set_aside = 0;
        s32                     batch;
        bool                    has_resv_pool;
@@ -1299,28 +1298,26 @@ xfs_dec_freecounter(
                set_aside = xfs_fdblocks_unavailable(mp);
        percpu_counter_add_batch(counter, -((int64_t)delta), batch);
        if (__percpu_counter_compare(counter, set_aside,
-                                    XFS_FDBLOCKS_BATCH) >= 0) {
-               /* we had space! */
-               return 0;
-       }
-
-       /*
-        * lock up the sb for dipping into reserves before releasing the space
-        * that took us to ENOSPC.
-        */
-       spin_lock(&mp->m_sb_lock);
-       percpu_counter_add(counter, delta);
-       if (!has_resv_pool || !rsvd)
-               goto fdblocks_enospc;
-
-       lcounter = (long long)mp->m_resblks_avail - delta;
-       if (lcounter >= 0) {
-               mp->m_resblks_avail = lcounter;
+                       XFS_FDBLOCKS_BATCH) < 0) {
+               /*
+                * Lock up the sb for dipping into reserves before releasing the
+                * space that took us to ENOSPC.
+                */
+               spin_lock(&mp->m_sb_lock);
+               percpu_counter_add(counter, delta);
+               if (!rsvd)
+                       goto fdblocks_enospc;
+               if (delta > mp->m_resblks_avail) {
+                       xfs_warn_once(mp,
+"Reserve blocks depleted! Consider increasing reserve pool size.");
+                       goto fdblocks_enospc;
+               }
+               mp->m_resblks_avail -= delta;
                spin_unlock(&mp->m_sb_lock);
-               return 0;
        }
-       xfs_warn_once(mp,
-"Reserve blocks depleted! Consider increasing reserve pool size.");
+
+       /* we had space! */
+       return 0;
 
 fdblocks_enospc:
        spin_unlock(&mp->m_sb_lock);