Linux Audio

Check our new training course

Loading...
v5.9
 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_qm_quotaoff;	/* turn quota off */
50	struct xfs_trans_res	tr_qm_equotaoff;/* end of turn quota off */
51	struct xfs_trans_res	tr_sb;		/* modify superblock */
52	struct xfs_trans_res	tr_fsyncts;	/* update timestamps on fsync */
53};
54
55/* shorthand way of accessing reservation structure */
56#define M_RES(mp)	(&(mp)->m_resv)
57
58/*
59 * Per-directory log reservation for any directory change.
60 * dir blocks: (1 btree block per level + data block + free block) * dblock size
61 * bmap btree: (levels + 2) * max depth * block size
62 * v2 directory blocks can be fragmented below the dirblksize down to the fsb
63 * size, so account for that in the DAENTER macros.
64 */
65#define	XFS_DIROP_LOG_RES(mp)	\
66	(XFS_FSB_TO_B(mp, XFS_DAENTER_BLOCKS(mp, XFS_DATA_FORK)) + \
67	 (XFS_FSB_TO_B(mp, XFS_DAENTER_BMAPS(mp, XFS_DATA_FORK) + 1)))
68#define	XFS_DIROP_LOG_COUNT(mp)	\
69	(XFS_DAENTER_BLOCKS(mp, XFS_DATA_FORK) + \
70	 XFS_DAENTER_BMAPS(mp, XFS_DATA_FORK) + 1)
71
72/*
73 * Various log count values.
74 */
75#define	XFS_DEFAULT_LOG_COUNT		1
76#define	XFS_DEFAULT_PERM_LOG_COUNT	2
77#define	XFS_ITRUNCATE_LOG_COUNT		2
78#define	XFS_ITRUNCATE_LOG_COUNT_REFLINK	8
79#define XFS_INACTIVE_LOG_COUNT		2
80#define	XFS_CREATE_LOG_COUNT		2
81#define	XFS_CREATE_TMPFILE_LOG_COUNT	2
82#define	XFS_MKDIR_LOG_COUNT		3
83#define	XFS_SYMLINK_LOG_COUNT		3
84#define	XFS_REMOVE_LOG_COUNT		2
85#define	XFS_LINK_LOG_COUNT		2
86#define	XFS_RENAME_LOG_COUNT		2
87#define	XFS_WRITE_LOG_COUNT		2
88#define	XFS_WRITE_LOG_COUNT_REFLINK	8
89#define	XFS_ADDAFORK_LOG_COUNT		2
90#define	XFS_ATTRINVAL_LOG_COUNT		1
91#define	XFS_ATTRSET_LOG_COUNT		3
92#define	XFS_ATTRRM_LOG_COUNT		3
93
 
 
 
 
 
 
 
 
94void xfs_trans_resv_calc(struct xfs_mount *mp, struct xfs_trans_resv *resp);
95uint xfs_allocfree_log_count(struct xfs_mount *mp, uint num_ops);
 
 
 
 
96
97#endif	/* __XFS_TRANS_RESV_H__ */
v6.9.4
  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__ */