@@ -40,6 +40,7 @@ int dangerously; /* live dangerously ... fix ro mount */
int isa_file;
int zap_log;
int dumpcore; /* abort, not exit on fatal errs */
+bool abort_after_force_needsrepair;
int force_geo; /* can set geo on low confidence info */
int assume_xfs; /* assume we have an xfs fs */
char *log_name; /* Name of log device */
@@ -82,6 +82,8 @@ extern int isa_file;
extern int zap_log;
extern int dumpcore; /* abort, not exit on fatal errs */
extern int force_geo; /* can set geo on low confidence info */
+/* Abort after forcing NEEDSREPAIR to test its functionality */
+extern bool abort_after_force_needsrepair;
extern int assume_xfs; /* assume we have an xfs fs */
extern char *log_name; /* Name of log device */
extern int log_spec; /* Log dev specified as option */
@@ -183,6 +183,10 @@ upgrade_filesystem(
do_error(
_("filesystem feature upgrade failed, err=%d\n"),
error);
+
+ /* Simulate a crash after setting needsrepair. */
+ if (abort_after_force_needsrepair)
+ exit(55);
}
if (bp)
libxfs_buf_relse(bp);
@@ -44,6 +44,7 @@ enum o_opt_nums {
BLOAD_LEAF_SLACK,
BLOAD_NODE_SLACK,
NOQUOTA,
+ FORCE_NEEDSREPAIR_ABORT,
O_MAX_OPTS,
};
@@ -57,6 +58,7 @@ static char *o_opts[] = {
[BLOAD_LEAF_SLACK] = "debug_bload_leaf_slack",
[BLOAD_NODE_SLACK] = "debug_bload_node_slack",
[NOQUOTA] = "noquota",
+ [FORCE_NEEDSREPAIR_ABORT] = "debug_force_needsrepair_abort",
[O_MAX_OPTS] = NULL,
};
@@ -282,6 +284,9 @@ process_args(int argc, char **argv)
_("-o debug_bload_node_slack requires a parameter\n"));
bload_node_slack = (int)strtol(val, NULL, 0);
break;
+ case FORCE_NEEDSREPAIR_ABORT:
+ abort_after_force_needsrepair = true;
+ break;
case NOQUOTA:
quotacheck_skip();
break;