diff --git a/include/os/linux/spl/sys/Makefile.am b/include/os/linux/spl/sys/Makefile.am index 7e7d95dc0b..2515421181 100644 --- a/include/os/linux/spl/sys/Makefile.am +++ b/include/os/linux/spl/sys/Makefile.am @@ -45,6 +45,7 @@ KERNEL_H = \ $(top_srcdir)/include/os/linux/spl/sys/time.h \ $(top_srcdir)/include/os/linux/spl/sys/timer.h \ $(top_srcdir)/include/os/linux/spl/sys/trace.h \ + $(top_srcdir)/include/os/linux/spl/sys/trace_spl.h \ $(top_srcdir)/include/os/linux/spl/sys/tsd.h \ $(top_srcdir)/include/os/linux/spl/sys/types32.h \ $(top_srcdir)/include/os/linux/spl/sys/types.h \ diff --git a/include/os/linux/spl/sys/trace.h b/include/os/linux/spl/sys/trace.h index e2cd634b4a..df859cf2fe 100644 --- a/include/os/linux/spl/sys/trace.h +++ b/include/os/linux/spl/sys/trace.h @@ -58,14 +58,6 @@ #include #include -/* - * The sys/trace_dbgmsg.h header defines tracepoint events for - * dprintf(), dbgmsg(), and SET_ERROR(). - */ -#define _SYS_TRACE_DBGMSG_INDIRECT -#include -#undef _SYS_TRACE_DBGMSG_INDIRECT - /* * DTRACE_PROBE with 0 arguments is not currently available with * tracepoint events @@ -174,14 +166,5 @@ EXPORT_SYMBOL(trace_zfs_##name) #define DEFINE_DTRACE_PROBE4(name) PROTO_DTRACE_PROBE4(name) #endif /* CREATE_TRACE_POINTS */ - -/* - * The sys/trace_dbgmsg.h header defines tracepoint events for - * dprintf(), dbgmsg(), and SET_ERROR(). - */ -#define _SYS_TRACE_DBGMSG_INDIRECT -#include -#undef _SYS_TRACE_DBGMSG_INDIRECT - #endif /* HAVE_DECLARE_EVENT_CLASS */ #endif /* _KERNEL */ diff --git a/include/os/linux/spl/sys/trace_spl.h b/include/os/linux/spl/sys/trace_spl.h new file mode 100644 index 0000000000..6b50d546b4 --- /dev/null +++ b/include/os/linux/spl/sys/trace_spl.h @@ -0,0 +1,27 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#ifndef _OS_LINUX_SPL_TRACE_H +#define _OS_LINUX_SPL_TRACE_H + +#include + +#endif diff --git a/include/os/linux/zfs/sys/Makefile.am b/include/os/linux/zfs/sys/Makefile.am index ca8d83e26a..e061c5ab10 100644 --- a/include/os/linux/zfs/sys/Makefile.am +++ b/include/os/linux/zfs/sys/Makefile.am @@ -4,7 +4,7 @@ KERNEL_H = \ $(top_srcdir)/include/os/linux/zfs/sys/trace_acl.h \ $(top_srcdir)/include/os/linux/zfs/sys/trace_arc.h \ $(top_srcdir)/include/os/linux/zfs/sys/trace_common.h \ - $(top_srcdir)/include/os/linux/zfs/sys/trace_defs.h \ + $(top_srcdir)/include/os/linux/zfs/sys/trace_zfs.h \ $(top_srcdir)/include/os/linux/zfs/sys/trace_dbgmsg.h \ $(top_srcdir)/include/os/linux/zfs/sys/trace_dbuf.h \ $(top_srcdir)/include/os/linux/zfs/sys/trace_dmu.h \ diff --git a/include/os/linux/zfs/sys/trace_dbgmsg.h b/include/os/linux/zfs/sys/trace_dbgmsg.h index b2ef529ed6..513918d004 100644 --- a/include/os/linux/zfs/sys/trace_dbgmsg.h +++ b/include/os/linux/zfs/sys/trace_dbgmsg.h @@ -22,10 +22,16 @@ #if defined(_KERNEL) #if defined(HAVE_DECLARE_EVENT_CLASS) -/* Do not include this file directly. Please use instead. */ -#ifndef _SYS_TRACE_DBGMSG_INDIRECT -#error "trace_dbgmsg.h included directly" -#endif +#undef TRACE_SYSTEM +#define TRACE_SYSTEM zfs + +#undef TRACE_SYSTEM_VAR +#define TRACE_SYSTEM_VAR zfs_dbgmsg + +#if !defined(_TRACE_DBGMSG_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_DBGMSG_H + +#include /* * This file defines tracepoint events for use by the dbgmsg(), @@ -67,6 +73,14 @@ DEFINE_EVENT(zfs_dprintf_class, name, \ /* END CSTYLED */ DEFINE_DPRINTF_EVENT(zfs_zfs__dprintf); +#endif /* _TRACE_DBGMSG_H */ + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_PATH sys +#define TRACE_INCLUDE_FILE trace_dbgmsg +#include + #else DEFINE_DTRACE_PROBE1(zfs__dprintf); diff --git a/include/os/linux/zfs/sys/trace_defs.h b/include/os/linux/zfs/sys/trace_zfs.h similarity index 98% rename from include/os/linux/zfs/sys/trace_defs.h rename to include/os/linux/zfs/sys/trace_zfs.h index aaff65fbc0..0e19f8d186 100644 --- a/include/os/linux/zfs/sys/trace_defs.h +++ b/include/os/linux/zfs/sys/trace_zfs.h @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include diff --git a/include/sys/zfs_context.h b/include/sys/zfs_context.h index 8b31bbc080..59846b1c8d 100644 --- a/include/sys/zfs_context.h +++ b/include/sys/zfs_context.h @@ -116,7 +116,7 @@ #include #include #include -#include +#include /* * Stack diff --git a/lib/libspl/include/sys/Makefile.am b/lib/libspl/include/sys/Makefile.am index d84ed1ec4a..a83fc025eb 100644 --- a/lib/libspl/include/sys/Makefile.am +++ b/lib/libspl/include/sys/Makefile.am @@ -35,7 +35,8 @@ libspl_HEADERS = \ $(top_srcdir)/lib/libspl/include/sys/sunddi.h \ $(top_srcdir)/lib/libspl/include/sys/systeminfo.h \ $(top_srcdir)/lib/libspl/include/sys/time.h \ - $(top_srcdir)/lib/libspl/include/sys/trace_defs.h \ + $(top_srcdir)/lib/libspl/include/sys/trace_spl.h \ + $(top_srcdir)/lib/libspl/include/sys/trace_zfs.h \ $(top_srcdir)/lib/libspl/include/sys/types32.h \ $(top_srcdir)/lib/libspl/include/sys/types.h \ $(top_srcdir)/lib/libspl/include/sys/tzfile.h \ diff --git a/lib/libspl/include/sys/trace_spl.h b/lib/libspl/include/sys/trace_spl.h new file mode 100644 index 0000000000..b80d288f73 --- /dev/null +++ b/lib/libspl/include/sys/trace_spl.h @@ -0,0 +1,24 @@ +/* Here to keep the libspl build happy */ + +#ifndef _LIBSPL_SPL_TRACE_H +#define _LIBSPL_SPL_TRACE_H + +/* + * The set-error SDT probe is extra static, in that we declare its fake + * function literally, rather than with the DTRACE_PROBE1() macro. This is + * necessary so that SET_ERROR() can evaluate to a value, which wouldn't + * be possible if it required multiple statements (to declare the function + * and then call it). + * + * SET_ERROR() uses the comma operator so that it can be used without much + * additional code. For example, "return (EINVAL);" becomes + * "return (SET_ERROR(EINVAL));". Note that the argument will be evaluated + * twice, so it should not have side effects (e.g. something like: + * "return (SET_ERROR(log_error(EINVAL, info)));" would log the error twice). + */ +#undef SET_ERROR +#define SET_ERROR(err) \ + (__set_error(__FILE__, __func__, __LINE__, err), err) + + +#endif diff --git a/lib/libspl/include/sys/trace_defs.h b/lib/libspl/include/sys/trace_zfs.h similarity index 100% rename from lib/libspl/include/sys/trace_defs.h rename to lib/libspl/include/sys/trace_zfs.h diff --git a/module/os/linux/spl/Makefile.in b/module/os/linux/spl/Makefile.in index a29c36a2a4..94804bfed4 100644 --- a/module/os/linux/spl/Makefile.in +++ b/module/os/linux/spl/Makefile.in @@ -11,6 +11,7 @@ $(MODULE)-objs += ../os/linux/spl/spl-proc.o $(MODULE)-objs += ../os/linux/spl/spl-procfs-list.o $(MODULE)-objs += ../os/linux/spl/spl-taskq.o $(MODULE)-objs += ../os/linux/spl/spl-thread.o +$(MODULE)-objs += ../os/linux/spl/spl-trace.o $(MODULE)-objs += ../os/linux/spl/spl-tsd.o $(MODULE)-objs += ../os/linux/spl/spl-vmem.o $(MODULE)-objs += ../os/linux/spl/spl-vnode.o diff --git a/module/os/linux/spl/spl-trace.c b/module/os/linux/spl/spl-trace.c new file mode 100644 index 0000000000..6415f9a91b --- /dev/null +++ b/module/os/linux/spl/spl-trace.c @@ -0,0 +1,30 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Each DTRACE_PROBE must define its trace point in one (and only one) + * source file, so this dummy file exists for that purpose. + */ + +#ifdef _KERNEL +#define CREATE_TRACE_POINTS +#include +#endif diff --git a/module/os/linux/zfs/arc_os.c b/module/os/linux/zfs/arc_os.c index c9db31096f..1e0cabd0a5 100644 --- a/module/os/linux/zfs/arc_os.c +++ b/module/os/linux/zfs/arc_os.c @@ -54,7 +54,7 @@ #include #include #include -#include +#include #include int64_t last_free_memory; diff --git a/module/os/linux/zfs/trace.c b/module/os/linux/zfs/trace.c index 7b2f981ee9..a690822ae1 100644 --- a/module/os/linux/zfs/trace.c +++ b/module/os/linux/zfs/trace.c @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include diff --git a/module/os/linux/zfs/zfs_debug.c b/module/os/linux/zfs/zfs_debug.c index 538533d27d..a64971d0a3 100644 --- a/module/os/linux/zfs/zfs_debug.c +++ b/module/os/linux/zfs/zfs_debug.c @@ -24,6 +24,7 @@ */ #include +#include typedef struct zfs_dbgmsg { procfs_list_node_t zdm_node; diff --git a/module/os/linux/zfs/zio_os.c b/module/os/linux/zfs/zio_os.c index 207484c4d7..533e0cb45d 100644 --- a/module/os/linux/zfs/zio_os.c +++ b/module/os/linux/zfs/zio_os.c @@ -29,7 +29,7 @@ #include #include #include -#include +#include void zio_delay_interrupt(zio_t *zio) diff --git a/module/zfs/arc.c b/module/zfs/arc.c index 45211bc5cf..6ed2a220d9 100644 --- a/module/zfs/arc.c +++ b/module/zfs/arc.c @@ -297,7 +297,7 @@ #include #include #include -#include +#include #include #include diff --git a/module/zfs/dbuf.c b/module/zfs/dbuf.c index bf8b48d252..9c1132cfbd 100644 --- a/module/zfs/dbuf.c +++ b/module/zfs/dbuf.c @@ -44,7 +44,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/module/zfs/dmu.c b/module/zfs/dmu.c index 78c6734331..f34429eee8 100644 --- a/module/zfs/dmu.c +++ b/module/zfs/dmu.c @@ -49,7 +49,7 @@ #include #include #include -#include +#include #include #ifdef _KERNEL #include diff --git a/module/zfs/dmu_tx.c b/module/zfs/dmu_tx.c index 66dbb583a1..958ae1dc76 100644 --- a/module/zfs/dmu_tx.c +++ b/module/zfs/dmu_tx.c @@ -37,7 +37,7 @@ #include #include #include -#include +#include typedef void (*dmu_tx_hold_func_t)(dmu_tx_t *tx, struct dnode *dn, uint64_t arg1, uint64_t arg2); diff --git a/module/zfs/dnode.c b/module/zfs/dnode.c index f03e88eb9e..343aadbedb 100644 --- a/module/zfs/dnode.c +++ b/module/zfs/dnode.c @@ -37,7 +37,7 @@ #include #include #include -#include +#include #include dnode_stats_t dnode_stats = { diff --git a/module/zfs/dsl_pool.c b/module/zfs/dsl_pool.c index 59104e6d10..4083abb7e7 100644 --- a/module/zfs/dsl_pool.c +++ b/module/zfs/dsl_pool.c @@ -48,7 +48,7 @@ #include #include #include -#include +#include #include /* diff --git a/module/zfs/multilist.c b/module/zfs/multilist.c index 73cf8cbbc2..27b17c8f3e 100644 --- a/module/zfs/multilist.c +++ b/module/zfs/multilist.c @@ -18,7 +18,7 @@ #include #include -#include +#include /* needed for spa_get_random() */ #include diff --git a/module/zfs/rrwlock.c b/module/zfs/rrwlock.c index c48a5d3ed7..c6d358b347 100644 --- a/module/zfs/rrwlock.c +++ b/module/zfs/rrwlock.c @@ -28,7 +28,7 @@ #include #include -#include +#include /* * This file contains the implementation of a re-entrant read diff --git a/module/zfs/txg.c b/module/zfs/txg.c index ae96f5ec0d..e972bcc255 100644 --- a/module/zfs/txg.c +++ b/module/zfs/txg.c @@ -33,7 +33,7 @@ #include #include #include -#include +#include /* * ZFS Transaction Groups diff --git a/module/zfs/vdev_removal.c b/module/zfs/vdev_removal.c index a4fac1cc59..8089571e12 100644 --- a/module/zfs/vdev_removal.c +++ b/module/zfs/vdev_removal.c @@ -47,7 +47,7 @@ #include #include #include -#include +#include /* * This file contains the necessary logic to remove vdevs from a diff --git a/module/zfs/zil.c b/module/zfs/zil.c index 0a62ace144..6ca0bc73e4 100644 --- a/module/zfs/zil.c +++ b/module/zfs/zil.c @@ -41,7 +41,7 @@ #include #include #include -#include +#include #include /* diff --git a/module/zfs/zio.c b/module/zfs/zio.c index 092262590c..1ac2f52bbd 100644 --- a/module/zfs/zio.c +++ b/module/zfs/zio.c @@ -44,7 +44,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/module/zfs/zrlock.c b/module/zfs/zrlock.c index fe9044f2cf..6deb256480 100644 --- a/module/zfs/zrlock.c +++ b/module/zfs/zrlock.c @@ -39,7 +39,7 @@ * function calls. */ #include -#include +#include /* * A ZRL can be locked only while there are zero references, so ZRL_LOCKED is