mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 12:16:29 -04:00
xfs: move the online repair rmap hooks to the generic group structure
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>
This commit is contained in:
committed by
Darrick J. Wong
parent
34cf3a6f39
commit
eb4a84a3c2
@@ -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);
|
||||
|
||||
@@ -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__ */
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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__ */
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user