brintos

brintos / linux-shallow public Read only

0
0
Text · 2.1 KiB · 3d804d3 Raw
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