xfs: move more logic into xfs_extent_busy_clear_one
authorChristoph Hellwig <hch@lst.de>
Fri, 5 Apr 2024 06:07:08 +0000 (08:07 +0200)
committerChandan Babu R <chandanbabu@kernel.org>
Mon, 22 Apr 2024 07:23:34 +0000 (12:53 +0530)
Move the handling of discarded entries into xfs_extent_busy_clear_one
to reuse the length check and tidy up the logic in the caller.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
fs/xfs/xfs_extent_busy.c

index 56cfa1498571e3df52bf0f1b2fa3357c5d9a6eac..6fbffa46e5e94bc9a31fcdd0904e48b6b7dd0b5a 100644 (file)
@@ -518,20 +518,26 @@ fail:
        goto out;
 }
 
-STATIC void
+static bool
 xfs_extent_busy_clear_one(
-       struct xfs_mount        *mp,
        struct xfs_perag        *pag,
-       struct xfs_extent_busy  *busyp)
+       struct xfs_extent_busy  *busyp,
+       bool                    do_discard)
 {
        if (busyp->length) {
-               trace_xfs_extent_busy_clear(mp, busyp->agno, busyp->bno,
-                                               busyp->length);
+               if (do_discard &&
+                   !(busyp->flags & XFS_EXTENT_BUSY_SKIP_DISCARD)) {
+                       busyp->flags = XFS_EXTENT_BUSY_DISCARDED;
+                       return false;
+               }
+               trace_xfs_extent_busy_clear(pag->pag_mount, busyp->agno,
+                               busyp->bno, busyp->length);
                rb_erase(&busyp->rb_node, &pag->pagb_tree);
        }
 
        list_del_init(&busyp->list);
        kfree(busyp);
+       return true;
 }
 
 static void
@@ -575,13 +581,8 @@ xfs_extent_busy_clear(
                        wakeup = false;
                }
 
-               if (do_discard && busyp->length &&
-                   !(busyp->flags & XFS_EXTENT_BUSY_SKIP_DISCARD)) {
-                       busyp->flags = XFS_EXTENT_BUSY_DISCARDED;
-               } else {
-                       xfs_extent_busy_clear_one(mp, pag, busyp);
+               if (xfs_extent_busy_clear_one(pag, busyp, do_discard))
                        wakeup = true;
-               }
        }
 
        if (pag)