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