aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4/ext4.h
diff options
context:
space:
mode:
authorAditya Kali <adityakali@google.com>2012-07-22 20:21:31 -0400
committerTheodore Ts'o <tytso@mit.edu>2012-07-22 20:21:31 -0400
commit7c319d328505b7781b65238ae9f53293b5ee0ca8 (patch)
tree3a0e0c521eee02faa5a87738ac750f51d199371f /fs/ext4/ext4.h
parent4bd809dbbf177ad0c450d702466b1da63e1b4b7e (diff)
ext4: make quota as first class supported feature
This patch adds support for quotas as a first class feature in ext4; which is to say, the quota files are stored in hidden inodes as file system metadata, instead of as separate files visible in the file system directory hierarchy. It is based on the proposal at: https://ext4.wiki.kernel.org/index.php/Design_For_1st_Class_Quota_in_Ext4 This patch introduces a new feature - EXT4_FEATURE_RO_COMPAT_QUOTA which, when turned on, enables quota accounting at mount time iteself. Also, the quota inodes are stored in two additional superblock fields. Some changes introduced by this patch that should be pointed out are: 1) Two new ext4-superblock fields - s_usr_quota_inum and s_grp_quota_inum for storing the quota inodes in use. 2) Default quota inodes are: inode#3 for tracking userquota and inode#4 for tracking group quota. The superblock fields can be set to use other inodes as well. 3) If the QUOTA feature and corresponding quota inodes are set in superblock, the quota usage tracking is turned on at mount time. On 'quotaon' ioctl, the quota limits enforcement is turned on. 'quotaoff' ioctl turns off only the limits enforcement in this case. 4) When QUOTA feature is in use, the quota mount options 'quota', 'usrquota', 'grpquota' are ignored by the kernel. 5) mke2fs or tune2fs can be used to set the QUOTA feature and initialize quota inodes. The default reserved inodes will not be visible to user as regular files. 6) The quota-tools will need to be modified to support hidden quota files on ext4. E2fsprogs will also include support for creating and fixing quota files. 7) Support is only for the new V2 quota file format. Tested-by: Jan Kara <jack@suse.cz> Reviewed-by: Jan Kara <jack@suse.cz> Reviewed-by: Johann Lombardi <johann@whamcloud.com> Signed-off-by: Aditya Kali <adityakali@google.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/ext4.h')
-rw-r--r--fs/ext4/ext4.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 4a49f8225d0b..1610e808ebe3 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -1315,6 +1315,8 @@ static inline struct timespec ext4_current_time(struct inode *inode)
1315static inline int ext4_valid_inum(struct super_block *sb, unsigned long ino) 1315static inline int ext4_valid_inum(struct super_block *sb, unsigned long ino)
1316{ 1316{
1317 return ino == EXT4_ROOT_INO || 1317 return ino == EXT4_ROOT_INO ||
1318 ino == EXT4_USR_QUOTA_INO ||
1319 ino == EXT4_GRP_QUOTA_INO ||
1318 ino == EXT4_JOURNAL_INO || 1320 ino == EXT4_JOURNAL_INO ||
1319 ino == EXT4_RESIZE_INO || 1321 ino == EXT4_RESIZE_INO ||
1320 (ino >= EXT4_FIRST_INO(sb) && 1322 (ino >= EXT4_FIRST_INO(sb) &&
@@ -1497,7 +1499,8 @@ static inline void ext4_clear_state_flags(struct ext4_inode_info *ei)
1497 EXT4_FEATURE_RO_COMPAT_BTREE_DIR |\ 1499 EXT4_FEATURE_RO_COMPAT_BTREE_DIR |\
1498 EXT4_FEATURE_RO_COMPAT_HUGE_FILE |\ 1500 EXT4_FEATURE_RO_COMPAT_HUGE_FILE |\
1499 EXT4_FEATURE_RO_COMPAT_BIGALLOC |\ 1501 EXT4_FEATURE_RO_COMPAT_BIGALLOC |\
1500 EXT4_FEATURE_RO_COMPAT_METADATA_CSUM) 1502 EXT4_FEATURE_RO_COMPAT_METADATA_CSUM|\
1503 EXT4_FEATURE_RO_COMPAT_QUOTA)
1501 1504
1502/* 1505/*
1503 * Default values for user and/or group using reserved blocks 1506 * Default values for user and/or group using reserved blocks