76 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*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 9struct xfs_alloc_arg;10 11struct xrep_newbt_resv {12 /* Link to list of extents that we've reserved. */13 struct list_head list;14 15 struct xfs_perag *pag;16 17 /* Auto-freeing this reservation if we don't commit. */18 struct xfs_alloc_autoreap autoreap;19 20 /* AG block of the extent we reserved. */21 xfs_agblock_t agbno;22 23 /* Length of the reservation. */24 xfs_extlen_t len;25 26 /* How much of this reservation has been used. */27 xfs_extlen_t used;28};29 30struct xrep_newbt {31 struct xfs_scrub *sc;32 33 /* Custom allocation function, or NULL for xfs_alloc_vextent */34 int (*alloc_vextent)(struct xfs_scrub *sc,35 struct xfs_alloc_arg *args,36 xfs_fsblock_t alloc_hint);37 38 /* List of extents that we've reserved. */39 struct list_head resv_list;40 41 /* Fake root for new btree. */42 union {43 struct xbtree_afakeroot afake;44 struct xbtree_ifakeroot ifake;45 };46 47 /* rmap owner of these blocks */48 struct xfs_owner_info oinfo;49 50 /* btree geometry for the bulk loader */51 struct xfs_btree_bload bload;52 53 /* Allocation hint */54 xfs_fsblock_t alloc_hint;55 56 /* per-ag reservation type */57 enum xfs_ag_resv_type resv;58};59 60void xrep_newbt_init_bare(struct xrep_newbt *xnr, struct xfs_scrub *sc);61void xrep_newbt_init_ag(struct xrep_newbt *xnr, struct xfs_scrub *sc,62 const struct xfs_owner_info *oinfo, xfs_fsblock_t alloc_hint,63 enum xfs_ag_resv_type resv);64int xrep_newbt_init_inode(struct xrep_newbt *xnr, struct xfs_scrub *sc,65 int whichfork, const struct xfs_owner_info *oinfo);66int xrep_newbt_alloc_blocks(struct xrep_newbt *xnr, uint64_t nr_blocks);67int xrep_newbt_add_extent(struct xrep_newbt *xnr, struct xfs_perag *pag,68 xfs_agblock_t agbno, xfs_extlen_t len);69void xrep_newbt_cancel(struct xrep_newbt *xnr);70int xrep_newbt_commit(struct xrep_newbt *xnr);71int xrep_newbt_claim_block(struct xfs_btree_cur *cur, struct xrep_newbt *xnr,72 union xfs_btree_ptr *ptr);73unsigned int xrep_newbt_unused_blocks(struct xrep_newbt *xnr);74 75#endif /* __XFS_SCRUB_NEWBT_H__ */76