| /* |
| * |
| * Header file for disk format of new quotafile format |
| * |
| * Copied essential definitions and structures for mkfs.f2fs from quotaio.h |
| * |
| * Aditya Kali <adityakali@google.com> |
| * Jan Kara <jack@suse.cz> |
| * Hyojun Kim <hyojun@google.com> - Ported to f2fs-tools |
| * |
| */ |
| #ifndef F2FS_QUOTA_H |
| #define F2FS_QUOTA_H |
| |
| enum quota_type { |
| USRQUOTA = 0, |
| GRPQUOTA = 1, |
| PRJQUOTA = 2, |
| MAXQUOTAS = 3, |
| }; |
| |
| #if MAXQUOTAS > 32 |
| #error "cannot have more than 32 quota types to fit in qtype_bits" |
| #endif |
| |
| #define QUOTA_USR_BIT (1 << USRQUOTA) |
| #define QUOTA_GRP_BIT (1 << GRPQUOTA) |
| #define QUOTA_PRJ_BIT (1 << PRJQUOTA) |
| #define QUOTA_ALL_BIT (QUOTA_USR_BIT | QUOTA_GRP_BIT | QUOTA_PRJ_BIT) |
| |
| /* |
| * Definitions of magics and versions of current quota files |
| */ |
| #define INITQMAGICS {\ |
| 0xd9c01f11, /* USRQUOTA */\ |
| 0xd9c01927, /* GRPQUOTA */\ |
| 0xd9c03f14 /* PRJQUOTA */\ |
| } |
| |
| #define V2_DQINFOOFF sizeof(struct v2_disk_dqheader) /* Offset of info header in file */ |
| |
| #define MAX_IQ_TIME 604800 /* (7*24*60*60) 1 week */ |
| #define MAX_DQ_TIME 604800 /* (7*24*60*60) 1 week */ |
| |
| #define QT_TREEOFF 1 /* Offset of tree in file in blocks */ |
| |
| #pragma pack(push, 1) |
| struct v2_disk_dqheader { |
| u_int32_t dqh_magic; /* Magic number identifying file */ |
| u_int32_t dqh_version; /* File version */ |
| } __attribute__ ((packed)); |
| |
| /* Header with type and version specific information */ |
| struct v2_disk_dqinfo { |
| u_int32_t dqi_bgrace; /* Time before block soft limit becomes hard limit */ |
| u_int32_t dqi_igrace; /* Time before inode soft limit becomes hard limit */ |
| u_int32_t dqi_flags; /* Flags for quotafile (DQF_*) */ |
| u_int32_t dqi_blocks; /* Number of blocks in file */ |
| u_int32_t dqi_free_blk; /* Number of first free block in the list */ |
| u_int32_t dqi_free_entry; /* Number of block with at least one free entry */ |
| } __attribute__ ((packed)); |
| |
| struct v2r1_disk_dqblk { |
| __le32 dqb_id; /* id this quota applies to */ |
| __le32 dqb_pad; |
| __le64 dqb_ihardlimit; /* absolute limit on allocated inodes */ |
| __le64 dqb_isoftlimit; /* preferred inode limit */ |
| __le64 dqb_curinodes; /* current # allocated inodes */ |
| __le64 dqb_bhardlimit; /* absolute limit on disk space |
| * (in QUOTABLOCK_SIZE) */ |
| __le64 dqb_bsoftlimit; /* preferred limit on disk space |
| * (in QUOTABLOCK_SIZE) */ |
| __le64 dqb_curspace; /* current space occupied (in bytes) */ |
| __le64 dqb_btime; /* time limit for excessive disk use */ |
| __le64 dqb_itime; /* time limit for excessive inode use */ |
| } __attribute__ ((packed)); |
| #pragma pack(pop) |
| |
| #endif |