| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // SPDX-License-Identifier: GPL-2.0-or-later
- /*
- * Copyright (C) 2022-2023 Oracle. All Rights Reserved.
- * Author: Darrick J. Wong <djwong@kernel.org>
- */
- #ifndef __XFS_SCRUB_NEWBT_H__
- #define __XFS_SCRUB_NEWBT_H__
- struct xfs_alloc_arg;
- struct xrep_newbt_resv {
- /* Link to list of extents that we've reserved. */
- struct list_head list;
- struct xfs_perag *pag;
- /* Auto-freeing this reservation if we don't commit. */
- struct xfs_alloc_autoreap autoreap;
- /* AG block of the extent we reserved. */
- xfs_agblock_t agbno;
- /* Length of the reservation. */
- xfs_extlen_t len;
- /* How much of this reservation has been used. */
- xfs_extlen_t used;
- };
- struct xrep_newbt {
- struct xfs_scrub *sc;
- /* Custom allocation function, or NULL for xfs_alloc_vextent */
- int (*alloc_vextent)(struct xfs_scrub *sc,
- struct xfs_alloc_arg *args,
- xfs_fsblock_t alloc_hint);
- /* List of extents that we've reserved. */
- struct list_head resv_list;
- /* Fake root for new btree. */
- union {
- struct xbtree_afakeroot afake;
- struct xbtree_ifakeroot ifake;
- };
- /* rmap owner of these blocks */
- struct xfs_owner_info oinfo;
- /* btree geometry for the bulk loader */
- struct xfs_btree_bload bload;
- /* Allocation hint */
- xfs_fsblock_t alloc_hint;
- /* per-ag reservation type */
- enum xfs_ag_resv_type resv;
- };
- void xrep_newbt_init_bare(struct xrep_newbt *xnr, struct xfs_scrub *sc);
- void xrep_newbt_init_ag(struct xrep_newbt *xnr, struct xfs_scrub *sc,
- const struct xfs_owner_info *oinfo, xfs_fsblock_t alloc_hint,
- enum xfs_ag_resv_type resv);
- int xrep_newbt_init_inode(struct xrep_newbt *xnr, struct xfs_scrub *sc,
- int whichfork, const struct xfs_owner_info *oinfo);
- int xrep_newbt_alloc_blocks(struct xrep_newbt *xnr, uint64_t nr_blocks);
- int xrep_newbt_add_extent(struct xrep_newbt *xnr, struct xfs_perag *pag,
- xfs_agblock_t agbno, xfs_extlen_t len);
- void xrep_newbt_cancel(struct xrep_newbt *xnr);
- int xrep_newbt_commit(struct xrep_newbt *xnr);
- int xrep_newbt_claim_block(struct xfs_btree_cur *cur, struct xrep_newbt *xnr,
- union xfs_btree_ptr *ptr);
- unsigned int xrep_newbt_unused_blocks(struct xrep_newbt *xnr);
- #endif /* __XFS_SCRUB_NEWBT_H__ */
|