xref: /openbmc/linux/fs/xfs/scrub/repair.h (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
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