Whamcloud - gitweb
tune2fs: warn if the filesystem journal is dirty
authorAndreas Dilger <andreas.dilger@intel.com>
Thu, 12 Apr 2012 23:38:13 +0000 (17:38 -0600)
committerLi Dongyang <dongyangli@ddn.com>
Wed, 15 Aug 2018 02:08:04 +0000 (12:08 +1000)
Running tune2fs on a filesystem with an unrecovered journal can
cause the tune2fs settings to be reverted when the journal is
replayed.  Print a warning if this is detected so that the user
isn't surprised if it happens.

Signed-off-by: Jim Garlick <garlick@llnl.gov>
Signed-off-by: Andreas Dilger <andreas.dilger@intel.com>
misc/tune2fs.c

index f1ddfe4..5766dc3 100644 (file)
@@ -3347,6 +3347,7 @@ _("Warning: The journal is dirty. You may wish to replay the journal like:\n\n"
                ext2fs_mark_super_dirty(fs);
                printf(_("Setting stripe width to %d\n"), stripe_width);
        }
+
        if (ext_mount_opts) {
                strncpy((char *)(fs->super->s_mount_opts), ext_mount_opts,
                        sizeof(fs->super->s_mount_opts));
@@ -3357,6 +3358,16 @@ _("Warning: The journal is dirty. You may wish to replay the journal like:\n\n"
                free(ext_mount_opts);
        }
 
+       /* Warn if file system needs recovery and it is opened for writing. */
+       if ((open_flag & EXT2_FLAG_RW) && !(mount_flags & EXT2_MF_MOUNTED) &&
+           (sb->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) &&
+           (sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER)) {
+               fprintf(stderr,
+                       _("Warning: needs_recovery flag is set. You may wish\n"
+                         "replay the journal then rerun this command, or any\n"
+                         "changes may be overwritten by journal recovery.\n"));
+       }
+
        free(device_name);
        remove_error_table(&et_ext2_error_table);