brintos

brintos / linux-shallow public Read only

0
0
Text · 2.3 KiB · 03cadb0 Raw
82 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Copyright (c) 2022-2024 Oracle.  All Rights Reserved.4 * Author: Darrick J. Wong <djwong@kernel.org>5 */6#ifndef __XFS_SCRUB_RCBAG_BTREE_H__7#define __XFS_SCRUB_RCBAG_BTREE_H__8 9#ifdef CONFIG_XFS_BTREE_IN_MEM10 11struct xfs_buf;12struct xfs_btree_cur;13struct xfs_mount;14 15#define RCBAG_MAGIC	0x74826671	/* 'JRBG' */16 17struct rcbag_key {18	uint32_t	rbg_startblock;19	uint32_t	rbg_blockcount;20};21 22struct rcbag_rec {23	uint32_t	rbg_startblock;24	uint32_t	rbg_blockcount;25	uint64_t	rbg_refcount;26};27 28typedef __be64 rcbag_ptr_t;29 30/* reflinks only exist on crc enabled filesystems */31#define RCBAG_BLOCK_LEN	XFS_BTREE_LBLOCK_CRC_LEN32 33/*34 * Record, key, and pointer address macros for btree blocks.35 *36 * (note that some of these may appear unused, but they are used in userspace)37 */38#define RCBAG_REC_ADDR(block, index) \39	((struct rcbag_rec *) \40		((char *)(block) + RCBAG_BLOCK_LEN + \41		 (((index) - 1) * sizeof(struct rcbag_rec))))42 43#define RCBAG_KEY_ADDR(block, index) \44	((struct rcbag_key *) \45		((char *)(block) + RCBAG_BLOCK_LEN + \46		 ((index) - 1) * sizeof(struct rcbag_key)))47 48#define RCBAG_PTR_ADDR(block, index, maxrecs) \49	((rcbag_ptr_t *) \50		((char *)(block) + RCBAG_BLOCK_LEN + \51		 (maxrecs) * sizeof(struct rcbag_key) + \52		 ((index) - 1) * sizeof(rcbag_ptr_t)))53 54unsigned int rcbagbt_maxrecs(struct xfs_mount *mp, unsigned int blocklen,55		bool leaf);56 57unsigned long long rcbagbt_calc_size(unsigned long long nr_records);58 59unsigned int rcbagbt_maxlevels_possible(void);60 61int __init rcbagbt_init_cur_cache(void);62void rcbagbt_destroy_cur_cache(void);63 64struct xfs_btree_cur *rcbagbt_mem_cursor(struct xfs_mount *mp,65		struct xfs_trans *tp, struct xfbtree *xfbtree);66int rcbagbt_mem_init(struct xfs_mount *mp, struct xfbtree *xfbtree,67		struct xfs_buftarg *btp);68 69int rcbagbt_lookup_eq(struct xfs_btree_cur *cur,70		const struct xfs_rmap_irec *rmap, int *success);71int rcbagbt_get_rec(struct xfs_btree_cur *cur, struct rcbag_rec *rec, int *has);72int rcbagbt_update(struct xfs_btree_cur *cur, const struct rcbag_rec *rec);73int rcbagbt_insert(struct xfs_btree_cur *cur, const struct rcbag_rec *rec,74		int *success);75 76#else77# define rcbagbt_init_cur_cache()		078# define rcbagbt_destroy_cur_cache()		((void)0)79#endif /* CONFIG_XFS_BTREE_IN_MEM */80 81#endif /* __XFS_SCRUB_RCBAG_BTREE_H__ */82