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_trans_resv.h (4186B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
      4 * All Rights Reserved.
      5 */
      6#ifndef	__XFS_TRANS_RESV_H__
      7#define	__XFS_TRANS_RESV_H__
      8
      9struct xfs_mount;
     10
     11/*
     12 * structure for maintaining pre-calculated transaction reservations.
     13 */
     14struct xfs_trans_res {
     15	uint	tr_logres;	/* log space unit in bytes per log ticket */
     16	int	tr_logcount;	/* number of log operations per log ticket */
     17	int	tr_logflags;	/* log flags, currently only used for indicating
     18				 * a reservation request is permanent or not */
     19};
     20
     21struct xfs_trans_resv {
     22	struct xfs_trans_res	tr_write;	/* extent alloc trans */
     23	struct xfs_trans_res	tr_itruncate;	/* truncate trans */
     24	struct xfs_trans_res	tr_rename;	/* rename trans */
     25	struct xfs_trans_res	tr_link;	/* link trans */
     26	struct xfs_trans_res	tr_remove;	/* unlink trans */
     27	struct xfs_trans_res	tr_symlink;	/* symlink trans */
     28	struct xfs_trans_res	tr_create;	/* create trans */
     29	struct xfs_trans_res	tr_create_tmpfile; /* create O_TMPFILE trans */
     30	struct xfs_trans_res	tr_mkdir;	/* mkdir trans */
     31	struct xfs_trans_res	tr_ifree;	/* inode free trans */
     32	struct xfs_trans_res	tr_ichange;	/* inode update trans */
     33	struct xfs_trans_res	tr_growdata;	/* fs data section grow trans */
     34	struct xfs_trans_res	tr_addafork;	/* add inode attr fork trans */
     35	struct xfs_trans_res	tr_writeid;	/* write setuid/setgid file */
     36	struct xfs_trans_res	tr_attrinval;	/* attr fork buffer
     37						 * invalidation */
     38	struct xfs_trans_res	tr_attrsetm;	/* set/create an attribute at
     39						 * mount time */
     40	struct xfs_trans_res	tr_attrsetrt;	/* set/create an attribute at
     41						 * runtime */
     42	struct xfs_trans_res	tr_attrrm;	/* remove an attribute */
     43	struct xfs_trans_res	tr_clearagi;	/* clear agi unlinked bucket */
     44	struct xfs_trans_res	tr_growrtalloc;	/* grow realtime allocations */
     45	struct xfs_trans_res	tr_growrtzero;	/* grow realtime zeroing */
     46	struct xfs_trans_res	tr_growrtfree;	/* grow realtime freeing */
     47	struct xfs_trans_res	tr_qm_setqlim;	/* adjust quota limits */
     48	struct xfs_trans_res	tr_qm_dqalloc;	/* allocate quota on disk */
     49	struct xfs_trans_res	tr_sb;		/* modify superblock */
     50	struct xfs_trans_res	tr_fsyncts;	/* update timestamps on fsync */
     51};
     52
     53/* shorthand way of accessing reservation structure */
     54#define M_RES(mp)	(&(mp)->m_resv)
     55
     56/*
     57 * Per-directory log reservation for any directory change.
     58 * dir blocks: (1 btree block per level + data block + free block) * dblock size
     59 * bmap btree: (levels + 2) * max depth * block size
     60 * v2 directory blocks can be fragmented below the dirblksize down to the fsb
     61 * size, so account for that in the DAENTER macros.
     62 */
     63#define	XFS_DIROP_LOG_RES(mp)	\
     64	(XFS_FSB_TO_B(mp, XFS_DAENTER_BLOCKS(mp, XFS_DATA_FORK)) + \
     65	 (XFS_FSB_TO_B(mp, XFS_DAENTER_BMAPS(mp, XFS_DATA_FORK) + 1)))
     66#define	XFS_DIROP_LOG_COUNT(mp)	\
     67	(XFS_DAENTER_BLOCKS(mp, XFS_DATA_FORK) + \
     68	 XFS_DAENTER_BMAPS(mp, XFS_DATA_FORK) + 1)
     69
     70/*
     71 * Various log count values.
     72 */
     73#define	XFS_DEFAULT_LOG_COUNT		1
     74#define	XFS_DEFAULT_PERM_LOG_COUNT	2
     75#define	XFS_ITRUNCATE_LOG_COUNT		2
     76#define XFS_INACTIVE_LOG_COUNT		2
     77#define	XFS_CREATE_LOG_COUNT		2
     78#define	XFS_CREATE_TMPFILE_LOG_COUNT	2
     79#define	XFS_MKDIR_LOG_COUNT		3
     80#define	XFS_SYMLINK_LOG_COUNT		3
     81#define	XFS_REMOVE_LOG_COUNT		2
     82#define	XFS_LINK_LOG_COUNT		2
     83#define	XFS_RENAME_LOG_COUNT		2
     84#define	XFS_WRITE_LOG_COUNT		2
     85#define	XFS_ADDAFORK_LOG_COUNT		2
     86#define	XFS_ATTRINVAL_LOG_COUNT		1
     87#define	XFS_ATTRSET_LOG_COUNT		3
     88#define	XFS_ATTRRM_LOG_COUNT		3
     89
     90/*
     91 * Original log operation counts were overestimated in the early days of
     92 * reflink.  These are retained here purely for minimum log size calculations
     93 * and must not be used for runtime reservations.
     94 */
     95#define	XFS_ITRUNCATE_LOG_COUNT_REFLINK	8
     96#define	XFS_WRITE_LOG_COUNT_REFLINK	8
     97
     98void xfs_trans_resv_calc(struct xfs_mount *mp, struct xfs_trans_resv *resp);
     99uint xfs_allocfree_block_count(struct xfs_mount *mp, uint num_ops);
    100
    101unsigned int xfs_calc_itruncate_reservation_minlogsize(struct xfs_mount *mp);
    102unsigned int xfs_calc_write_reservation_minlogsize(struct xfs_mount *mp);
    103unsigned int xfs_calc_qm_dqalloc_reservation_minlogsize(struct xfs_mount *mp);
    104
    105#endif	/* __XFS_TRANS_RESV_H__ */