cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

xfs_refcount_btree.h (2265B)


      1// SPDX-License-Identifier: GPL-2.0+
      2/*
      3 * Copyright (C) 2016 Oracle.  All Rights Reserved.
      4 * Author: Darrick J. Wong <darrick.wong@oracle.com>
      5 */
      6#ifndef __XFS_REFCOUNT_BTREE_H__
      7#define	__XFS_REFCOUNT_BTREE_H__
      8
      9/*
     10 * Reference Count Btree on-disk structures
     11 */
     12
     13struct xfs_buf;
     14struct xfs_btree_cur;
     15struct xfs_mount;
     16struct xfs_perag;
     17struct xbtree_afakeroot;
     18
     19/*
     20 * Btree block header size
     21 */
     22#define XFS_REFCOUNT_BLOCK_LEN	XFS_BTREE_SBLOCK_CRC_LEN
     23
     24/*
     25 * Record, key, and pointer address macros for btree blocks.
     26 *
     27 * (note that some of these may appear unused, but they are used in userspace)
     28 */
     29#define XFS_REFCOUNT_REC_ADDR(block, index) \
     30	((struct xfs_refcount_rec *) \
     31		((char *)(block) + \
     32		 XFS_REFCOUNT_BLOCK_LEN + \
     33		 (((index) - 1) * sizeof(struct xfs_refcount_rec))))
     34
     35#define XFS_REFCOUNT_KEY_ADDR(block, index) \
     36	((struct xfs_refcount_key *) \
     37		((char *)(block) + \
     38		 XFS_REFCOUNT_BLOCK_LEN + \
     39		 ((index) - 1) * sizeof(struct xfs_refcount_key)))
     40
     41#define XFS_REFCOUNT_PTR_ADDR(block, index, maxrecs) \
     42	((xfs_refcount_ptr_t *) \
     43		((char *)(block) + \
     44		 XFS_REFCOUNT_BLOCK_LEN + \
     45		 (maxrecs) * sizeof(struct xfs_refcount_key) + \
     46		 ((index) - 1) * sizeof(xfs_refcount_ptr_t)))
     47
     48extern struct xfs_btree_cur *xfs_refcountbt_init_cursor(struct xfs_mount *mp,
     49		struct xfs_trans *tp, struct xfs_buf *agbp,
     50		struct xfs_perag *pag);
     51struct xfs_btree_cur *xfs_refcountbt_stage_cursor(struct xfs_mount *mp,
     52		struct xbtree_afakeroot *afake, struct xfs_perag *pag);
     53extern int xfs_refcountbt_maxrecs(int blocklen, bool leaf);
     54extern void xfs_refcountbt_compute_maxlevels(struct xfs_mount *mp);
     55
     56extern xfs_extlen_t xfs_refcountbt_calc_size(struct xfs_mount *mp,
     57		unsigned long long len);
     58extern xfs_extlen_t xfs_refcountbt_max_size(struct xfs_mount *mp,
     59		xfs_agblock_t agblocks);
     60
     61extern int xfs_refcountbt_calc_reserves(struct xfs_mount *mp,
     62		struct xfs_trans *tp, struct xfs_perag *pag, xfs_extlen_t *ask,
     63		xfs_extlen_t *used);
     64
     65void xfs_refcountbt_commit_staged_btree(struct xfs_btree_cur *cur,
     66		struct xfs_trans *tp, struct xfs_buf *agbp);
     67
     68unsigned int xfs_refcountbt_maxlevels_ondisk(void);
     69
     70int __init xfs_refcountbt_init_cur_cache(void);
     71void xfs_refcountbt_destroy_cur_cache(void);
     72
     73#endif	/* __XFS_REFCOUNT_BTREE_H__ */