]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
xfs: move the online repair rmap hooks to the generic group structure
authorChristoph Hellwig <hch@lst.de>
Mon, 4 Nov 2024 04:18:42 +0000 (20:18 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 5 Nov 2024 21:38:28 +0000 (13:38 -0800)
Prepare for the upcoming realtime groups feature by moving the online
repair rmap hooks to based to the generic xfs_group structure.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
fs/xfs/libxfs/xfs_ag.c
fs/xfs/libxfs/xfs_ag.h
fs/xfs/libxfs/xfs_group.c
fs/xfs/libxfs/xfs_group.h
fs/xfs/libxfs/xfs_rmap.c
fs/xfs/libxfs/xfs_rmap.h
fs/xfs/scrub/rmap_repair.c

index c2f1f830d299d3113c290d6b436bd668d728e9f8..e60469fee8751475be4fbbb81f9c732155a7e6f3 100644 (file)
@@ -235,7 +235,6 @@ xfs_perag_alloc(
        INIT_RADIX_TREE(&pag->pag_ici_root, GFP_ATOMIC);
        init_waitqueue_head(&pag->pagb_wait);
        pag->pagb_tree = RB_ROOT;
-       xfs_hooks_init(&pag->pag_rmap_update_hooks);
 #endif /* __KERNEL__ */
 
        error = xfs_buf_cache_init(&pag->pag_bcache);
index 45f8de06cdbc8abf5f56a90f66c484353df83e6c..042ee0913fb9b9c97fc631affa5db6b765eb2c3e 100644 (file)
@@ -96,9 +96,6 @@ struct xfs_perag {
 
        /* background prealloc block trimming */
        struct delayed_work     pag_blockgc_work;
-
-       /* Hook to feed rmapbt updates to an active online repair. */
-       struct xfs_hooks        pag_rmap_update_hooks;
 #endif /* __KERNEL__ */
 };
 
index 6737f009dd38cadbeb49e2bd32bf2005ba731b88..8532dc2f8628c5473562300edfe562fd8128d2d3 100644 (file)
@@ -186,6 +186,7 @@ xfs_group_insert(
 
 #ifdef __KERNEL__
        spin_lock_init(&xg->xg_state_lock);
+       xfs_hooks_init(&xg->xg_rmap_update_hooks);
 #endif
        xfs_defer_drain_init(&xg->xg_intents_drain);
 
index ebefbba7d98cc21568c0ea66b4266d0a0f0eb343..a87b9b80ef75168bfb56f82883f079e7748031bf 100644 (file)
@@ -31,6 +31,11 @@ struct xfs_group {
         * inconsistencies.
         */
        struct xfs_defer_drain  xg_intents_drain;
+
+       /*
+        * Hook to feed rmapbt updates to an active online repair.
+        */
+       struct xfs_hooks        xg_rmap_update_hooks;
 #endif /* __KERNEL__ */
 };
 
index b6764d6b3ab8911462baa4bfdc0ac24ecd82184e..984120b128fb9c4fc891adcac73cbd285d62758a 100644 (file)
@@ -835,7 +835,7 @@ xfs_rmap_hook_enable(void)
 static inline void
 xfs_rmap_update_hook(
        struct xfs_trans                *tp,
-       struct xfs_perag                *pag,
+       struct xfs_group                *xg,
        enum xfs_rmap_intent_type       op,
        xfs_agblock_t                   startblock,
        xfs_extlen_t                    blockcount,
@@ -850,27 +850,27 @@ xfs_rmap_update_hook(
                        .oinfo          = *oinfo, /* struct copy */
                };
 
-               if (pag)
-                       xfs_hooks_call(&pag->pag_rmap_update_hooks, op, &p);
+               if (xg)
+                       xfs_hooks_call(&xg->xg_rmap_update_hooks, op, &p);
        }
 }
 
 /* Call the specified function during a reverse mapping update. */
 int
 xfs_rmap_hook_add(
-       struct xfs_perag        *pag,
+       struct xfs_group        *xg,
        struct xfs_rmap_hook    *hook)
 {
-       return xfs_hooks_add(&pag->pag_rmap_update_hooks, &hook->rmap_hook);
+       return xfs_hooks_add(&xg->xg_rmap_update_hooks, &hook->rmap_hook);
 }
 
 /* Stop calling the specified function during a reverse mapping update. */
 void
 xfs_rmap_hook_del(
-       struct xfs_perag        *pag,
+       struct xfs_group        *xg,
        struct xfs_rmap_hook    *hook)
 {
-       xfs_hooks_del(&pag->pag_rmap_update_hooks, &hook->rmap_hook);
+       xfs_hooks_del(&xg->xg_rmap_update_hooks, &hook->rmap_hook);
 }
 
 /* Configure rmap update hook functions. */
@@ -905,7 +905,8 @@ xfs_rmap_free(
                return 0;
 
        cur = xfs_rmapbt_init_cursor(mp, tp, agbp, pag);
-       xfs_rmap_update_hook(tp, pag, XFS_RMAP_UNMAP, bno, len, false, oinfo);
+       xfs_rmap_update_hook(tp, pag_group(pag), XFS_RMAP_UNMAP, bno, len,
+                       false, oinfo);
        error = xfs_rmap_unmap(cur, bno, len, false, oinfo);
 
        xfs_btree_del_cursor(cur, error);
@@ -1149,7 +1150,8 @@ xfs_rmap_alloc(
                return 0;
 
        cur = xfs_rmapbt_init_cursor(mp, tp, agbp, pag);
-       xfs_rmap_update_hook(tp, pag, XFS_RMAP_MAP, bno, len, false, oinfo);
+       xfs_rmap_update_hook(tp, pag_group(pag), XFS_RMAP_MAP, bno, len, false,
+                       oinfo);
        error = xfs_rmap_map(cur, bno, len, false, oinfo);
 
        xfs_btree_del_cursor(cur, error);
@@ -2620,8 +2622,8 @@ xfs_rmap_finish_one(
        if (error)
                return error;
 
-       xfs_rmap_update_hook(tp, ri->ri_pag, ri->ri_type, bno,
-                       ri->ri_bmap.br_blockcount, unwritten, &oinfo);
+       xfs_rmap_update_hook(tp, pag_group(ri->ri_pag), ri->ri_type, bno,
+                            ri->ri_bmap.br_blockcount, unwritten, &oinfo);
        return 0;
 }
 
index b783dd4dd95d1abe73c4697f50fdd05efb11d518..d409b463bc666268a5cd313dcef36e0806042d4f 100644 (file)
@@ -264,8 +264,8 @@ struct xfs_rmap_hook {
 void xfs_rmap_hook_disable(void);
 void xfs_rmap_hook_enable(void);
 
-int xfs_rmap_hook_add(struct xfs_perag *pag, struct xfs_rmap_hook *hook);
-void xfs_rmap_hook_del(struct xfs_perag *pag, struct xfs_rmap_hook *hook);
+int xfs_rmap_hook_add(struct xfs_group *xg, struct xfs_rmap_hook *hook);
+void xfs_rmap_hook_del(struct xfs_group *xg, struct xfs_rmap_hook *hook);
 void xfs_rmap_hook_setup(struct xfs_rmap_hook *hook, notifier_fn_t mod_fn);
 #endif
 
index f88f58db909867d157927e07b14b3fe3279b68e9..6c420ec7dacd1b6771dfa51f0703303444020f35 100644 (file)
@@ -1611,7 +1611,7 @@ xrep_rmap_setup_scan(
         */
        ASSERT(sc->flags & XCHK_FSGATES_RMAP);
        xfs_rmap_hook_setup(&rr->rhook, xrep_rmapbt_live_update);
-       error = xfs_rmap_hook_add(sc->sa.pag, &rr->rhook);
+       error = xfs_rmap_hook_add(pag_group(sc->sa.pag), &rr->rhook);
        if (error)
                goto out_iscan;
        return 0;
@@ -1632,7 +1632,7 @@ xrep_rmap_teardown(
        struct xfs_scrub        *sc = rr->sc;
 
        xchk_iscan_abort(&rr->iscan);
-       xfs_rmap_hook_del(sc->sa.pag, &rr->rhook);
+       xfs_rmap_hook_del(pag_group(sc->sa.pag), &rr->rhook);
        xchk_iscan_teardown(&rr->iscan);
        xfbtree_destroy(&rr->rmap_btree);
        mutex_destroy(&rr->lock);