aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2017-08-23 10:30:09 -0400
committerTheodore Ts'o <tytso@mit.edu>2017-08-23 11:06:40 -0400
commit66aae965073e4e617ac04e36f34d3fef309c3500 (patch)
treec12913c88298cc19da3378fca908512fd55270a8
parentab5f3d04f83980678210aed742371d1fab5bb976 (diff)
downloade2fsprogs-66aae965073e4e617ac04e36f34d3fef309c3500.tar.gz
mke2fs: automatically use 256 byte inodes if project feature enabled
If the inode size is not implicitly requested on the command line, and it is too small to support the project feature, automatically promote the inode size to be 256 bytes so that the project feature will work. Note the previous test to check for a too-small inode size didn't work because it checked before inode size was set in fs_param. Hence, it was possible to create file systems with a 128 byte inode and the project feature enabled. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r--misc/mke2fs.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/misc/mke2fs.c b/misc/mke2fs.c
index b8d078a0a..7fd7fae40 100644
--- a/misc/mke2fs.c
+++ b/misc/mke2fs.c
@@ -2319,6 +2319,26 @@ profile_error:
(unsigned long long) fs_blocks_count);
}
+ if (quotatype_bits & QUOTA_PRJ_BIT)
+ ext2fs_set_feature_project(&fs_param);
+
+ if (ext2fs_has_feature_project(&fs_param)) {
+ quotatype_bits |= QUOTA_PRJ_BIT;
+ if (inode_size == EXT2_GOOD_OLD_INODE_SIZE) {
+ com_err(program_name, 0,
+ _("%d byte inodes are too small for "
+ "project quota"),
+ inode_size);
+ exit(1);
+ }
+ if (inode_size == 0) {
+ inode_size = get_int_from_profile(fs_types,
+ "inode_size", 0);
+ if (inode_size <= EXT2_GOOD_OLD_INODE_SIZE*2)
+ inode_size = EXT2_GOOD_OLD_INODE_SIZE*2;
+ }
+ }
+
/* Don't allow user to set both metadata_csum and uninit_bg bits. */
if (ext2fs_has_feature_metadata_csum(&fs_param) &&
ext2fs_has_feature_gdt_csum(&fs_param))
@@ -2419,19 +2439,6 @@ profile_error:
exit(1);
}
- /*
- * If inode size is 128 and project quota is enabled, we need
- * to notify users that project ID will never be useful.
- */
- if (ext2fs_has_feature_project(&fs_param) &&
- fs_param.s_inode_size == EXT2_GOOD_OLD_INODE_SIZE) {
- com_err(program_name, 0,
- _("%d byte inodes are too small for project quota; "
- "specify larger size"),
- fs_param.s_inode_size);
- exit(1);
- }
-
/* Make sure number of inodes specified will fit in 32 bits */
if (num_inodes == 0) {
unsigned long long n;
@@ -3203,8 +3210,6 @@ no_journal:
if (ext2fs_has_feature_bigalloc(&fs_param))
fix_cluster_bg_counts(fs);
- if (ext2fs_has_feature_project(&fs_param))
- quotatype_bits |= QUOTA_PRJ_BIT;
if (ext2fs_has_feature_quota(&fs_param))
create_quota_inodes(fs);