quotaio_v2.h revision f239fefc14226f655477179801c734749a04d4b4
1bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick/*
2bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick *
3bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick *	Header file for disk format of new quotafile format
4bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick *
5bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick */
6bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick
7bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick#ifndef GUARD_QUOTAIO_V2_H
8bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick#define GUARD_QUOTAIO_V2_H
9bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick
10bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick#include <sys/types.h>
11bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick#include "quota.h"
12bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick
13bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick/* Offset of info header in file */
14bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick#define V2_DQINFOOFF		sizeof(struct v2_disk_dqheader)
15bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick#define INIT_V2_VERSIONS	{ 1, 1}
16bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick
17bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanickstruct v2_disk_dqheader {
18bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqh_magic;	/* Magic number identifying file */
19bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqh_version;	/* File version */
20bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick} __attribute__ ((packed));
21bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick
22bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick/* Flags for version specific files */
23bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick#define V2_DQF_MASK  0x0000	/* Mask for all valid ondisk flags */
24497baf4e4a6a0a2f247c7bfb9bf69a2b93c2c19fIan Romanick
25bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick/* Header with type and version specific information */
26bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanickstruct v2_disk_dqinfo {
27bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqi_bgrace;	/* Time before block soft limit becomes
28bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick				 * hard limit */
29bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqi_igrace;	/* Time before inode soft limit becomes
30bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick				 * hard limit */
31bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqi_flags;	/* Flags for quotafile (DQF_*) */
32bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqi_blocks;	/* Number of blocks in file */
33bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqi_free_blk;	/* Number of first free block in the list */
34bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqi_free_entry;	/* Number of block with at least one
35bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick					 * free entry */
36bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick} __attribute__ ((packed));
37bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick
38bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick/* Structure of quota for one user on disk */
39bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanickstruct v2r0_disk_dqblk {
40bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqb_id;	/* id this quota applies to */
41bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqb_ihardlimit;	/* absolute limit on allocated inodes */
42bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqb_isoftlimit;	/* preferred inode limit */
43bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqb_curinodes;	/* current # allocated inodes */
44bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqb_bhardlimit;	/* absolute limit on disk space
45bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick					 * (in QUOTABLOCK_SIZE) */
46bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqb_bsoftlimit;	/* preferred limit on disk space
47bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick					 * (in QUOTABLOCK_SIZE) */
48bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int64_t dqb_curspace;	/* current space occupied (in bytes) */
49bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int64_t dqb_btime;	/* time limit for excessive disk use */
50bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int64_t dqb_itime;	/* time limit for excessive inode use */
51bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick} __attribute__ ((packed));
52bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick
53bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanickstruct v2r1_disk_dqblk {
54bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqb_id;	/* id this quota applies to */
55bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t dqb_pad;
56bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int64_t dqb_ihardlimit;	/* absolute limit on allocated inodes */
57bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int64_t dqb_isoftlimit;	/* preferred inode limit */
58bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int64_t dqb_curinodes;	/* current # allocated inodes */
59bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int64_t dqb_bhardlimit;	/* absolute limit on disk space
60bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick					 * (in QUOTABLOCK_SIZE) */
61bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int64_t dqb_bsoftlimit;	/* preferred limit on disk space
62bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick					 * (in QUOTABLOCK_SIZE) */
63bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int64_t dqb_curspace;	/* current space occupied (in bytes) */
64bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int64_t dqb_btime;	/* time limit for excessive disk use */
65bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int64_t dqb_itime;	/* time limit for excessive inode use */
66bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick} __attribute__ ((packed));
67bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick
68bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick/* Structure of quota for communication with kernel */
69bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanickstruct v2_kern_dqblk {
70bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	unsigned int dqb_ihardlimit;
71bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	unsigned int dqb_isoftlimit;
72bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	unsigned int dqb_curinodes;
73bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	unsigned int dqb_bhardlimit;
74bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	unsigned int dqb_bsoftlimit;
75bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	qsize_t dqb_curspace;
76bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	time_t dqb_btime;
77bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	time_t dqb_itime;
78bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick};
79bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick
80bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick/* Structure of quotafile info for communication with kernel (obsolete) */
81bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanickstruct v2_kern_dqinfo {
82bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	unsigned int dqi_bgrace;
83bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	unsigned int dqi_igrace;
84bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	unsigned int dqi_flags;
85bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	unsigned int dqi_blocks;
86bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	unsigned int dqi_free_blk;
87bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	unsigned int dqi_free_entry;
88d67df5dd9db1cede92f1b177c890f83809bb4582Aras Pranckevicius};
89d67df5dd9db1cede92f1b177c890f83809bb4582Aras Pranckevicius
90d67df5dd9db1cede92f1b177c890f83809bb4582Aras Pranckevicius/* Structure with gathered statistics from kernel */
91d3073f58c17d8675a2ecdd5dfa83e5520c78e1a8Kenneth Graunkestruct v2_dqstats {
92bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t lookups;
93bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t drops;
94bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t reads;
95bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t writes;
96bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t cache_hits;
97bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t allocated_dquots;
98bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t free_dquots;
99bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t syncs;
100bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick	u_int32_t version;
101bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick};
102bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick
103bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick#endif
104bfe3fbb38e0a3ae7c1efb74282628c2cc5abc3e0Ian Romanick