]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_repair: add post-phase error injection points
authorDarrick J. Wong <djwong@kernel.org>
Wed, 24 Feb 2021 00:10:00 +0000 (19:10 -0500)
committerEric Sandeen <sandeen@sandeen.net>
Wed, 24 Feb 2021 00:10:00 +0000 (19:10 -0500)
Create an error injection point so that we can simulate repair failing
after a certain phase.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
repair/globals.c
repair/globals.h
repair/xfs_repair.c

index 110d98b6681e81f4d29ad0a84eeeb733fa4ac8e2..537d068b72b4720ce32e9034e089a1611060fab7 100644 (file)
@@ -117,3 +117,6 @@ uint64_t    *prog_rpt_done;
 
 int            ag_stride;
 int            thread_count;
+
+/* If nonzero, simulate failure after this phase. */
+int            fail_after_phase;
index 1d397b351276b9359c7aa4cc3ba0724f8db67e4c..a9287320db09d07d4e9057d52a20ecc561cde1c7 100644 (file)
@@ -162,4 +162,7 @@ extern uint64_t             *prog_rpt_done;
 extern int             ag_stride;
 extern int             thread_count;
 
+/* If nonzero, simulate failure after this phase. */
+extern int             fail_after_phase;
+
 #endif /* _XFS_REPAIR_GLOBAL_H */
index a9236bb7066c248e028635a90df213d409fdf913..64d7607fe1e50805fa671cc8334217ad3b5fd8d5 100644 (file)
@@ -362,6 +362,10 @@ process_args(int argc, char **argv)
 
        if (report_corrected && no_modify)
                usage();
+
+       p = getenv("XFS_REPAIR_FAIL_AFTER_PHASE");
+       if (p)
+               fail_after_phase = (int)strtol(p, NULL, 0);
 }
 
 void __attribute__((noreturn))
@@ -853,6 +857,10 @@ static inline void
 phase_end(int phase)
 {
        timestamp(PHASE_END, phase, NULL);
+
+       /* Fail if someone injected an post-phase error. */
+       if (fail_after_phase && phase == fail_after_phase)
+               platform_crash();
 }
 
 int