mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 21:51:40 +00:00
32080a9b9b
Rebuild the reverse mapping btree from all primary metadata. This first patch establishes the bare mechanics of finding records and putting together a new ondisk tree; more complex pieces are needed to make it work properly. Link: Documentation/filesystems/xfs-online-fsck-design.rst Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
76 lines
2.1 KiB
C
76 lines
2.1 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 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__ */
|