+2024-05-13 (National Leprechaun Day) LTTng modules 2.13.13
+ * splice wrapper: Fix missing declaration
+ * page alloc wrapper: Fix get_pfnblock_flags_mask prototype
+ * lttng probe: include events-internal.h
+ * syscalls: Remove unused duplicated code
+ * statedump: Add missing events-internal.h include
+ * lttng-events: Add missing static
+ * event notifier: Add missing static
+ * context callstack: Add missing static
+ * lttng-clock: Add missing lttng/events-internal.h include
+ * lttng-calibrate: Add missing static and include
+ * lttng-bytecode: Remove dead code
+ * lttng-abi: Add missing static to function definitions
+ * ring buffer: Add missing static to function definitions
+ * blkdev wrapper: Fix constness warning
+ * Fix: timer_expire_entry changed in 4.19.312
+ * Fix: dev_base_lock removed in linux 6.9-rc1
+ * Fix: mm_compaction_migratepages changed in linux 6.9-rc1
+ * Fix: ASoC add component to set_bias_level events in linux 6.9-rc1
+ * Fix: ASoC snd_doc_dapm on linux 6.9-rc1
+ * Fix: build kvm probe on EL 8.4+
+ * Fix: support ext4_journal_start on EL 8.4+
+ * Fix: correct RHEL range for kmem_cache_free define
+
2024-03-21 (National Common Courtesy Day) LTTng modules 2.13.12
* docs: Add supported versions and fix-backport policy
* docs: Add links to project resources
These files are licensed exclusively under the GPL-2.0 license. See
LICENSES/GPL-2.0 for details.
-lib/ringbuffer/ring_buffer_splice.c
-lib/ringbuffer/ring_buffer_mmap.c
-instrumentation/events/lttng-module/*.h
-wrapper/list.h
+src/lib/ringbuffer/ring_buffer_splice.c
+src/lib/ringbuffer/ring_buffer_mmap.c
+include/instrumentation/events/*.h
+include/wrapper/list.h
* MIT-style license
include/lttng/prio_heap.h
include/lttng/bitfield.h
-include/lttng/filter-bytecode.h
-include/filter.h
-lib/prio_heap/lttng_prio_heap.c
-lttng-filter-interpreter.c
-lttng-filter-specialize.c
-lttng-filter-validator.c
-lttng-filter.c
+include/lttng/bytecode.h
+include/lttng/lttng-bytecode.h
+src/lib/prio_heap/lttng_prio_heap.c
+src/lttng-bytecode-interpreter.c
+src/lttng-bytecode-specialize.c
+src/lttng-bytecode-validator.c
+src/lttng-bytecode.c
)
#endif
-#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,14,0) || \
+#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,10,0))
+LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_tree_ref,
+
+ TP_PROTO(const struct btrfs_fs_info *fs_info,
+ const struct btrfs_delayed_ref_node *ref),
+
+ TP_ARGS(fs_info, ref),
+
+ TP_FIELDS(
+ ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE)
+ ctf_integer(u64, bytenr, ref->bytenr)
+ ctf_integer(u64, num_bytes, ref->num_bytes)
+ ctf_integer(int, action, ref->action)
+ ctf_integer(u64, parent, ref->parent)
+ ctf_integer(u64, ref_root, ref->ref_root)
+ ctf_integer(int, level, ref->tree_ref.level)
+ ctf_integer(int, type, ref->type)
+ ctf_integer(u64, seq, ref->seq)
+ )
+)
+
+LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_tree_ref,
+
+ add_delayed_tree_ref,
+
+ btrfs_add_delayed_tree_ref,
+
+ TP_PROTO(const struct btrfs_fs_info *fs_info,
+ const struct btrfs_delayed_ref_node *ref),
+
+ TP_ARGS(fs_info, ref)
+)
+
+LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_tree_ref,
+
+ run_delayed_tree_ref,
+
+ btrfs_run_delayed_tree_ref,
+
+ TP_PROTO(const struct btrfs_fs_info *fs_info,
+ const struct btrfs_delayed_ref_node *ref),
+
+ TP_ARGS(fs_info, ref)
+)
+#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,14,0) || \
LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \
LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \
LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \
)
#endif
-#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,14,0) || \
+#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,10,0))
+LTTNG_TRACEPOINT_EVENT_CLASS(btrfs_delayed_data_ref,
+
+ TP_PROTO(const struct btrfs_fs_info *fs_info,
+ const struct btrfs_delayed_ref_node *ref),
+
+ TP_ARGS(fs_info, ref),
+
+ TP_FIELDS(
+ ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE)
+ ctf_integer(u64, bytenr, ref->bytenr)
+ ctf_integer(u64, num_bytes, ref->num_bytes)
+ ctf_integer(int, action, ref->action)
+ ctf_integer(u64, parent, ref->parent)
+ ctf_integer(u64, ref_root, ref->ref_root)
+ ctf_integer(u64, owner, ref->data_ref.objectid)
+ ctf_integer(u64, offset, ref->data_ref.offset)
+ ctf_integer(int, type, ref->type)
+ ctf_integer(u64, seq, ref->seq)
+ )
+)
+
+LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_data_ref,
+
+ add_delayed_data_ref,
+
+ btrfs_add_delayed_data_ref,
+
+ TP_PROTO(const struct btrfs_fs_info *fs_info,
+ const struct btrfs_delayed_ref_node *ref),
+
+ TP_ARGS(fs_info, ref)
+)
+
+LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(btrfs_delayed_data_ref,
+
+ run_delayed_data_ref,
+
+ btrfs_run_delayed_data_ref,
+
+ TP_PROTO(const struct btrfs_fs_info *fs_info,
+ const struct btrfs_delayed_ref_node *ref),
+
+ TP_ARGS(fs_info, ref)
+)
+
+#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,14,0) || \
LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \
LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \
LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \
)
#endif
-#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,7,0))
+#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,7,0) || \
+ LTTNG_RHEL_KERNEL_RANGE(5,14,0,427,16,1, 5,15,0,0,0,0))
+
LTTNG_TRACEPOINT_EVENT(mm_vmscan_lru_isolate,
TP_PROTO(int classzone_idx,
#include <lttng/tracepoint-event.h>
#include <linux/udp.h>
+#include <lttng/kernel-version.h>
+#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,10,0))
+LTTNG_TRACEPOINT_ENUM(lttng_sk_family,
+ TP_ENUM_VALUES(
+ ctf_enum_value("AF_INET", AF_INET)
+ ctf_enum_value("AF_INET6", AF_INET6)
+ )
+)
+
+LTTNG_TRACEPOINT_EVENT(udp_fail_queue_rcv_skb,
+
+ TP_PROTO(int rc, struct sock *sk, struct sk_buff *skb),
+
+ TP_ARGS(rc, sk, skb),
+
+ TP_FIELDS(
+ ctf_integer(int, rc, rc)
+ ctf_integer(__u16, sport, ntohs(udp_hdr(skb)->source))
+ ctf_integer(__u16, dport, ntohs(udp_hdr(skb)->dest))
+ ctf_enum(lttng_sk_family, __u16, family, sk->sk_family)
+ /*
+ * The 'saddr' and 'daddr' fields from the upstream tracepoint
+ * are currently not extracted. It is recommended to use a
+ * tracepoint from the 'net' probe instead which includes all
+ * fields from the IP header.
+ */
+ )
+)
+#else
LTTNG_TRACEPOINT_EVENT(udp_fail_queue_rcv_skb,
TP_PROTO(int rc, struct sock *sk),
ctf_integer(__u16, lport, inet_sk(sk)->inet_num)
)
)
+#endif
#endif /* LTTNG_TRACE_UDP_H */
#define LTTNG_MODULES_MAJOR_VERSION 2
#define LTTNG_MODULES_MINOR_VERSION 13
-#define LTTNG_MODULES_PATCHLEVEL_VERSION 12
+#define LTTNG_MODULES_PATCHLEVEL_VERSION 13
#define LTTNG_MODULES_EXTRAVERSION ""
#define LTTNG_VERSION_NAME "Nordicité"
-/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) */
+/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) */
#ifndef _LTTNG_UTILS_H
#define _LTTNG_UTILS_H
#endif
-#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0))
+#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,10,0))
+static inline
+bool lttng_close_on_exec(unsigned int fd, const struct files_struct *files)
+{
+ return close_on_exec(fd, files);
+}
-static inline bool lttng_close_on_exec(int fd, const struct fdtable *fdt)
+#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0))
+
+static inline
+bool lttng_close_on_exec(unsigned int fd, const struct files_struct *files)
{
- return close_on_exec(fd, fdt);
+ return close_on_exec(fd, files_fdtable(files));
}
#else
-static inline bool lttng_close_on_exec(int fd, const struct fdtable *fdt)
+static inline
+bool lttng_close_on_exec(unsigned int fd, const struct files_struct *files)
{
- return FD_ISSET(fd, fdt->close_on_exec);
+ return FD_ISSET(fd, files_fdtable(files)->close_on_exec);
}
#endif
-/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1)
+/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
*
* lttng-ring-buffer-event-notifier-client.c
*
-/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1)
+/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
*
* lttng-ring-buffer-event-notifier-client.h
*
*/
flags &= ~FMODE_NONOTIFY;
fdt = files_fdtable(ctx->files);
+
/*
- * We need to check here again whether fd is within the fdt
- * max_fds range, because we might be seeing a different
- * files_fdtable() than iterate_fd(), assuming only RCU is
- * protecting the read. In reality, iterate_fd() holds
- * file_lock, which should ensure the fdt does not change while
- * the lock is taken, but we are not aware whether this is
- * guaranteed or not, so play safe.
+ * The fdt should only grow and iterate_fd() holds file_lock, which
+ * should ensure the fdt does not change while the lock is taken but be
+ * cautious and check anyway.
*/
- if (fd < fdt->max_fds && lttng_close_on_exec(fd, fdt))
+ if (WARN_ON_ONCE(fd >= fdt->max_fds))
+ return 0;
+
+ if (lttng_close_on_exec(fd, ctx->files))
flags |= O_CLOEXEC;
+
+ /*
+ * If d_path() failed to get a full path for the file, use the dentry
+ * name instead to at least get a filename.
+ */
if (IS_ERR(s)) {
struct dentry *dentry = file->f_path.dentry;