All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] xfs_repair: print XFS_WANT_CORRUPTED info with -vvv
@ 2015-11-12  2:08 Eric Sandeen
  2015-11-12 13:12 ` Brian Foster
  0 siblings, 1 reply; 2+ messages in thread
From: Eric Sandeen @ 2015-11-12  2:08 UTC (permalink / raw)
  To: xfs

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>
---

diff --git a/include/xfs_mount.h b/include/xfs_mount.h
index 5ec6866..67f3b05 100644
--- a/include/xfs_mount.h
+++ b/include/xfs_mount.h
@@ -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)
 
diff --git a/libxfs/libxfs_priv.h b/libxfs/libxfs_priv.h
index 9135aac..0f4d3e5 100644
--- a/libxfs/libxfs_priv.h
+++ b/libxfs/libxfs_priv.h
@@ -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)
diff --git a/man/man8/xfs_repair.8 b/man/man8/xfs_repair.8
index 0394c50..1b4d9e3 100644
--- a/man/man8/xfs_repair.8
+++ b/man/man8/xfs_repair.8
@@ -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
diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c
index bed2ff5..1aeac5b 100644
--- a/repair/xfs_repair.c
+++ b/repair/xfs_repair.c
@@ -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
 	 */


_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] xfs_repair: print XFS_WANT_CORRUPTED info with -vvv
  2015-11-12  2:08 [PATCH] xfs_repair: print XFS_WANT_CORRUPTED info with -vvv Eric Sandeen
@ 2015-11-12 13:12 ` Brian Foster
  0 siblings, 0 replies; 2+ messages in thread
From: Brian Foster @ 2015-11-12 13:12 UTC (permalink / raw)
  To: Eric Sandeen; +Cc: xfs

On Wed, Nov 11, 2015 at 08:08:49PM -0600, Eric Sandeen wrote:
> 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: Brian Foster <bfoster@redhat.com>

> 
> diff --git a/include/xfs_mount.h b/include/xfs_mount.h
> index 5ec6866..67f3b05 100644
> --- a/include/xfs_mount.h
> +++ b/include/xfs_mount.h
> @@ -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)
>  
> diff --git a/libxfs/libxfs_priv.h b/libxfs/libxfs_priv.h
> index 9135aac..0f4d3e5 100644
> --- a/libxfs/libxfs_priv.h
> +++ b/libxfs/libxfs_priv.h
> @@ -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)
> diff --git a/man/man8/xfs_repair.8 b/man/man8/xfs_repair.8
> index 0394c50..1b4d9e3 100644
> --- a/man/man8/xfs_repair.8
> +++ b/man/man8/xfs_repair.8
> @@ -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
> diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c
> index bed2ff5..1aeac5b 100644
> --- a/repair/xfs_repair.c
> +++ b/repair/xfs_repair.c
> @@ -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
>  	 */
> 
> 
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-11-12 13:12 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-12  2:08 [PATCH] xfs_repair: print XFS_WANT_CORRUPTED info with -vvv Eric Sandeen
2015-11-12 13:12 ` Brian Foster

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.