summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAditya Kali <adityakali@google.com>2011-02-15 14:27:27 -0800
committerTheodore Ts'o <tytso@mit.edu>2011-02-25 18:31:52 -0500
commit0edcc2702106ef8ea0d4ab60ef06c0c38b0b87ee (patch)
treee2f02cc1a348c4e418242b38f912a3b85f3e8ebd
parent855a77a19704ef7e0acd542cce19a6e8ee07582d (diff)
downloade2fsprogs-0edcc2702106ef8ea0d4ab60ef06c0c38b0b87ee.tar.gz
e2fsprogs: reserving code points for new ext4 quota feature
This patch adds support for detecting the new 'quota' feature in ext4. The patch reserves code points for usr and group quota inodes and also for the feature flag EXT4_FEATURE_RO_COMPAT_QUOTA. Signed-off-by: Aditya Kali <adityakali@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r--debugfs/set_fields.c2
-rw-r--r--e2fsck/message.c4
-rw-r--r--ext2ed/inode_com.c8
-rw-r--r--lib/blkid/probe.h1
-rw-r--r--lib/e2p/feature.c2
-rw-r--r--lib/e2p/ls.c6
-rw-r--r--lib/ext2fs/ext2_fs.h9
-rw-r--r--lib/ext2fs/swapfs.c2
-rw-r--r--lib/ext2fs/tst_super_size.c2
9 files changed, 27 insertions, 9 deletions
diff --git a/debugfs/set_fields.c b/debugfs/set_fields.c
index db1a99b7..3b401176 100644
--- a/debugfs/set_fields.c
+++ b/debugfs/set_fields.c
@@ -140,6 +140,8 @@ static struct field_set_info super_fields[] = {
parse_uint },
{ "snapshot_list", &set_sb.s_snapshot_list, 4, parse_uint },
{ "mount_opts", &set_sb.s_mount_opts, 64, parse_string },
+ { "usr_quota_inum", &set_sb.s_usr_quota_inum, 4, parse_uint },
+ { "grp_quota_inum", &set_sb.s_grp_quota_inum, 4, parse_uint },
{ 0, 0, 0, 0 }
};
diff --git a/e2fsck/message.c b/e2fsck/message.c
index 9aaedc50..74ab155c 100644
--- a/e2fsck/message.c
+++ b/e2fsck/message.c
@@ -151,8 +151,8 @@ static const char *special_inode_name[] =
N_("<The NULL inode>"), /* 0 */
N_("<The bad blocks inode>"), /* 1 */
"/", /* 2 */
- N_("<The ACL index inode>"), /* 3 */
- N_("<The ACL data inode>"), /* 4 */
+ N_("<The user quota inode>"), /* 3 */
+ N_("<The group quota inode>"), /* 4 */
N_("<The boot loader inode>"), /* 5 */
N_("<The undelete directory inode>"), /* 6 */
N_("<The group descriptor inode>"), /* 7 */
diff --git a/ext2ed/inode_com.c b/ext2ed/inode_com.c
index 843286c5..8d4b9f33 100644
--- a/ext2ed/inode_com.c
+++ b/ext2ed/inode_com.c
@@ -222,11 +222,11 @@ void type_ext2_inode___show (char *command_line)
case EXT2_ROOT_INO:
wprintw (show_win,"Root inode - ");
break;
- case EXT2_ACL_IDX_INO:
- wprintw (show_win,"ACL index inode - ");
+ case EXT4_USR_QUOTA_INO:
+ wprintw (show_win,"User quota inode - ");
break;
- case EXT2_ACL_DATA_INO:
- wprintw (show_win,"ACL data inode - ");
+ case EXT4_GRP_QUOTA_INO:
+ wprintw (show_win,"Group quota inode - ");
break;
case EXT2_BOOT_LOADER_INO:
wprintw (show_win,"Boot loader inode - ");
diff --git a/lib/blkid/probe.h b/lib/blkid/probe.h
index 37fc9c06..37e80eff 100644
--- a/lib/blkid/probe.h
+++ b/lib/blkid/probe.h
@@ -109,6 +109,7 @@ struct ext2_super_block {
#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010
#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020
#define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040
+#define EXT4_FEATURE_RO_COMPAT_QUOTA 0x0100
/* for s_feature_incompat */
#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002
diff --git a/lib/e2p/feature.c b/lib/e2p/feature.c
index c7f8a359..9324199b 100644
--- a/lib/e2p/feature.c
+++ b/lib/e2p/feature.c
@@ -55,6 +55,8 @@ static struct feature feature_list[] = {
"dir_nlink" },
{ E2P_FEATURE_RO_INCOMPAT, EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE,
"extra_isize" },
+ { E2P_FEATURE_RO_INCOMPAT, EXT4_FEATURE_RO_COMPAT_QUOTA,
+ "quota" },
{ E2P_FEATURE_INCOMPAT, EXT2_FEATURE_INCOMPAT_COMPRESSION,
"compression" },
diff --git a/lib/e2p/ls.c b/lib/e2p/ls.c
index 5ef80988..8b8360a8 100644
--- a/lib/e2p/ls.c
+++ b/lib/e2p/ls.c
@@ -374,6 +374,12 @@ void list_super2(struct ext2_super_block * sb, FILE *f)
fprintf(f, "Last error block #: %llu\n",
sb->s_last_error_block);
}
+ if (sb->s_usr_quota_inum)
+ fprintf(f, "User quota inode: %u\n",
+ sb->s_usr_quota_inum);
+ if (sb->s_grp_quota_inum)
+ fprintf(f, "Group quota inode: %u\n",
+ sb->s_grp_quota_inum);
}
void list_super (struct ext2_super_block * s)
diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h
index afd33a93..f396a10f 100644
--- a/lib/ext2fs/ext2_fs.h
+++ b/lib/ext2fs/ext2_fs.h
@@ -44,8 +44,8 @@
*/
#define EXT2_BAD_INO 1 /* Bad blocks inode */
#define EXT2_ROOT_INO 2 /* Root inode */
-#define EXT2_ACL_IDX_INO 3 /* ACL inode */
-#define EXT2_ACL_DATA_INO 4 /* ACL inode */
+#define EXT4_USR_QUOTA_INO 3 /* User quota inode */
+#define EXT4_GRP_QUOTA_INO 4 /* Group quota inode */
#define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */
#define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */
#define EXT2_RESIZE_INO 7 /* Reserved group descriptors inode */
@@ -614,7 +614,9 @@ struct ext2_super_block {
__u8 s_last_error_func[32]; /* function where the error happened */
#define EXT4_S_ERR_END ext4_offsetof(struct ext2_super_block, s_mount_opts)
__u8 s_mount_opts[64];
- __u32 s_reserved[112]; /* Padding to the end of the block */
+ __u32 s_usr_quota_inum; /* inode number of user quota file */
+ __u32 s_grp_quota_inum; /* inode number of group quota file */
+ __u32 s_reserved[110]; /* Padding to the end of the block */
};
#define EXT4_S_ERR_LEN (EXT4_S_ERR_END - EXT4_S_ERR_START)
@@ -672,6 +674,7 @@ struct ext2_super_block {
#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020
#define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040
#define EXT4_FEATURE_RO_COMPAT_HAS_SNAPSHOT 0x0080
+#define EXT4_FEATURE_RO_COMPAT_QUOTA 0x0100
#define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001
#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002
diff --git a/lib/ext2fs/swapfs.c b/lib/ext2fs/swapfs.c
index 12427e0a..15ff6fce 100644
--- a/lib/ext2fs/swapfs.c
+++ b/lib/ext2fs/swapfs.c
@@ -76,6 +76,8 @@ void ext2fs_swap_super(struct ext2_super_block * sb)
sb->s_snapshot_r_blocks_count =
ext2fs_swab64(sb->s_snapshot_r_blocks_count);
sb->s_snapshot_list = ext2fs_swab32(sb->s_snapshot_list);
+ sb->s_usr_quota_inum = ext2fs_swab32(sb->s_usr_quota_inum);
+ sb->s_grp_quota_inum = ext2fs_swab32(sb->s_grp_quota_inum);
for (i=0; i < 4; i++)
sb->s_hash_seed[i] = ext2fs_swab32(sb->s_hash_seed[i]);
diff --git a/lib/ext2fs/tst_super_size.c b/lib/ext2fs/tst_super_size.c
index eb9114f1..a3a5b442 100644
--- a/lib/ext2fs/tst_super_size.c
+++ b/lib/ext2fs/tst_super_size.c
@@ -123,6 +123,8 @@ void check_superblock_fields()
check_field(s_last_error_block);
check_field(s_last_error_func);
check_field(s_mount_opts);
+ check_field(s_usr_quota_inum);
+ check_field(s_grp_quota_inum);
check_field(s_reserved);
printf("Ending offset is %d\n\n", cur_offset);
#endif