]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
repair: print XFS_WANT_CORRUPTED info with -vvv
authorEric Sandeen <sandeen@redhat.com>
Mon, 23 Nov 2015 04:24:24 +0000 (15:24 +1100)
committerDave Chinner <david@fromorbit.com>
Mon, 23 Nov 2015 04:24:24 +0000 (15:24 +1100)
In the kernel, the XFS_WANT_CORRUPTED_* macros print the
caller information via XFS_ERROR_REPORT, but in userspace
this is silenced, because i.e. xfs_repair's job is to find
and fix corruption, not to complain loudly about it.

However, there are times when we would like to know if
we've hit an unexpected corruption point.  To that end,
make "xfs_repair -vvv" enable noisiness from these macros,
so that they will print the function and line of the caller.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
include/xfs_mount.h
libxfs/libxfs_priv.h
man/man8/xfs_repair.8
repair/xfs_repair.c

index 5ec68663ff083d6699804313546a40aa41668ccc..67f3b05cdfe7d53f282169cfabadc58578b15431 100644 (file)
@@ -143,6 +143,7 @@ typedef struct xfs_perag {
 #define LIBXFS_MOUNT_32BITINOOPT       0x0004
 #define LIBXFS_MOUNT_COMPAT_ATTR       0x0008
 #define LIBXFS_MOUNT_ATTR2             0x0010
+#define LIBXFS_MOUNT_WANT_CORRUPTED    0x0020
 
 #define LIBXFS_BHASHSIZE(sbp)          (1<<10)
 
index 9135aac6afd4843d282bd5217009f43539a5391b..0f4d3e57343a0006ab1087e54d1da4a0e568e4ba 100644 (file)
@@ -147,10 +147,25 @@ enum ce { CE_DEBUG, CE_CONT, CE_NOTE, CE_WARN, CE_ALERT, CE_PANIC };
 #define XFS_TRANS_RESERVE_QUOTA_NBLKS(mp,tp,ip,nblks,ninos,fl) 0
 #define XFS_TRANS_UNRESERVE_QUOTA_NBLKS(mp,tp,ip,nblks,ninos,fl)       0
 #define XFS_TEST_ERROR(expr,a,b,c)     ( expr )
-#define XFS_WANT_CORRUPTED_GOTO(mp, expr, l)   \
-               { (mp) = (mp); if (!(expr)) { error = -EFSCORRUPTED; goto l; } }
-#define XFS_WANT_CORRUPTED_RETURN(mp, expr)    \
-               { (mp) = (mp); if (!(expr)) { return -EFSCORRUPTED; } }
+#define XFS_WANT_CORRUPTED_GOTO(mp, expr, l)                           \
+{                                                                      \
+       if (!(expr)) {                                                  \
+               if ((mp)->m_flags & LIBXFS_MOUNT_WANT_CORRUPTED)        \
+                       printf("WANT_CORRUPTED_GOTO at %s:%d\n",        \
+                               __func__, __LINE__);                    \
+               error = -EFSCORRUPTED;                                  \
+               goto l;                                                 \
+       }                                                               \
+}
+#define XFS_WANT_CORRUPTED_RETURN(mp, expr)                            \
+{                                                                      \
+       if (!(expr)) {                                                  \
+               if ((mp)->m_flags & LIBXFS_MOUNT_WANT_CORRUPTED)        \
+                       printf("WANT_CORRUPTED_RETURN at %s:%d\n",      \
+                               __func__, __LINE__);                    \
+               return -EFSCORRUPTED;                                   \
+       }                                                               \
+}
 
 #ifdef __GNUC__
 #define __return_address       __builtin_return_address(0)
index 0394c501f96506167ca6dcc64704f159f62ec0dc..1b4d9e323679f33c85448eb288332c4acfd03845 100644 (file)
@@ -158,7 +158,7 @@ outputs its progress every 15 minutes. Reporting is only activated when
 ag_stride is enabled.
 .TP
 .B \-v
-Verbose output.
+Verbose output.  May be specified multiple times to increase verbosity.
 .TP
 .B \-d
 Repair dangerously. Allow
index bed2ff5a8f291061ca301fc3b39fbdfb6d2fc94f..1aeac5ba456d9f225a1294e40f11138996bf9ab5 100644 (file)
@@ -695,6 +695,10 @@ main(int argc, char **argv)
        }
        mp->m_log = &log;
 
+       /* Spit out function & line on these corruption macros */
+       if (verbose > 2)
+               mp->m_flags |= LIBXFS_MOUNT_WANT_CORRUPTED;
+
        /*
         * set XFS-independent status vars from the mount/sb structure
         */