1739a2fe0SDarrick J. Wong // SPDX-License-Identifier: GPL-2.0-or-later
284d42ea6SDarrick J. Wong /*
3ecc73f8aSDarrick J. Wong * Copyright (C) 2018-2023 Oracle. All Rights Reserved.
4739a2fe0SDarrick J. Wong * Author: Darrick J. Wong <djwong@kernel.org>
584d42ea6SDarrick J. Wong */
684d42ea6SDarrick J. Wong #ifndef __XFS_SCRUB_REPAIR_H__
784d42ea6SDarrick J. Wong #define __XFS_SCRUB_REPAIR_H__
884d42ea6SDarrick J. Wong
91a7ed271SDarrick J. Wong #include "xfs_quota_defs.h"
101a7ed271SDarrick J. Wong
11*d7a74cadSDarrick J. Wong struct xchk_stats_run;
12*d7a74cadSDarrick J. Wong
xrep_notsupported(struct xfs_scrub * sc)131d8a748aSDarrick J. Wong static inline int xrep_notsupported(struct xfs_scrub *sc)
1484d42ea6SDarrick J. Wong {
1584d42ea6SDarrick J. Wong return -EOPNOTSUPP;
1684d42ea6SDarrick J. Wong }
1784d42ea6SDarrick J. Wong
1884d42ea6SDarrick J. Wong #ifdef CONFIG_XFS_ONLINE_REPAIR
1984d42ea6SDarrick J. Wong
201c7ce115SDarrick J. Wong /*
211c7ce115SDarrick J. Wong * This is the maximum number of deferred extent freeing item extents (EFIs)
221c7ce115SDarrick J. Wong * that we'll attach to a transaction without rolling the transaction to avoid
231c7ce115SDarrick J. Wong * overrunning a tr_itruncate reservation.
241c7ce115SDarrick J. Wong */
251c7ce115SDarrick J. Wong #define XREP_MAX_ITRUNCATE_EFIS (128)
261c7ce115SDarrick J. Wong
271c7ce115SDarrick J. Wong
2884d42ea6SDarrick J. Wong /* Repair helpers */
2984d42ea6SDarrick J. Wong
30*d7a74cadSDarrick J. Wong int xrep_attempt(struct xfs_scrub *sc, struct xchk_stats_run *run);
31b5e2196eSDarrick J. Wong void xrep_failure(struct xfs_mount *mp);
321d8a748aSDarrick J. Wong int xrep_roll_ag_trans(struct xfs_scrub *sc);
331c7ce115SDarrick J. Wong int xrep_defer_finish(struct xfs_scrub *sc);
34b5e2196eSDarrick J. Wong bool xrep_ag_has_space(struct xfs_perag *pag, xfs_extlen_t nr_blocks,
350a9633faSDarrick J. Wong enum xfs_ag_resv_type type);
361d8a748aSDarrick J. Wong xfs_extlen_t xrep_calc_ag_resblks(struct xfs_scrub *sc);
3784d42ea6SDarrick J. Wong
3800b10d48SDarrick J. Wong struct xbitmap;
39a47bd1e0SDarrick J. Wong struct xagb_bitmap;
4064a39d87SDarrick J. Wong
411d8a748aSDarrick J. Wong int xrep_fix_freelist(struct xfs_scrub *sc, bool can_shrink);
4264a39d87SDarrick J. Wong
43b5e2196eSDarrick J. Wong struct xrep_find_ag_btree {
4404a2b7b2SDarrick J. Wong /* in: rmap owner of the btree we're looking for */
4504a2b7b2SDarrick J. Wong uint64_t rmap_owner;
4604a2b7b2SDarrick J. Wong
4704a2b7b2SDarrick J. Wong /* in: buffer ops */
4804a2b7b2SDarrick J. Wong const struct xfs_buf_ops *buf_ops;
4904a2b7b2SDarrick J. Wong
501ba6fd34SDarrick J. Wong /* in: maximum btree height */
511ba6fd34SDarrick J. Wong unsigned int maxlevels;
521ba6fd34SDarrick J. Wong
5304a2b7b2SDarrick J. Wong /* out: the highest btree block found and the tree height */
5404a2b7b2SDarrick J. Wong xfs_agblock_t root;
5504a2b7b2SDarrick J. Wong unsigned int height;
5604a2b7b2SDarrick J. Wong };
5704a2b7b2SDarrick J. Wong
58032d91f9SDarrick J. Wong int xrep_find_ag_btree_roots(struct xfs_scrub *sc, struct xfs_buf *agf_bp,
59032d91f9SDarrick J. Wong struct xrep_find_ag_btree *btree_info, struct xfs_buf *agfl_bp);
601a7ed271SDarrick J. Wong void xrep_force_quotacheck(struct xfs_scrub *sc, xfs_dqtype_t type);
611d8a748aSDarrick J. Wong int xrep_ino_dqattach(struct xfs_scrub *sc);
6204a2b7b2SDarrick J. Wong
6384d42ea6SDarrick J. Wong /* Metadata repairers */
6484d42ea6SDarrick J. Wong
651d8a748aSDarrick J. Wong int xrep_probe(struct xfs_scrub *sc);
661d8a748aSDarrick J. Wong int xrep_superblock(struct xfs_scrub *sc);
67f9ed6debSDarrick J. Wong int xrep_agf(struct xfs_scrub *sc);
680e93d3f4SDarrick J. Wong int xrep_agfl(struct xfs_scrub *sc);
6913942aa9SDarrick J. Wong int xrep_agi(struct xfs_scrub *sc);
7084d42ea6SDarrick J. Wong
7184d42ea6SDarrick J. Wong #else
7284d42ea6SDarrick J. Wong
73026f57ebSDarrick J. Wong static inline int
xrep_attempt(struct xfs_scrub * sc,struct xchk_stats_run * run)74026f57ebSDarrick J. Wong xrep_attempt(
75*d7a74cadSDarrick J. Wong struct xfs_scrub *sc,
76*d7a74cadSDarrick J. Wong struct xchk_stats_run *run)
7784d42ea6SDarrick J. Wong {
7884d42ea6SDarrick J. Wong return -EOPNOTSUPP;
7984d42ea6SDarrick J. Wong }
8084d42ea6SDarrick J. Wong
xrep_failure(struct xfs_mount * mp)81b5e2196eSDarrick J. Wong static inline void xrep_failure(struct xfs_mount *mp) {}
8284d42ea6SDarrick J. Wong
830a9633faSDarrick J. Wong static inline xfs_extlen_t
xrep_calc_ag_resblks(struct xfs_scrub * sc)84b5e2196eSDarrick J. Wong xrep_calc_ag_resblks(
851d8a748aSDarrick J. Wong struct xfs_scrub *sc)
860a9633faSDarrick J. Wong {
870a9633faSDarrick J. Wong return 0;
880a9633faSDarrick J. Wong }
890a9633faSDarrick J. Wong
90b5e2196eSDarrick J. Wong #define xrep_probe xrep_notsupported
91b5e2196eSDarrick J. Wong #define xrep_superblock xrep_notsupported
92f9ed6debSDarrick J. Wong #define xrep_agf xrep_notsupported
930e93d3f4SDarrick J. Wong #define xrep_agfl xrep_notsupported
9413942aa9SDarrick J. Wong #define xrep_agi xrep_notsupported
9584d42ea6SDarrick J. Wong
9684d42ea6SDarrick J. Wong #endif /* CONFIG_XFS_ONLINE_REPAIR */
9784d42ea6SDarrick J. Wong
9884d42ea6SDarrick J. Wong #endif /* __XFS_SCRUB_REPAIR_H__ */
99