11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	Definitions of structures for vfsv0 quota format
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _LINUX_QUOTAIO_V2_H
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _LINUX_QUOTAIO_V2_H
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/types.h>
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/quota.h>
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Definitions of magics and versions of current quota files
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define V2_INITQMAGICS {\
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	0xd9c01f11,	/* USRQUOTA */\
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	0xd9c01927	/* GRPQUOTA */\
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define V2_INITQVERSIONS {\
20498c60153ebb8889d8944591383c5c12af1127d4Jan Kara	1,		/* USRQUOTA */\
21498c60153ebb8889d8944591383c5c12af1127d4Jan Kara	1		/* GRPQUOTA */\
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
241ccd14b9c271c1ac6eec5c5ec5def433100e7248Jan Kara/* First generic header */
251ccd14b9c271c1ac6eec5c5ec5def433100e7248Jan Karastruct v2_disk_dqheader {
261ccd14b9c271c1ac6eec5c5ec5def433100e7248Jan Kara	__le32 dqh_magic;	/* Magic number identifying file */
271ccd14b9c271c1ac6eec5c5ec5def433100e7248Jan Kara	__le32 dqh_version;	/* File version */
281ccd14b9c271c1ac6eec5c5ec5def433100e7248Jan Kara};
291ccd14b9c271c1ac6eec5c5ec5def433100e7248Jan Kara
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The following structure defines the format of the disk quota file
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * (as it appears on disk) - the file is a radix tree whose leaves point
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * to blocks of these structures.
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
35498c60153ebb8889d8944591383c5c12af1127d4Jan Karastruct v2r0_disk_dqblk {
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le32 dqb_id;		/* id this quota applies to */
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le32 dqb_ihardlimit;	/* absolute limit on allocated inodes */
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le32 dqb_isoftlimit;	/* preferred inode limit */
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le32 dqb_curinodes;	/* current # allocated inodes */
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le32 dqb_bhardlimit;	/* absolute limit on disk space (in QUOTABLOCK_SIZE) */
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le32 dqb_bsoftlimit;	/* preferred limit on disk space (in QUOTABLOCK_SIZE) */
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le64 dqb_curspace;	/* current space occupied (in bytes) */
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le64 dqb_btime;	/* time limit for excessive disk use */
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le64 dqb_itime;	/* time limit for excessive inode use */
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
47498c60153ebb8889d8944591383c5c12af1127d4Jan Karastruct v2r1_disk_dqblk {
48498c60153ebb8889d8944591383c5c12af1127d4Jan Kara	__le32 dqb_id;		/* id this quota applies to */
49498c60153ebb8889d8944591383c5c12af1127d4Jan Kara	__le32 dqb_pad;
50498c60153ebb8889d8944591383c5c12af1127d4Jan Kara	__le64 dqb_ihardlimit;	/* absolute limit on allocated inodes */
51498c60153ebb8889d8944591383c5c12af1127d4Jan Kara	__le64 dqb_isoftlimit;	/* preferred inode limit */
52498c60153ebb8889d8944591383c5c12af1127d4Jan Kara	__le64 dqb_curinodes;	/* current # allocated inodes */
53498c60153ebb8889d8944591383c5c12af1127d4Jan Kara	__le64 dqb_bhardlimit;	/* absolute limit on disk space (in QUOTABLOCK_SIZE) */
54498c60153ebb8889d8944591383c5c12af1127d4Jan Kara	__le64 dqb_bsoftlimit;	/* preferred limit on disk space (in QUOTABLOCK_SIZE) */
55498c60153ebb8889d8944591383c5c12af1127d4Jan Kara	__le64 dqb_curspace;	/* current space occupied (in bytes) */
56498c60153ebb8889d8944591383c5c12af1127d4Jan Kara	__le64 dqb_btime;	/* time limit for excessive disk use */
57498c60153ebb8889d8944591383c5c12af1127d4Jan Kara	__le64 dqb_itime;	/* time limit for excessive inode use */
58498c60153ebb8889d8944591383c5c12af1127d4Jan Kara};
59498c60153ebb8889d8944591383c5c12af1127d4Jan Kara
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Header with type and version specific information */
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct v2_disk_dqinfo {
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le32 dqi_bgrace;	/* Time before block soft limit becomes hard limit */
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le32 dqi_igrace;	/* Time before inode soft limit becomes hard limit */
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le32 dqi_flags;	/* Flags for quotafile (DQF_*) */
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le32 dqi_blocks;	/* Number of blocks in file */
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le32 dqi_free_blk;	/* Number of first free block in the list */
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__le32 dqi_free_entry;	/* Number of block with at least one free entry */
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define V2_DQINFOOFF	sizeof(struct v2_disk_dqheader)	/* Offset of info header in file */
711ccd14b9c271c1ac6eec5c5ec5def433100e7248Jan Kara#define V2_DQBLKSIZE_BITS 10				/* Size of leaf block in tree */
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _LINUX_QUOTAIO_V2_H */
74