Whamcloud - gitweb
resize2fs: use EXT2_FLAG_64BITS
[tools/e2fsprogs.git] / e2fsck / problem.c
index 53e8e11..d51a408 100644 (file)
@@ -423,6 +423,16 @@ static struct e2fsck_problem problem_table[] = {
          N_("@S has invalid MMP magic.  "),
          PROMPT_FIX, PR_PREEN_OK | PR_NO_OK},
 
+       /* Opening file system failed */
+       { PR_0_OPEN_FAILED,
+         N_("ext2fs_open2: %m\n"),
+         PROMPT_NONE, 0 },
+
+       /* Checking group descriptor failed */
+       { PR_0_CHECK_DESC_FAILED,
+         N_("ext2fs_check_desc: %m\n"),
+         PROMPT_NONE, 0 },
+
        /* Pass 1 errors */
 
        /* Pass 1: Checking inodes, blocks, and sizes */
@@ -906,11 +916,6 @@ static struct e2fsck_problem problem_table[] = {
          N_("@i %i has an invalid extent node (blk %b, lblk %c)\n"),
          PROMPT_CLEAR, 0 },
 
-       { PR_1_EOFBLOCKS_FL_SET,
-         N_("@i %i should not have EOFBLOCKS_FL set "
-            "(size %Is, lblk %r)\n"),
-         PROMPT_CLEAR, PR_PREEN_OK },
-
        /* Failed to convert subcluster bitmap */
        { PR_1_CONVERT_SUBCLUSTER,
          N_("Error converting subcluster @b @B: %m\n"),
@@ -1824,6 +1829,9 @@ 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");
+               profile_get_integer(ctx->profile, "options",
+                                   "max_count_problems", 0, 0,
+                                   &ptr->max_count);
                profile_get_integer(ctx->profile, "problems", key, "max_count",
                                    ptr->max_count, &ptr->max_count);
 
@@ -1868,17 +1876,26 @@ int fix_problem(e2fsck_t ctx, problem_t code, struct problem_context *pctx)
                if ((ptr->flags & PR_LATCH_MASK) &&
                    (ldesc->flags & (PRL_YES | PRL_NO)))
                        suppress++;
+               if (ptr->count == ptr->max_count + 1) {
+                       printf("...problem 0x%06x suppressed\n",
+                              ptr->e2p_code);
+                       fflush(stdout);
+               }
        }
+       message = ptr->e2p_description;
+       if (*message)
+               message = _(message);
        if (!suppress) {
-               message = ptr->e2p_description;
                if ((ctx->options & E2F_OPT_PREEN) &&
                    !(ptr->flags & PR_PREEN_NOHDR)) {
                        printf("%s: ", ctx->device_name ?
                               ctx->device_name : ctx->filesystem_name);
                }
                if (*message)
-                       print_e2fsck_message(ctx, _(message), pctx, 1, 0);
+                       print_e2fsck_message(stdout, ctx, message, pctx, 1, 0);
        }
+       if (ctx->logf && message)
+               print_e2fsck_message(ctx->logf, ctx, message, pctx, 1, 0);
        if (!(ptr->flags & PR_PREEN_OK) && (ptr->prompt != PROMPT_NONE))
                preenhalt(ctx);
 
@@ -1893,16 +1910,14 @@ int fix_problem(e2fsck_t ctx, problem_t code, struct problem_context *pctx)
        } else {
                if (ptr->flags & PR_FORCE_NO) {
                        answer = 0;
-                       if (!suppress)
-                               print_answer = 1;
+                       print_answer = 1;
                } else if (ctx->options & E2F_OPT_PREEN) {
                        answer = def_yn;
                        if (!(ptr->flags & PR_PREEN_NOMSG))
                                print_answer = 1;
                } else if ((ptr->flags & PR_LATCH_MASK) &&
                           (ldesc->flags & (PRL_YES | PRL_NO))) {
-                       if (!suppress)
-                               print_answer = 1;
+                       print_answer = 1;
                        if (ldesc->flags & PRL_YES)
                                answer = 1;
                        else
@@ -1913,10 +1928,16 @@ int fix_problem(e2fsck_t ctx, problem_t code, struct problem_context *pctx)
                if (!answer && !(ptr->flags & PR_NO_OK))
                        ext2fs_unmark_valid(fs);
 
-               if (print_answer)
-                       printf("%s.\n", answer ?
-                              _(preen_msg[(int) ptr->prompt]) : _("IGNORED"));
-
+               if (print_answer) {
+                       if (!suppress)
+                               printf("%s.\n", answer ?
+                                      _(preen_msg[(int) ptr->prompt]) :
+                                      _("IGNORED"));
+                       if (ctx->logf)
+                               fprintf(ctx->logf, "%s.\n", answer ?
+                                       _(preen_msg[(int) ptr->prompt]) :
+                                       _("IGNORED"));
+               }
        }
 
        if ((ptr->prompt == PROMPT_ABORT) && answer)
@@ -1947,7 +1968,7 @@ profile_get_integer(profile_t profile, const char *name, const char *subname,
        return 0;
 }
 
-void print_e2fsck_message(e2fsck_t ctx, const char *msg,
+void print_e2fsck_message(FILE *f, e2fsck_t ctx, const char *msg,
                          struct problem_context *pctx, int first,
                          int recurse)
 {