Commit 7f89c838 authored by Darrick J. Wong's avatar Darrick J. Wong
Browse files

xfs: add trace point for fs shutdown



Add a tracepoint for fs shutdowns so we can capture that in ftrace
output.

Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent 54406764
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -75,4 +75,16 @@ extern int xfs_errortag_clearall(struct xfs_mount *mp);
#define		XFS_PTAG_FSBLOCK_ZERO		0x00000080
#define		XFS_PTAG_VERIFIER_ERROR		0x00000100

#define XFS_PTAG_STRINGS \
	{ XFS_NO_PTAG,			"none" }, \
	{ XFS_PTAG_IFLUSH,		"iflush" }, \
	{ XFS_PTAG_LOGRES,		"logres" }, \
	{ XFS_PTAG_AILDELETE,		"aildelete" }, \
	{ XFS_PTAG_ERROR_REPORT	,	"error_report" }, \
	{ XFS_PTAG_SHUTDOWN_CORRUPT,	"corrupt" }, \
	{ XFS_PTAG_SHUTDOWN_IOERROR,	"ioerror" }, \
	{ XFS_PTAG_SHUTDOWN_LOGERROR,	"logerror" }, \
	{ XFS_PTAG_FSBLOCK_ZERO,	"fsb_zero" }, \
	{ XFS_PTAG_VERIFIER_ERROR,	"verifier" }

#endif	/* __XFS_ERROR_H__ */
+3 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include "xfs_log.h"
#include "xfs_ag.h"
#include "xfs_ag_resv.h"
#include "xfs_trace.h"

/*
 * Write new AG headers to disk. Non-transactional, but need to be
@@ -551,6 +552,8 @@ xfs_do_force_shutdown(
		why = "Metadata I/O Error";
	}

	trace_xfs_force_shutdown(mp, tag, flags, fname, lnnum);

	xfs_alert_tag(mp, tag,
"%s (0x%x) detected at %pS (%s:%d).  Shutting down filesystem.",
			why, flags, __return_address, fname, lnnum);
+6 −0
Original line number Diff line number Diff line
@@ -331,6 +331,12 @@ void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname,
#define SHUTDOWN_FORCE_UMOUNT	0x0004	/* shutdown from a forced unmount */
#define SHUTDOWN_CORRUPT_INCORE	0x0008	/* corrupt in-memory data structures */

#define XFS_SHUTDOWN_STRINGS \
	{ SHUTDOWN_META_IO_ERROR,	"metadata_io" }, \
	{ SHUTDOWN_LOG_IO_ERROR,	"log_io" }, \
	{ SHUTDOWN_FORCE_UMOUNT,	"force_umount" }, \
	{ SHUTDOWN_CORRUPT_INCORE,	"corruption" }

/*
 * Flags for xfs_mountfs
 */
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include "xfs_icache.h"
#include "xfs_ag.h"
#include "xfs_ag_resv.h"
#include "xfs_error.h"

/*
 * We include this last to have the helpers above available for the trace
+27 −0
Original line number Diff line number Diff line
@@ -4096,6 +4096,33 @@ DEFINE_DAS_STATE_EVENT(xfs_attr_set_iter_return);
DEFINE_DAS_STATE_EVENT(xfs_attr_node_addname_return);
DEFINE_DAS_STATE_EVENT(xfs_attr_remove_iter_return);
DEFINE_DAS_STATE_EVENT(xfs_attr_rmtval_remove_return);

TRACE_EVENT(xfs_force_shutdown,
	TP_PROTO(struct xfs_mount *mp, int ptag, int flags, const char *fname,
		 int line_num),
	TP_ARGS(mp, ptag, flags, fname, line_num),
	TP_STRUCT__entry(
		__field(dev_t, dev)
		__field(int, ptag)
		__field(int, flags)
		__string(fname, fname)
		__field(int, line_num)
	),
	TP_fast_assign(
		__entry->dev = mp->m_super->s_dev;
		__entry->ptag = ptag;
		__entry->flags = flags;
		__assign_str(fname, fname);
		__entry->line_num = line_num;
	),
	TP_printk("dev %d:%d tag %s flags %s file %s line_num %d",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		__print_flags(__entry->ptag, "|", XFS_PTAG_STRINGS),
		__print_flags(__entry->flags, "|", XFS_SHUTDOWN_STRINGS),
		__get_str(fname),
		__entry->line_num)
);

#endif /* _TRACE_XFS_H */

#undef TRACE_INCLUDE_PATH