mke2fs: Add extended option to select quota type

mke2fs was creating both user and group quota inodes on enabling
the quota feature. This patch adds the extended option 'quotatype'
that can be used to exclusively specify the quota type that the
user wants to initialize.

 # Ex: Default behavior without extended option creates both
 # user and group quota inodes:
 $ mke2fs -t ext4 -O quota /dev/ram1

 # To enable only user quotas:
 $ mke2fs -t ext4 -O quota -E quotatype=usr /dev/ram1
 # To enable only group quotas:
 $ mke2fs -t ext4 -O quota -E quotatype=grp /dev/ram1

Signed-off-by: Aditya Kali <adityakali@google.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
bitmap-optimize
Aditya Kali 2011-11-14 10:55:54 -05:00 committed by Theodore Ts'o
parent d7c6f4e6d0
commit d678fef0d7
2 changed files with 28 additions and 3 deletions

View File

@ -266,6 +266,13 @@ as default.
.TP
.BI nodiscard
Do not attempt to discard blocks at mkfs time.
.TP
.BI quotatype
Specify which quota type ('usr' or 'grp') is to be initialized. This
option has any effect only if
.B quota
feature is set. Without this extended option, the default behavior is to
initialize both user and group quotas.
.RE
.TP
.BI \-f " fragment-size"

View File

@ -95,6 +95,7 @@ int journal_flags;
int lazy_itable_init;
char *bad_blocks_filename;
__u32 fs_stride;
int quotatype = -1; /* Initialize both user and group quotas by default */
struct ext2_super_block fs_param;
char *fs_uuid = NULL;
@ -793,6 +794,23 @@ static void parse_extended_opts(struct ext2_super_block *param,
discard = 1;
} else if (!strcmp(token, "nodiscard")) {
discard = 0;
} else if (!strcmp(token, "quotatype")) {
if (!arg) {
r_usage++;
badopt = token;
continue;
}
if (!strncmp(arg, "usr", 3)) {
quotatype = 0;
} else if (!strncmp(arg, "grp", 3)) {
quotatype = 1;
} else {
fprintf(stderr,
_("Invalid quotatype parameter: %s\n"),
arg);
r_usage++;
continue;
}
} else {
r_usage++;
badopt = token;
@ -811,7 +829,8 @@ static void parse_extended_opts(struct ext2_super_block *param,
"\tlazy_journal_init=<0 to disable, 1 to enable>\n"
"\ttest_fs\n"
"\tdiscard\n"
"\tnodiscard\n\n"),
"\tnodiscard\n"
"\tquotatype=<usr OR grp>\n\n"),
badopt ? badopt : "");
free(buf);
exit(1);
@ -2186,8 +2205,7 @@ static int create_quota_inodes(ext2_filsys fs)
quota_init_context(&qctx, fs, -1);
quota_compute_usage(qctx);
quota_write_inode(qctx, USRQUOTA);
quota_write_inode(qctx, GRPQUOTA);
quota_write_inode(qctx, quotatype);
quota_release_context(&qctx);
return 0;