Blame SOURCES/e2fsprogs-1.45.6-e2fsck-fix-last-mount-write-time-when-e2fsck-is-forc.patch

a77133
From b93c62c3d46ed363a88668d41a87500eb5d29f98 Mon Sep 17 00:00:00 2001
a77133
From: Lukas Czerner <lczerner@redhat.com>
a77133
Date: Mon, 14 Jun 2021 15:27:25 +0200
a77133
Subject: [PATCH 26/46] e2fsck: fix last mount/write time when e2fsck is forced
a77133
Content-Type: text/plain
a77133
a77133
With commit c52d930f e2fsck is no longer able to fix bad last
a77133
mount/write time by default because it is conditioned on s_checkinterval
a77133
not being zero, which it is by default.
a77133
a77133
One place where it matters is when other e2fsprogs tools require to run
a77133
full file system check before a certain operation. If the last mount
a77133
time is for any reason in future, it will not allow it to run even if
a77133
full e2fsck is ran.
a77133
a77133
Fix it by checking the last mount/write time when the e2fsck is forced,
a77133
except for the case where we know the system clock is broken.
a77133
a77133
[ Reworked the conditionals so error messages claiming that the last
a77133
  write/mount time were corrupted wouldn't be always printed when the
a77133
  e2fsck was run with the -f option, thus causing 299 out of 372
a77133
  regression tests to fail.  -- TYT ]
a77133
a77133
Fixes: c52d930f ("e2fsck: don't check for future superblock times if checkinterval == 0")
a77133
Reported-by: Dusty Mabe <dustymabe@redhat.com>
a77133
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
a77133
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
a77133
---
a77133
 e2fsck/super.c | 12 ++++++------
a77133
 1 file changed, 6 insertions(+), 6 deletions(-)
a77133
a77133
diff --git a/e2fsck/super.c b/e2fsck/super.c
a77133
index e1c3f935..31e2ffb2 100644
a77133
--- a/e2fsck/super.c
a77133
+++ b/e2fsck/super.c
a77133
@@ -1038,9 +1038,9 @@ void check_super_block(e2fsck_t ctx)
a77133
 	 * Check to see if the superblock last mount time or last
a77133
 	 * write time is in the future.
a77133
 	 */
a77133
-	if (!broken_system_clock && fs->super->s_checkinterval &&
a77133
-	    !(ctx->flags & E2F_FLAG_TIME_INSANE) &&
a77133
-	    fs->super->s_mtime > (__u32) ctx->now) {
a77133
+	if (((ctx->options & E2F_OPT_FORCE) || fs->super->s_checkinterval) &&
a77133
+	    !broken_system_clock && !(ctx->flags & E2F_FLAG_TIME_INSANE) &&
a77133
+	    (fs->super->s_mtime > (__u32) ctx->now)) {
a77133
 		pctx.num = fs->super->s_mtime;
a77133
 		problem = PR_0_FUTURE_SB_LAST_MOUNT;
a77133
 		if (fs->super->s_mtime <= (__u32) ctx->now + ctx->time_fudge)
a77133
@@ -1050,9 +1050,9 @@ void check_super_block(e2fsck_t ctx)
a77133
 			fs->flags |= EXT2_FLAG_DIRTY;
a77133
 		}
a77133
 	}
a77133
-	if (!broken_system_clock && fs->super->s_checkinterval &&
a77133
-	    !(ctx->flags & E2F_FLAG_TIME_INSANE) &&
a77133
-	    fs->super->s_wtime > (__u32) ctx->now) {
a77133
+	if (((ctx->options & E2F_OPT_FORCE) || fs->super->s_checkinterval) &&
a77133
+	    !broken_system_clock && !(ctx->flags & E2F_FLAG_TIME_INSANE) &&
a77133
+	    (fs->super->s_wtime > (__u32) ctx->now)) {
a77133
 		pctx.num = fs->super->s_wtime;
a77133
 		problem = PR_0_FUTURE_SB_LAST_WRITE;
a77133
 		if (fs->super->s_wtime <= (__u32) ctx->now + ctx->time_fudge)
a77133
-- 
a77133
2.35.1
a77133