brintos

brintos / linux-shallow public Read only

0
0
Text · 2.2 KiB · 1c38257 Raw
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