brintos

brintos / linux-shallow public Read only

0
0
Text · 4.1 KiB · 0554b9d Raw
106 lines · c
1// SPDX-License-Identifier: GPL-2.02/*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 indicating18				 * 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 buffer37						 * invalidation */38	struct xfs_trans_res	tr_attrsetm;	/* set/create an attribute at39						 * mount time */40	struct xfs_trans_res	tr_attrsetrt;	/* set/create an attribute at41						 * 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 size59 * bmap btree: (levels + 2) * max depth * block size60 * v2 directory blocks can be fragmented below the dirblksize down to the fsb61 * 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		174#define	XFS_DEFAULT_PERM_LOG_COUNT	275#define	XFS_ITRUNCATE_LOG_COUNT		276#define XFS_INACTIVE_LOG_COUNT		277#define	XFS_CREATE_LOG_COUNT		278#define	XFS_CREATE_TMPFILE_LOG_COUNT	279#define	XFS_MKDIR_LOG_COUNT		380#define	XFS_SYMLINK_LOG_COUNT		381#define	XFS_REMOVE_LOG_COUNT		282#define	XFS_LINK_LOG_COUNT		283#define	XFS_RENAME_LOG_COUNT		284#define	XFS_WRITE_LOG_COUNT		285#define	XFS_ADDAFORK_LOG_COUNT		286#define	XFS_ATTRINVAL_LOG_COUNT		187#define	XFS_ATTRSET_LOG_COUNT		388#define	XFS_ATTRRM_LOG_COUNT		389 90/*91 * Original log operation counts were overestimated in the early days of92 * reflink.  These are retained here purely for minimum log size calculations93 * and must not be used for runtime reservations.94 */95#define	XFS_ITRUNCATE_LOG_COUNT_REFLINK	896#define	XFS_WRITE_LOG_COUNT_REFLINK	897 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__ */106