Many files:
Checked in e2fsprogs 1.06
diff --git a/e2fsck/e2fsck.c b/e2fsck/e2fsck.c
index 9048298..f081d66 100644
--- a/e2fsck/e2fsck.c
+++ b/e2fsck/e2fsck.c
@@ -421,19 +421,19 @@
time(0) >= (fs->super->s_lastcheck +
fs->super->s_checkinterval))
reason = "has gone too long without being checked";
+ else if ((fs->super->s_state & EXT2_VALID_FS) == 0)
+ reason = "was not cleanly unmounted";
if (reason) {
printf("%s %s, check forced.\n", device_name, reason);
return;
}
- if (fs->super->s_state & EXT2_VALID_FS) {
- printf("%s: clean, %d/%d files, %d/%d blocks\n", device_name,
- fs->super->s_inodes_count - fs->super->s_free_inodes_count,
- fs->super->s_inodes_count,
- fs->super->s_blocks_count - fs->super->s_free_blocks_count,
- fs->super->s_blocks_count);
- ext2fs_close(fs);
- exit(FSCK_OK);
- }
+ printf("%s: clean, %d/%d files, %d/%d blocks\n", device_name,
+ fs->super->s_inodes_count - fs->super->s_free_inodes_count,
+ fs->super->s_inodes_count,
+ fs->super->s_blocks_count - fs->super->s_free_blocks_count,
+ fs->super->s_blocks_count);
+ ext2fs_close(fs);
+ exit(FSCK_OK);
}
#define PATH_SET "PATH=/sbin"
@@ -606,8 +606,11 @@
E2FSPROGS_VERSION, E2FSPROGS_DATE,
EXT2FS_VERSION, EXT2FS_DATE);
- if (show_version_only)
+ if (show_version_only) {
+ fprintf(stderr, "\tUsing %s\n",
+ error_message(EXT2_ET_BASE));
exit(0);
+ }
check_mount();
@@ -671,6 +674,12 @@
if (superblock && rwflag)
ext2fs_mark_super_dirty(fs);
+ /*
+ * Don't overwrite the backup superblock and block
+ * descriptors, until we're sure the filesystem is OK....
+ */
+ fs->flags |= EXT2_FLAG_MASTER_SB_ONLY;
+
ehandler_init(fs->io);
invalid_inode_bitmap = allocate_memory(sizeof(int) *
@@ -691,7 +700,8 @@
test_disk(fs);
if (normalize_swapfs) {
- if ((fs->flags & EXT2_SWAP_BYTES) == ext2fs_native_flag()) {
+ if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ==
+ ext2fs_native_flag()) {
fprintf(stderr, "%s: Filesystem byte order "
"already normalized.\n", device_name);
fatal_error(0);
@@ -733,7 +743,9 @@
exit_value = FSCK_REBOOT;
}
}
- if (!ext2fs_test_valid(fs))
+ if (ext2fs_test_valid(fs))
+ fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
+ else
exit_value = FSCK_UNCORRECTED;
if (rwflag) {
if (ext2fs_test_valid(fs)) {