69 lines
1.9 KiB
C
69 lines
1.9 KiB
C
|
// 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 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;
|
||
|
|
||
|
/* 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__ */
|