summaryrefslogtreecommitdiff
path: root/e2fsck/unix.c
diff options
context:
space:
mode:
Diffstat (limited to 'e2fsck/unix.c')
-rw-r--r--e2fsck/unix.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/e2fsck/unix.c b/e2fsck/unix.c
index 7f6ee987..bc18d41c 100644
--- a/e2fsck/unix.c
+++ b/e2fsck/unix.c
@@ -1411,6 +1411,18 @@ print_unsupp_features:
else
journal_size = -1;
+ if (sb->s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_QUOTA) {
+ int qtype;
+ /* Quotas were enabled. Do quota accounting during fsck. */
+ if ((sb->s_usr_quota_inum && sb->s_grp_quota_inum) ||
+ (!sb->s_usr_quota_inum && !sb->s_grp_quota_inum))
+ qtype = -1;
+ else
+ qtype = sb->s_usr_quota_inum ? USRQUOTA : GRPQUOTA;
+
+ init_quota_context(&ctx->qctx, ctx->fs, qtype);
+ }
+
run_result = e2fsck_run(ctx);
e2fsck_clear_progbar(ctx);
@@ -1443,6 +1455,11 @@ print_unsupp_features:
}
no_journal:
+ if (ctx->qctx) {
+ write_quota_inode(ctx->qctx, -1);
+ release_quota_context(&ctx->qctx);
+ }
+
if (run_result == E2F_FLAG_RESTART) {
printf(_("Restarting e2fsck from the beginning...\n"));
retval = e2fsck_reset_context(ctx);