Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0+
0002 /*
0003  * Copyright (C) 2018 Oracle.  All Rights Reserved.
0004  * Author: Darrick J. Wong <darrick.wong@oracle.com>
0005  */
0006 #ifndef __XFS_SCRUB_REPAIR_H__
0007 #define __XFS_SCRUB_REPAIR_H__
0008 
0009 #include "xfs_quota_defs.h"
0010 
0011 static inline int xrep_notsupported(struct xfs_scrub *sc)
0012 {
0013     return -EOPNOTSUPP;
0014 }
0015 
0016 #ifdef CONFIG_XFS_ONLINE_REPAIR
0017 
0018 /* Repair helpers */
0019 
0020 int xrep_attempt(struct xfs_scrub *sc);
0021 void xrep_failure(struct xfs_mount *mp);
0022 int xrep_roll_ag_trans(struct xfs_scrub *sc);
0023 bool xrep_ag_has_space(struct xfs_perag *pag, xfs_extlen_t nr_blocks,
0024         enum xfs_ag_resv_type type);
0025 xfs_extlen_t xrep_calc_ag_resblks(struct xfs_scrub *sc);
0026 int xrep_alloc_ag_block(struct xfs_scrub *sc,
0027         const struct xfs_owner_info *oinfo, xfs_fsblock_t *fsbno,
0028         enum xfs_ag_resv_type resv);
0029 int xrep_init_btblock(struct xfs_scrub *sc, xfs_fsblock_t fsb,
0030         struct xfs_buf **bpp, xfs_btnum_t btnum,
0031         const struct xfs_buf_ops *ops);
0032 
0033 struct xbitmap;
0034 
0035 int xrep_fix_freelist(struct xfs_scrub *sc, bool can_shrink);
0036 int xrep_invalidate_blocks(struct xfs_scrub *sc, struct xbitmap *btlist);
0037 int xrep_reap_extents(struct xfs_scrub *sc, struct xbitmap *exlist,
0038         const struct xfs_owner_info *oinfo, enum xfs_ag_resv_type type);
0039 
0040 struct xrep_find_ag_btree {
0041     /* in: rmap owner of the btree we're looking for */
0042     uint64_t            rmap_owner;
0043 
0044     /* in: buffer ops */
0045     const struct xfs_buf_ops    *buf_ops;
0046 
0047     /* in: maximum btree height */
0048     unsigned int            maxlevels;
0049 
0050     /* out: the highest btree block found and the tree height */
0051     xfs_agblock_t           root;
0052     unsigned int            height;
0053 };
0054 
0055 int xrep_find_ag_btree_roots(struct xfs_scrub *sc, struct xfs_buf *agf_bp,
0056         struct xrep_find_ag_btree *btree_info, struct xfs_buf *agfl_bp);
0057 void xrep_force_quotacheck(struct xfs_scrub *sc, xfs_dqtype_t type);
0058 int xrep_ino_dqattach(struct xfs_scrub *sc);
0059 
0060 /* Metadata repairers */
0061 
0062 int xrep_probe(struct xfs_scrub *sc);
0063 int xrep_superblock(struct xfs_scrub *sc);
0064 int xrep_agf(struct xfs_scrub *sc);
0065 int xrep_agfl(struct xfs_scrub *sc);
0066 int xrep_agi(struct xfs_scrub *sc);
0067 
0068 #else
0069 
0070 static inline int
0071 xrep_attempt(
0072     struct xfs_scrub    *sc)
0073 {
0074     return -EOPNOTSUPP;
0075 }
0076 
0077 static inline void xrep_failure(struct xfs_mount *mp) {}
0078 
0079 static inline xfs_extlen_t
0080 xrep_calc_ag_resblks(
0081     struct xfs_scrub    *sc)
0082 {
0083     return 0;
0084 }
0085 
0086 #define xrep_probe          xrep_notsupported
0087 #define xrep_superblock         xrep_notsupported
0088 #define xrep_agf            xrep_notsupported
0089 #define xrep_agfl           xrep_notsupported
0090 #define xrep_agi            xrep_notsupported
0091 
0092 #endif /* CONFIG_XFS_ONLINE_REPAIR */
0093 
0094 #endif  /* __XFS_SCRUB_REPAIR_H__ */