1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Copyright (C) 2022-2023 Oracle. All Rights Reserved. 4 * Author: Darrick J. Wong <djwong@kernel.org> 5 */ 6 #ifndef __XFS_SCRUB_NEWBT_H__ 7 #define __XFS_SCRUB_NEWBT_H__ 8 9 struct xrep_newbt_resv { 10 /* Link to list of extents that we've reserved. */ 11 struct list_head list; 12 13 struct xfs_perag *pag; 14 15 /* Auto-freeing this reservation if we don't commit. */ 16 struct xfs_alloc_autoreap autoreap; 17 18 /* AG block of the extent we reserved. */ 19 xfs_agblock_t agbno; 20 21 /* Length of the reservation. */ 22 xfs_extlen_t len; 23 24 /* How much of this reservation has been used. */ 25 xfs_extlen_t used; 26 }; 27 28 struct xrep_newbt { 29 struct xfs_scrub *sc; 30 31 /* List of extents that we've reserved. */ 32 struct list_head resv_list; 33 34 /* Fake root for new btree. */ 35 union { 36 struct xbtree_afakeroot afake; 37 struct xbtree_ifakeroot ifake; 38 }; 39 40 /* rmap owner of these blocks */ 41 struct xfs_owner_info oinfo; 42 43 /* btree geometry for the bulk loader */ 44 struct xfs_btree_bload bload; 45 46 /* Allocation hint */ 47 xfs_fsblock_t alloc_hint; 48 49 /* per-ag reservation type */ 50 enum xfs_ag_resv_type resv; 51 }; 52 53 void xrep_newbt_init_bare(struct xrep_newbt *xnr, struct xfs_scrub *sc); 54 void xrep_newbt_init_ag(struct xrep_newbt *xnr, struct xfs_scrub *sc, 55 const struct xfs_owner_info *oinfo, xfs_fsblock_t alloc_hint, 56 enum xfs_ag_resv_type resv); 57 int xrep_newbt_init_inode(struct xrep_newbt *xnr, struct xfs_scrub *sc, 58 int whichfork, const struct xfs_owner_info *oinfo); 59 int xrep_newbt_alloc_blocks(struct xrep_newbt *xnr, uint64_t nr_blocks); 60 int xrep_newbt_add_extent(struct xrep_newbt *xnr, struct xfs_perag *pag, 61 xfs_agblock_t agbno, xfs_extlen_t len); 62 void xrep_newbt_cancel(struct xrep_newbt *xnr); 63 int xrep_newbt_commit(struct xrep_newbt *xnr); 64 int xrep_newbt_claim_block(struct xfs_btree_cur *cur, struct xrep_newbt *xnr, 65 union xfs_btree_ptr *ptr); 66 unsigned int xrep_newbt_unused_blocks(struct xrep_newbt *xnr); 67 68 #endif /* __XFS_SCRUB_NEWBT_H__ */ 69