]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_scrub: don't report data loss in unlinked inodes twice
authorDarrick J. Wong <djwong@kernel.org>
Mon, 24 Feb 2025 18:21:42 +0000 (10:21 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 25 Feb 2025 17:15:56 +0000 (09:15 -0800)
If parent pointers are enabled, report_ioerr_fsmap will report lost file
data and xattrs for all files, having used the parent pointer ioctls to
generate the path of the lost file.  For unlinked files, the path lookup
will fail, but we'll report the inumber of the file that lost data.

Therefore, we don't need to do a separate scan of the unlinked inodes
in report_all_media_errors after doing the fsmap scan.

Cc: <linux-xfs@vger.kernel.org> # v6.10.0
Fixes: 9b5d1349ca5fb1 ("xfs_scrub: use parent pointers to report lost file data")
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
scrub/phase6.c

index fc63f5aad0bd7befa77bf4ae570acaf4e4639b14..503119bd02af8d1220d97179cd045077e3a3d4e0 100644 (file)
@@ -567,14 +567,16 @@ report_all_media_errors(
 
        /*
         * Scan the directory tree to get file paths if we didn't already use
-        * directory parent pointers to report the loss.
+        * directory parent pointers to report the loss.  If parent pointers
+        * are enabled, report_ioerr_fsmap will have already reported file
+        * paths that have lost file data and xattrs.
         */
-       if (!can_use_pptrs(ctx)) {
-               ret = scan_fs_tree(ctx, report_dir_loss, report_dirent_loss,
-                               vs);
-               if (ret)
-                       return ret;
-       }
+       if (can_use_pptrs(ctx))
+               return 0;
+
+       ret = scan_fs_tree(ctx, report_dir_loss, report_dirent_loss, vs);
+       if (ret)
+               return ret;
 
        /* Scan for unlinked files. */
        return scrub_scan_all_inodes(ctx, report_inode_loss, 0, vs);