76 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * Copyright (c) 2021-2024 Oracle. All Rights Reserved.4 * Author: Darrick J. Wong <djwong@kernel.org>5 */6#ifndef __XFS_BTREE_MEM_H__7#define __XFS_BTREE_MEM_H__8 9typedef uint64_t xfbno_t;10 11#define XFBNO_BLOCKSIZE (XMBUF_BLOCKSIZE)12#define XFBNO_BBSHIFT (XMBUF_BLOCKSHIFT - BBSHIFT)13#define XFBNO_BBSIZE (XFBNO_BLOCKSIZE >> BBSHIFT)14 15static inline xfs_daddr_t xfbno_to_daddr(xfbno_t blkno)16{17 return blkno << XFBNO_BBSHIFT;18}19 20static inline xfbno_t xfs_daddr_to_xfbno(xfs_daddr_t daddr)21{22 return daddr >> XFBNO_BBSHIFT;23}24 25struct xfbtree {26 /* buffer cache target for this in-memory btree */27 struct xfs_buftarg *target;28 29 /* Highest block number that has been written to. */30 xfbno_t highest_bno;31 32 /* Owner of this btree. */33 unsigned long long owner;34 35 /* Btree header */36 union xfs_btree_ptr root;37 unsigned int nlevels;38 39 /* Minimum and maximum records per block. */40 unsigned int maxrecs[2];41 unsigned int minrecs[2];42};43 44#ifdef CONFIG_XFS_BTREE_IN_MEM45static inline bool xfbtree_verify_bno(struct xfbtree *xfbt, xfbno_t bno)46{47 return xmbuf_verify_daddr(xfbt->target, xfbno_to_daddr(bno));48}49 50void xfbtree_set_root(struct xfs_btree_cur *cur,51 const union xfs_btree_ptr *ptr, int inc);52void xfbtree_init_ptr_from_cur(struct xfs_btree_cur *cur,53 union xfs_btree_ptr *ptr);54struct xfs_btree_cur *xfbtree_dup_cursor(struct xfs_btree_cur *cur);55 56int xfbtree_get_minrecs(struct xfs_btree_cur *cur, int level);57int xfbtree_get_maxrecs(struct xfs_btree_cur *cur, int level);58 59int xfbtree_alloc_block(struct xfs_btree_cur *cur,60 const union xfs_btree_ptr *start, union xfs_btree_ptr *ptr,61 int *stat);62int xfbtree_free_block(struct xfs_btree_cur *cur, struct xfs_buf *bp);63 64/* Callers must set xfbt->target and xfbt->owner before calling this */65int xfbtree_init(struct xfs_mount *mp, struct xfbtree *xfbt,66 struct xfs_buftarg *btp, const struct xfs_btree_ops *ops);67void xfbtree_destroy(struct xfbtree *xfbt);68 69int xfbtree_trans_commit(struct xfbtree *xfbt, struct xfs_trans *tp);70void xfbtree_trans_cancel(struct xfbtree *xfbt, struct xfs_trans *tp);71#else72# define xfbtree_verify_bno(...) (false)73#endif /* CONFIG_XFS_BTREE_IN_MEM */74 75#endif /* __XFS_BTREE_MEM_H__ */76