From 8341ee45d721cf07b19d50c249bb3a77ef1bf100 Mon Sep 17 00:00:00 2001 From: Daniel Schultz Date: Mon, 20 Mar 2017 13:18:51 +0100 Subject: e2fsprogs: Fix wrong error code after optimization fsck.ext will return an error code of 1 if a file systems was checked and successfully repaired. Even when an optimization was performed it will return this error code. This patch will change the error code to 0 if only optimizations had changed the file systems. The reason for this patch is a question I asked at the ext4 ML: http://www.spinics.net/lists/linux-ext4/msg55700.html Backport from git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git Based on commit bf9f3b6d5b10d19218b4ed904c12b22e36ec57dd Signed-off-by: Daniel Schultz Signed-off-by: Ross Burton --- ...-with-exit-status-0-if-no-errors-were-fix.patch | 255 +++++++++++++++++++++ .../recipes-devtools/e2fsprogs/e2fsprogs_1.43.4.bb | 1 + 2 files changed, 256 insertions(+) create mode 100644 meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-e2fsck-exit-with-exit-status-0-if-no-errors-were-fix.patch (limited to 'meta/recipes-devtools') diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-e2fsck-exit-with-exit-status-0-if-no-errors-were-fix.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-e2fsck-exit-with-exit-status-0-if-no-errors-were-fix.patch new file mode 100644 index 0000000000..1d17520252 --- /dev/null +++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-e2fsck-exit-with-exit-status-0-if-no-errors-were-fix.patch @@ -0,0 +1,255 @@ +From bf9f3b6d5b10d19218b4ed904c12b22e36ec57dd Mon Sep 17 00:00:00 2001 +From: Theodore Ts'o +Date: Thu, 16 Feb 2017 22:02:35 -0500 +Subject: [PATCH] e2fsck: exit with exit status 0 if no errors were fixed + +Previously, e2fsck would exit with a status code of 1 even though the +only changes that it made to the file system were various +optimziations and not fixing file system corruption. Since the man +page states that an exit status of 1 means "file system errors +corrupted", fix e2fsck to return an exit status of 0. + +Upstream-Status: Backport + +Signed-off-by: Theodore Ts'o +Signed-off-by: Daniel Schultz +--- + e2fsck/e2fsck.conf.5.in | 7 +++++++ + e2fsck/journal.c | 1 + + e2fsck/problem.c | 8 +++++--- + e2fsck/problemP.h | 1 + + e2fsck/unix.c | 20 ++++++++++++++++---- + tests/f_collapse_extent_tree/expect.1 | 2 +- + tests/f_compress_extent_tree_level/expect.1 | 2 +- + tests/f_convert_bmap/expect.1 | 2 +- + tests/f_convert_bmap_and_extent/expect.1 | 2 +- + tests/f_extent_htree/expect.1 | 2 +- + tests/f_jnl_errno/expect.1 | 2 +- + tests/f_journal/expect.1 | 2 +- + tests/f_orphan/expect.1 | 2 +- + tests/f_orphan_extents_inode/expect.1 | 2 +- + tests/f_rehash_dir/expect.1 | 2 +- + tests/f_unsorted_EAs/expect.1 | 2 +- + 16 files changed, 41 insertions(+), 18 deletions(-) + +diff --git a/e2fsck/e2fsck.conf.5.in b/e2fsck/e2fsck.conf.5.in +index 1848bdb..0bfc76a 100644 +--- a/e2fsck/e2fsck.conf.5.in ++++ b/e2fsck/e2fsck.conf.5.in +@@ -303,6 +303,13 @@ of 'should this problem be fixed?'. The + option even overrides the + .B -y + option given on the command-line (just for the specific problem, of course). ++.TP ++.I not_a_fix ++This boolean option, it set to true, marks the problem as ++one where if the user gives permission to make the requested change, ++it does not mean that the file system had a problem which has since ++been fixed. This is used for requests to optimize the file system's ++data structure, such as pruning an extent tree. + @TDB_MAN_COMMENT@.SH THE [scratch_files] STANZA + @TDB_MAN_COMMENT@The following relations are defined in the + @TDB_MAN_COMMENT@.I [scratch_files] +diff --git a/e2fsck/journal.c b/e2fsck/journal.c +index 46fe7b4..c4f58f1 100644 +--- a/e2fsck/journal.c ++++ b/e2fsck/journal.c +@@ -572,6 +572,7 @@ static void clear_v2_journal_fields(journal_t *journal) + if (!fix_problem(ctx, PR_0_CLEAR_V2_JOURNAL, &pctx)) + return; + ++ ctx->flags |= E2F_FLAG_PROBLEMS_FIXED; + memset(((char *) journal->j_superblock) + V1_SB_SIZE, 0, + ctx->fs->blocksize-V1_SB_SIZE); + mark_buffer_dirty(journal->j_sb_buffer); +diff --git a/e2fsck/problem.c b/e2fsck/problem.c +index 34a671e..4b25069 100644 +--- a/e2fsck/problem.c ++++ b/e2fsck/problem.c +@@ -1276,12 +1276,12 @@ static struct e2fsck_problem problem_table[] = { + /* Inode extent tree could be shorter */ + { PR_1E_CAN_COLLAPSE_EXTENT_TREE, + N_("@i %i @x tree (at level %b) could be shorter. "), +- PROMPT_FIX, PR_NO_OK | PR_PREEN_NO | PR_PREEN_OK }, ++ PROMPT_FIX, PR_NO_OK | PR_PREEN_NO | PR_PREEN_OK | PR_NOT_A_FIX }, + + /* Inode extent tree could be narrower */ + { PR_1E_CAN_NARROW_EXTENT_TREE, + N_("@i %i @x tree (at level %b) could be narrower. "), +- PROMPT_FIX, PR_NO_OK | PR_PREEN_NO | PR_PREEN_OK }, ++ PROMPT_FIX, PR_NO_OK | PR_PREEN_NO | PR_PREEN_OK | PR_NOT_A_FIX }, + + /* Pass 2 errors */ + +@@ -2166,6 +2166,7 @@ int fix_problem(e2fsck_t ctx, problem_t code, struct problem_context *pctx) + reconfigure_bool(ctx, ptr, key, PR_NO_NOMSG, "no_nomsg"); + reconfigure_bool(ctx, ptr, key, PR_PREEN_NOHDR, "preen_noheader"); + reconfigure_bool(ctx, ptr, key, PR_FORCE_NO, "force_no"); ++ reconfigure_bool(ctx, ptr, key, PR_NOT_A_FIX, "not_a_fix"); + profile_get_integer(ctx->profile, "options", + "max_count_problems", 0, 0, + &ptr->max_count); +@@ -2283,7 +2284,8 @@ int fix_problem(e2fsck_t ctx, problem_t code, struct problem_context *pctx) + if (ptr->flags & PR_AFTER_CODE) + answer = fix_problem(ctx, ptr->second_code, pctx); + +- if (answer && (ptr->prompt != PROMPT_NONE)) ++ if (answer && (ptr->prompt != PROMPT_NONE) && ++ !(ptr->flags & PR_NOT_A_FIX)) + ctx->flags |= E2F_FLAG_PROBLEMS_FIXED; + + return answer; +diff --git a/e2fsck/problemP.h b/e2fsck/problemP.h +index 7944cd6..63bb8df 100644 +--- a/e2fsck/problemP.h ++++ b/e2fsck/problemP.h +@@ -44,3 +44,4 @@ struct latch_descr { + #define PR_CONFIG 0x080000 /* This problem has been customized + from the config file */ + #define PR_FORCE_NO 0x100000 /* Force the answer to be no */ ++#define PR_NOT_A_FIX 0x200000 /* Yes doesn't mean a problem was fixed */ +diff --git a/e2fsck/unix.c b/e2fsck/unix.c +index eb9f311..9e4d31a 100644 +--- a/e2fsck/unix.c ++++ b/e2fsck/unix.c +@@ -1901,11 +1901,23 @@ no_journal: + fix_problem(ctx, PR_6_IO_FLUSH, &pctx); + + if (was_changed) { +- exit_value |= FSCK_NONDESTRUCT; +- if (!(ctx->options & E2F_OPT_PREEN)) +- log_out(ctx, _("\n%s: ***** FILE SYSTEM WAS " +- "MODIFIED *****\n"), ++ int fs_fixed = (ctx->flags & E2F_FLAG_PROBLEMS_FIXED); ++ ++ if (fs_fixed) ++ exit_value |= FSCK_NONDESTRUCT; ++ if (!(ctx->options & E2F_OPT_PREEN)) { ++#if 0 /* Do this later; it breaks too many tests' golden outputs */ ++ log_out(ctx, fs_fixed ? ++ _("\n%s: ***** FILE SYSTEM ERRORS " ++ "CORRECTED *****\n") : ++ _("%s: File system was modified.\n"), + ctx->device_name); ++#else ++ log_out(ctx, ++ _("\n%s: ***** FILE SYSTEM WAS MODIFIED *****\n"), ++ ctx->device_name); ++#endif ++ } + if (ctx->mount_flags & EXT2_MF_ISROOT) { + log_out(ctx, _("%s: ***** REBOOT SYSTEM *****\n"), + ctx->device_name); +diff --git a/tests/f_collapse_extent_tree/expect.1 b/tests/f_collapse_extent_tree/expect.1 +index e2eb65e..8165a58 100644 +--- a/tests/f_collapse_extent_tree/expect.1 ++++ b/tests/f_collapse_extent_tree/expect.1 +@@ -13,4 +13,4 @@ Pass 5: Checking group summary information + + test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** + test_filesys: 12/128 files (0.0% non-contiguous), 19/512 blocks +-Exit status is 1 ++Exit status is 0 +diff --git a/tests/f_compress_extent_tree_level/expect.1 b/tests/f_compress_extent_tree_level/expect.1 +index a359c99..dd33f63 100644 +--- a/tests/f_compress_extent_tree_level/expect.1 ++++ b/tests/f_compress_extent_tree_level/expect.1 +@@ -20,4 +20,4 @@ Pass 5: Checking group summary information + + test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** + test_filesys: 12/128 files (8.3% non-contiguous), 26/512 blocks +-Exit status is 1 ++Exit status is 0 +diff --git a/tests/f_convert_bmap/expect.1 b/tests/f_convert_bmap/expect.1 +index 7d2ca86..c387962 100644 +--- a/tests/f_convert_bmap/expect.1 ++++ b/tests/f_convert_bmap/expect.1 +@@ -23,4 +23,4 @@ Pass 5: Checking group summary information + + test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** + test_filesys: 12/128 files (8.3% non-contiguous), 570/2048 blocks +-Exit status is 1 ++Exit status is 0 +diff --git a/tests/f_convert_bmap_and_extent/expect.1 b/tests/f_convert_bmap_and_extent/expect.1 +index 7af91aa..c86c571 100644 +--- a/tests/f_convert_bmap_and_extent/expect.1 ++++ b/tests/f_convert_bmap_and_extent/expect.1 +@@ -30,4 +30,4 @@ Pass 5: Checking group summary information + + test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** + test_filesys: 13/128 files (15.4% non-contiguous), 574/2048 blocks +-Exit status is 1 ++Exit status is 0 +diff --git a/tests/f_extent_htree/expect.1 b/tests/f_extent_htree/expect.1 +index 223ca69..ea48405 100644 +--- a/tests/f_extent_htree/expect.1 ++++ b/tests/f_extent_htree/expect.1 +@@ -26,4 +26,4 @@ test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** + 0 sockets + ------------ + 343 files +-Exit status is 1 ++Exit status is 0 +diff --git a/tests/f_jnl_errno/expect.1 b/tests/f_jnl_errno/expect.1 +index c572951..4134234 100644 +--- a/tests/f_jnl_errno/expect.1 ++++ b/tests/f_jnl_errno/expect.1 +@@ -6,4 +6,4 @@ Pass 5: Checking group summary information + + test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** + test_filesys: 11/2048 files (9.1% non-contiguous), 1330/8192 blocks +-Exit status is 1 ++Exit status is 0 +diff --git a/tests/f_journal/expect.1 b/tests/f_journal/expect.1 +index a202c80..0a18654 100644 +--- a/tests/f_journal/expect.1 ++++ b/tests/f_journal/expect.1 +@@ -59,4 +59,4 @@ Pass 5: Checking group summary information + + test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** + test_filesys: 53/2048 files (1.9% non-contiguous), 1409/8192 blocks +-Exit status is 1 ++Exit status is 0 +diff --git a/tests/f_orphan/expect.1 b/tests/f_orphan/expect.1 +index eddc1f8..087ebee 100644 +--- a/tests/f_orphan/expect.1 ++++ b/tests/f_orphan/expect.1 +@@ -11,4 +11,4 @@ Pass 5: Checking group summary information + + test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** + test_filesys: 12/2048 files (0.0% non-contiguous), 1303/8192 blocks +-Exit status is 1 ++Exit status is 0 +diff --git a/tests/f_orphan_extents_inode/expect.1 b/tests/f_orphan_extents_inode/expect.1 +index 2eaab78..5d713b3 100644 +--- a/tests/f_orphan_extents_inode/expect.1 ++++ b/tests/f_orphan_extents_inode/expect.1 +@@ -7,4 +7,4 @@ Pass 5: Checking group summary information + + test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** + test_filesys: 12/16 files (0.0% non-contiguous), 21/100 blocks +-Exit status is 1 ++Exit status is 0 +diff --git a/tests/f_rehash_dir/expect.1 b/tests/f_rehash_dir/expect.1 +index 6076765..c1449ba 100644 +--- a/tests/f_rehash_dir/expect.1 ++++ b/tests/f_rehash_dir/expect.1 +@@ -7,4 +7,4 @@ Pass 5: Checking group summary information + + test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** + test_filesys: 105/2048 files (2.9% non-contiguous), 336/512 blocks +-Exit status is 1 ++Exit status is 0 +diff --git a/tests/f_unsorted_EAs/expect.1 b/tests/f_unsorted_EAs/expect.1 +index 7d588d7..64b9045 100644 +--- a/tests/f_unsorted_EAs/expect.1 ++++ b/tests/f_unsorted_EAs/expect.1 +@@ -8,4 +8,4 @@ Pass 5: Checking group summary information + + test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** + test_filesys: 12/2048 files (0.0% non-contiguous), 1294/2048 blocks +-Exit status is 1 ++Exit status is 0 +-- +1.9.1 + diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.43.4.bb b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.43.4.bb index 153b3a15ce..5216c7027c 100644 --- a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.43.4.bb +++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.43.4.bb @@ -9,6 +9,7 @@ SRC_URI += "file://acinclude.m4 \ file://Revert-mke2fs-enable-the-metadata_csum-and-64bit-fea.patch \ file://e2fsprogs-1.43-sysmacros.patch \ file://mkdir_p.patch \ + file://0001-e2fsck-exit-with-exit-status-0-if-no-errors-were-fix.patch \ " SRC_URI_append_class-native = " file://e2fsprogs-fix-missing-check-for-permission-denied.patch" -- cgit 1.2.3-korg