[PATCH 6/7] xfs_repair: check that metadata updates have been committed

Darrick J. Wong
2020-02-28T23:36:13Z

From: Darrick J. Wong <darrick.wong@oracle.com>

Make sure that any metadata that we repaired or regenerated has been
written to disk. If that fails, exit with 1 to signal that there are
still errors in the filesystem.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
---
repair/xfs_repair.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c
index 2c15125f..6b463534 100644
--- a/repair/xfs_repair.c
+++ b/repair/xfs_repair.c
@@ -703,6 +703,7 @@ main(int argc, char **argv)
struct xfs_sb psb;
int rval;
struct xfs_ino_geometry *igeo;
+ int error;

progname = basename(argv[0]);
setlocale(LC_ALL, "");
@@ -1104,7 +1105,13 @@ _("Note - stripe unit (%d) and width (%d) were copied from a backup superblock.\
*/
libxfs_bcache_flush();
format_log_max_lsn(mp);
- libxfs_umount(mp);
+
+ /* Report failure if anything failed to get written to our fs. */
+ error = -libxfs_umount(mp);
+ if (error)
+ do_error(
+ _("File system metadata writeout failed, err=%d. Re-run xfs_repair."),
+ error);

libxfs_destroy(&x);