* [PATCH v2 2/2] fsverity: add tracepoints
2026-01-19 16:32 [PATCH v2 0/2] Add traces and file attributes for fs-verity Andrey Albershteyn
@ 2026-01-19 16:32 ` Andrey Albershteyn
0 siblings, 0 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2026-01-19 16:32 UTC (permalink / raw)
To: linux-xfs, fstests, ebiggers; +Cc: Andrey Albershteyn, djwong
fs-verity previously had debug printk but it was removed. This patch
adds trace points to similar places, as a better alternative.
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
[djwong: fix formatting]
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
MAINTAINERS | 1 +
fs/verity/enable.c | 4 +
fs/verity/fsverity_private.h | 2 +
fs/verity/init.c | 1 +
fs/verity/verify.c | 9 ++
include/trace/events/fsverity.h | 143 ++++++++++++++++++++++++++++++++
6 files changed, 160 insertions(+)
create mode 100644 include/trace/events/fsverity.h
diff --git a/MAINTAINERS b/MAINTAINERS
index 12f49de7fe03..17607340dfab 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -10311,6 +10311,7 @@ T: git https://git.kernel.org/pub/scm/fs/fsverity/linux.git
F: Documentation/filesystems/fsverity.rst
F: fs/verity/
F: include/linux/fsverity.h
+F: include/trace/events/fsverity.h
F: include/uapi/linux/fsverity.h
FT260 FTDI USB-HID TO I2C BRIDGE DRIVER
diff --git a/fs/verity/enable.c b/fs/verity/enable.c
index 95ec42b84797..8718d943b428 100644
--- a/fs/verity/enable.c
+++ b/fs/verity/enable.c
@@ -222,6 +222,8 @@ static int enable_verity(struct file *filp,
if (err)
goto out;
+ trace_fsverity_enable(inode, ¶ms);
+
/*
* Start enabling verity on this file, serialized by the inode lock.
* Fail if verity is already enabled or is already being enabled.
@@ -264,6 +266,8 @@ static int enable_verity(struct file *filp,
goto rollback;
}
+ trace_fsverity_tree_done(inode, vi, ¶ms);
+
/*
* Tell the filesystem to finish enabling verity on the file.
* Serialized with ->begin_enable_verity() by the inode lock.
diff --git a/fs/verity/fsverity_private.h b/fs/verity/fsverity_private.h
index dd20b138d452..4b7ae1748f4e 100644
--- a/fs/verity/fsverity_private.h
+++ b/fs/verity/fsverity_private.h
@@ -161,4 +161,6 @@ static inline void fsverity_init_signature(void)
void __init fsverity_init_workqueue(void);
+#include <trace/events/fsverity.h>
+
#endif /* _FSVERITY_PRIVATE_H */
diff --git a/fs/verity/init.c b/fs/verity/init.c
index 6e8d33b50240..d65206608583 100644
--- a/fs/verity/init.c
+++ b/fs/verity/init.c
@@ -5,6 +5,7 @@
* Copyright 2019 Google LLC
*/
+#define CREATE_TRACE_POINTS
#include "fsverity_private.h"
#include <linux/ratelimit.h>
diff --git a/fs/verity/verify.c b/fs/verity/verify.c
index 86067c8b40cf..940b8b956d7e 100644
--- a/fs/verity/verify.c
+++ b/fs/verity/verify.c
@@ -135,6 +135,9 @@ static bool verify_data_block(struct inode *inode, struct fsverity_info *vi,
/* Byte offset of the wanted hash relative to @addr */
unsigned int hoffset;
} hblocks[FS_VERITY_MAX_LEVELS];
+
+ trace_fsverity_verify_data_block(inode, params, data_pos);
+
/*
* The index of the previous level's block within that level; also the
* index of that block's hash within the current level.
@@ -214,6 +217,9 @@ static bool verify_data_block(struct inode *inode, struct fsverity_info *vi,
want_hash = _want_hash;
kunmap_local(haddr);
put_page(hpage);
+ trace_fsverity_merkle_hit(inode, data_pos, hblock_idx,
+ level,
+ hoffset >> params->log_digestsize);
goto descend;
}
hblocks[level].page = hpage;
@@ -232,6 +238,9 @@ static bool verify_data_block(struct inode *inode, struct fsverity_info *vi,
unsigned long hblock_idx = hblocks[level - 1].index;
unsigned int hoffset = hblocks[level - 1].hoffset;
+ trace_fsverity_verify_merkle_block(inode, hblock_idx,
+ level, hoffset >> params->log_digestsize);
+
fsverity_hash_block(params, haddr, real_hash);
if (memcmp(want_hash, real_hash, hsize) != 0)
goto corrupted;
diff --git a/include/trace/events/fsverity.h b/include/trace/events/fsverity.h
new file mode 100644
index 000000000000..1825f87a00d6
--- /dev/null
+++ b/include/trace/events/fsverity.h
@@ -0,0 +1,143 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM fsverity
+
+#if !defined(_TRACE_FSVERITY_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_FSVERITY_H
+
+#include <linux/tracepoint.h>
+
+struct fsverity_descriptor;
+struct merkle_tree_params;
+struct fsverity_info;
+
+TRACE_EVENT(fsverity_enable,
+ TP_PROTO(const struct inode *inode,
+ const struct merkle_tree_params *params),
+ TP_ARGS(inode, params),
+ TP_STRUCT__entry(
+ __field(ino_t, ino)
+ __field(u64, data_size)
+ __field(unsigned int, block_size)
+ __field(unsigned int, num_levels)
+ __field(u64, tree_size)
+ ),
+ TP_fast_assign(
+ __entry->ino = inode->i_ino;
+ __entry->data_size = i_size_read(inode);
+ __entry->block_size = params->block_size;
+ __entry->num_levels = params->num_levels;
+ __entry->tree_size = params->tree_size;
+ ),
+ TP_printk("ino %lu data size %llu tree size %llu block size %u levels %u",
+ (unsigned long) __entry->ino,
+ __entry->data_size,
+ __entry->tree_size,
+ __entry->block_size,
+ __entry->num_levels)
+);
+
+TRACE_EVENT(fsverity_tree_done,
+ TP_PROTO(const struct inode *inode, const struct fsverity_info *vi,
+ const struct merkle_tree_params *params),
+ TP_ARGS(inode, vi, params),
+ TP_STRUCT__entry(
+ __field(ino_t, ino)
+ __field(unsigned int, levels)
+ __field(unsigned int, block_size)
+ __field(u64, tree_size)
+ __dynamic_array(u8, root_hash, params->digest_size)
+ __dynamic_array(u8, file_digest, params->digest_size)
+ ),
+ TP_fast_assign(
+ __entry->ino = inode->i_ino;
+ __entry->levels = params->num_levels;
+ __entry->block_size = params->block_size;
+ __entry->tree_size = params->tree_size;
+ memcpy(__get_dynamic_array(root_hash), vi->root_hash, __get_dynamic_array_len(root_hash));
+ memcpy(__get_dynamic_array(file_digest), vi->file_digest, __get_dynamic_array_len(file_digest));
+ ),
+ TP_printk("ino %lu levels %d block_size %d tree_size %lld root_hash %s digest %s",
+ (unsigned long) __entry->ino,
+ __entry->levels,
+ __entry->block_size,
+ __entry->tree_size,
+ __print_hex_str(__get_dynamic_array(root_hash), __get_dynamic_array_len(root_hash)),
+ __print_hex_str(__get_dynamic_array(file_digest), __get_dynamic_array_len(file_digest)))
+);
+
+TRACE_EVENT(fsverity_verify_data_block,
+ TP_PROTO(const struct inode *inode,
+ const struct merkle_tree_params *params,
+ u64 data_pos),
+ TP_ARGS(inode, params, data_pos),
+ TP_STRUCT__entry(
+ __field(ino_t, ino)
+ __field(u64, data_pos)
+ __field(unsigned int, block_size)
+ ),
+ TP_fast_assign(
+ __entry->ino = inode->i_ino;
+ __entry->data_pos = data_pos;
+ __entry->block_size = params->block_size;
+ ),
+ TP_printk("ino %lu pos %lld merkle_blocksize %u",
+ (unsigned long) __entry->ino,
+ __entry->data_pos,
+ __entry->block_size)
+);
+
+TRACE_EVENT(fsverity_merkle_hit,
+ TP_PROTO(const struct inode *inode, u64 data_pos,
+ unsigned long hblock_idx, unsigned int level,
+ unsigned int hidx),
+ TP_ARGS(inode, data_pos, hblock_idx, level, hidx),
+ TP_STRUCT__entry(
+ __field(ino_t, ino)
+ __field(u64, data_pos)
+ __field(unsigned long, hblock_idx)
+ __field(unsigned int, level)
+ __field(unsigned int, hidx)
+ ),
+ TP_fast_assign(
+ __entry->ino = inode->i_ino;
+ __entry->data_pos = data_pos;
+ __entry->hblock_idx = hblock_idx;
+ __entry->level = level;
+ __entry->hidx = hidx;
+ ),
+ TP_printk("ino %lu data_pos %llu hblock_idx %lu level %u hidx %u",
+ (unsigned long) __entry->ino,
+ __entry->data_pos,
+ __entry->hblock_idx,
+ __entry->level,
+ __entry->hidx)
+);
+
+TRACE_EVENT(fsverity_verify_merkle_block,
+ TP_PROTO(const struct inode *inode, unsigned long index,
+ unsigned int level, unsigned int hidx),
+ TP_ARGS(inode, index, level, hidx),
+ TP_STRUCT__entry(
+ __field(ino_t, ino)
+ __field(unsigned long, index)
+ __field(unsigned int, level)
+ __field(unsigned int, hidx)
+ ),
+ TP_fast_assign(
+ __entry->ino = inode->i_ino;
+ __entry->index = index;
+ __entry->level = level;
+ __entry->hidx = hidx;
+ ),
+ TP_printk("ino %lu hblock_idx %lu level %u hidx %u",
+ (unsigned long) __entry->ino,
+ __entry->index,
+ __entry->level,
+ __entry->hidx)
+);
+
+#endif /* _TRACE_FSVERITY_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
--
2.52.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 0/2] Add traces and file attributes for fs-verity
@ 2026-01-19 16:56 Andrey Albershteyn
2026-01-19 16:56 ` [PATCH v2 1/2] fs: add FS_XFLAG_VERITY for fs-verity files Andrey Albershteyn
2026-01-19 16:56 ` [PATCH v2 2/2] fsverity: add tracepoints Andrey Albershteyn
0 siblings, 2 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2026-01-19 16:56 UTC (permalink / raw)
To: linux-xfs, fstests, ebiggers; +Cc: Andrey Albershteyn, djwong
Hi all,
This two small patches grew from fs-verity XFS patchset. I think they're
self-contained improvements which could go without XFS implementation.
v2:
- Update kernel version in the docs to v7.0
- Move trace point before merkle tree block hash check
- Update commit message in patch 2
- Add VERITY to FS_COMMON_FL and FS_XFLAG_COMMON constants
- Fix block index argument in the tree block hash trace point
Andrey Albershteyn (2):
fs: add FS_XFLAG_VERITY for fs-verity files
fsverity: add tracepoints
Documentation/filesystems/fsverity.rst | 16 +++
MAINTAINERS | 1 +
fs/file_attr.c | 4 +
fs/verity/enable.c | 4 +
fs/verity/fsverity_private.h | 2 +
fs/verity/init.c | 1 +
fs/verity/verify.c | 9 ++
include/linux/fileattr.h | 6 +-
include/trace/events/fsverity.h | 143 +++++++++++++++++++++++++
include/uapi/linux/fs.h | 1 +
10 files changed, 184 insertions(+), 3 deletions(-)
create mode 100644 include/trace/events/fsverity.h
--
2.52.0
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v2 1/2] fs: add FS_XFLAG_VERITY for fs-verity files
2026-01-19 16:56 [PATCH v2 0/2] Add traces and file attributes for fs-verity Andrey Albershteyn
@ 2026-01-19 16:56 ` Andrey Albershteyn
2026-01-20 15:51 ` Darrick J. Wong
2026-01-21 0:33 ` Eric Biggers
2026-01-19 16:56 ` [PATCH v2 2/2] fsverity: add tracepoints Andrey Albershteyn
1 sibling, 2 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2026-01-19 16:56 UTC (permalink / raw)
To: linux-xfs, fstests, ebiggers; +Cc: Andrey Albershteyn, djwong
fs-verity introduced inode flag for inodes with enabled fs-verity on
them. This patch adds FS_XFLAG_VERITY file attribute which can be
retrieved with FS_IOC_FSGETXATTR ioctl() and file_getattr() syscall.
This flag is read-only and can not be set with corresponding set ioctl()
and file_setattr(). The FS_IOC_SETFLAGS requires file to be opened for
writing which is not allowed for verity files. The FS_IOC_FSSETXATTR and
file_setattr() clears this flag from the user input.
As this is now common flag for both flag interfaces (flags/xflags) add
it to overlapping flags list to exclude it from overwrite.
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
Documentation/filesystems/fsverity.rst | 16 ++++++++++++++++
fs/file_attr.c | 4 ++++
include/linux/fileattr.h | 6 +++---
include/uapi/linux/fs.h | 1 +
4 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/Documentation/filesystems/fsverity.rst b/Documentation/filesystems/fsverity.rst
index 412cf11e3298..22b49b295d1f 100644
--- a/Documentation/filesystems/fsverity.rst
+++ b/Documentation/filesystems/fsverity.rst
@@ -341,6 +341,22 @@ the file has fs-verity enabled. This can perform better than
FS_IOC_GETFLAGS and FS_IOC_MEASURE_VERITY because it doesn't require
opening the file, and opening verity files can be expensive.
+FS_IOC_FSGETXATTR
+-----------------
+
+Since Linux v7.0, the FS_IOC_FSGETXATTR ioctl sets FS_XFLAG_VERITY (0x00020000)
+in the returned flags when the file has verity enabled. Note that this attribute
+cannot be set with FS_IOC_FSSETXATTR as enabling verity requires input
+parameters. See FS_IOC_ENABLE_VERITY.
+
+file_getattr
+------------
+
+Since Linux v7.0, the file_getattr() syscall sets FS_XFLAG_VERITY (0x00020000)
+in the returned flags when the file has verity enabled. Note that this attribute
+cannot be set with file_setattr() as enabling verity requires input parameters.
+See FS_IOC_ENABLE_VERITY.
+
.. _accessing_verity_files:
Accessing verity files
diff --git a/fs/file_attr.c b/fs/file_attr.c
index 13cdb31a3e94..f44c873af92b 100644
--- a/fs/file_attr.c
+++ b/fs/file_attr.c
@@ -37,6 +37,8 @@ void fileattr_fill_xflags(struct file_kattr *fa, u32 xflags)
fa->flags |= FS_DAX_FL;
if (fa->fsx_xflags & FS_XFLAG_PROJINHERIT)
fa->flags |= FS_PROJINHERIT_FL;
+ if (fa->fsx_xflags & FS_XFLAG_VERITY)
+ fa->flags |= FS_VERITY_FL;
}
EXPORT_SYMBOL(fileattr_fill_xflags);
@@ -67,6 +69,8 @@ void fileattr_fill_flags(struct file_kattr *fa, u32 flags)
fa->fsx_xflags |= FS_XFLAG_DAX;
if (fa->flags & FS_PROJINHERIT_FL)
fa->fsx_xflags |= FS_XFLAG_PROJINHERIT;
+ if (fa->flags & FS_VERITY_FL)
+ fa->fsx_xflags |= FS_XFLAG_VERITY;
}
EXPORT_SYMBOL(fileattr_fill_flags);
diff --git a/include/linux/fileattr.h b/include/linux/fileattr.h
index f89dcfad3f8f..3780904a63a6 100644
--- a/include/linux/fileattr.h
+++ b/include/linux/fileattr.h
@@ -7,16 +7,16 @@
#define FS_COMMON_FL \
(FS_SYNC_FL | FS_IMMUTABLE_FL | FS_APPEND_FL | \
FS_NODUMP_FL | FS_NOATIME_FL | FS_DAX_FL | \
- FS_PROJINHERIT_FL)
+ FS_PROJINHERIT_FL | FS_VERITY_FL)
#define FS_XFLAG_COMMON \
(FS_XFLAG_SYNC | FS_XFLAG_IMMUTABLE | FS_XFLAG_APPEND | \
FS_XFLAG_NODUMP | FS_XFLAG_NOATIME | FS_XFLAG_DAX | \
- FS_XFLAG_PROJINHERIT)
+ FS_XFLAG_PROJINHERIT | FS_XFLAG_VERITY)
/* Read-only inode flags */
#define FS_XFLAG_RDONLY_MASK \
- (FS_XFLAG_PREALLOC | FS_XFLAG_HASATTR)
+ (FS_XFLAG_PREALLOC | FS_XFLAG_HASATTR | FS_XFLAG_VERITY)
/* Flags to indicate valid value of fsx_ fields */
#define FS_XFLAG_VALUES_MASK \
diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h
index 66ca526cf786..70b2b661f42c 100644
--- a/include/uapi/linux/fs.h
+++ b/include/uapi/linux/fs.h
@@ -253,6 +253,7 @@ struct file_attr {
#define FS_XFLAG_FILESTREAM 0x00004000 /* use filestream allocator */
#define FS_XFLAG_DAX 0x00008000 /* use DAX for IO */
#define FS_XFLAG_COWEXTSIZE 0x00010000 /* CoW extent size allocator hint */
+#define FS_XFLAG_VERITY 0x00020000 /* fs-verity enabled */
#define FS_XFLAG_HASATTR 0x80000000 /* no DIFLAG for this */
/* the read-only stuff doesn't really belong here, but any other place is
--
2.52.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 2/2] fsverity: add tracepoints
2026-01-19 16:56 [PATCH v2 0/2] Add traces and file attributes for fs-verity Andrey Albershteyn
2026-01-19 16:56 ` [PATCH v2 1/2] fs: add FS_XFLAG_VERITY for fs-verity files Andrey Albershteyn
@ 2026-01-19 16:56 ` Andrey Albershteyn
2026-01-21 0:39 ` Eric Biggers
1 sibling, 1 reply; 11+ messages in thread
From: Andrey Albershteyn @ 2026-01-19 16:56 UTC (permalink / raw)
To: linux-xfs, fstests, ebiggers; +Cc: Andrey Albershteyn, djwong
fs-verity previously had debug printk but it was removed. This patch
adds trace points to similar places, as a better alternative.
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
[djwong: fix formatting]
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
MAINTAINERS | 1 +
fs/verity/enable.c | 4 +
fs/verity/fsverity_private.h | 2 +
fs/verity/init.c | 1 +
fs/verity/verify.c | 9 ++
include/trace/events/fsverity.h | 143 ++++++++++++++++++++++++++++++++
6 files changed, 160 insertions(+)
create mode 100644 include/trace/events/fsverity.h
diff --git a/MAINTAINERS b/MAINTAINERS
index 12f49de7fe03..17607340dfab 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -10311,6 +10311,7 @@ T: git https://git.kernel.org/pub/scm/fs/fsverity/linux.git
F: Documentation/filesystems/fsverity.rst
F: fs/verity/
F: include/linux/fsverity.h
+F: include/trace/events/fsverity.h
F: include/uapi/linux/fsverity.h
FT260 FTDI USB-HID TO I2C BRIDGE DRIVER
diff --git a/fs/verity/enable.c b/fs/verity/enable.c
index 95ec42b84797..8718d943b428 100644
--- a/fs/verity/enable.c
+++ b/fs/verity/enable.c
@@ -222,6 +222,8 @@ static int enable_verity(struct file *filp,
if (err)
goto out;
+ trace_fsverity_enable(inode, ¶ms);
+
/*
* Start enabling verity on this file, serialized by the inode lock.
* Fail if verity is already enabled or is already being enabled.
@@ -264,6 +266,8 @@ static int enable_verity(struct file *filp,
goto rollback;
}
+ trace_fsverity_tree_done(inode, vi, ¶ms);
+
/*
* Tell the filesystem to finish enabling verity on the file.
* Serialized with ->begin_enable_verity() by the inode lock.
diff --git a/fs/verity/fsverity_private.h b/fs/verity/fsverity_private.h
index dd20b138d452..4b7ae1748f4e 100644
--- a/fs/verity/fsverity_private.h
+++ b/fs/verity/fsverity_private.h
@@ -161,4 +161,6 @@ static inline void fsverity_init_signature(void)
void __init fsverity_init_workqueue(void);
+#include <trace/events/fsverity.h>
+
#endif /* _FSVERITY_PRIVATE_H */
diff --git a/fs/verity/init.c b/fs/verity/init.c
index 6e8d33b50240..d65206608583 100644
--- a/fs/verity/init.c
+++ b/fs/verity/init.c
@@ -5,6 +5,7 @@
* Copyright 2019 Google LLC
*/
+#define CREATE_TRACE_POINTS
#include "fsverity_private.h"
#include <linux/ratelimit.h>
diff --git a/fs/verity/verify.c b/fs/verity/verify.c
index 86067c8b40cf..940b8b956d7e 100644
--- a/fs/verity/verify.c
+++ b/fs/verity/verify.c
@@ -135,6 +135,9 @@ static bool verify_data_block(struct inode *inode, struct fsverity_info *vi,
/* Byte offset of the wanted hash relative to @addr */
unsigned int hoffset;
} hblocks[FS_VERITY_MAX_LEVELS];
+
+ trace_fsverity_verify_data_block(inode, params, data_pos);
+
/*
* The index of the previous level's block within that level; also the
* index of that block's hash within the current level.
@@ -214,6 +217,9 @@ static bool verify_data_block(struct inode *inode, struct fsverity_info *vi,
want_hash = _want_hash;
kunmap_local(haddr);
put_page(hpage);
+ trace_fsverity_merkle_hit(inode, data_pos, hblock_idx,
+ level,
+ hoffset >> params->log_digestsize);
goto descend;
}
hblocks[level].page = hpage;
@@ -232,6 +238,9 @@ static bool verify_data_block(struct inode *inode, struct fsverity_info *vi,
unsigned long hblock_idx = hblocks[level - 1].index;
unsigned int hoffset = hblocks[level - 1].hoffset;
+ trace_fsverity_verify_merkle_block(inode, hblock_idx,
+ level, hoffset >> params->log_digestsize);
+
fsverity_hash_block(params, haddr, real_hash);
if (memcmp(want_hash, real_hash, hsize) != 0)
goto corrupted;
diff --git a/include/trace/events/fsverity.h b/include/trace/events/fsverity.h
new file mode 100644
index 000000000000..1825f87a00d6
--- /dev/null
+++ b/include/trace/events/fsverity.h
@@ -0,0 +1,143 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM fsverity
+
+#if !defined(_TRACE_FSVERITY_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_FSVERITY_H
+
+#include <linux/tracepoint.h>
+
+struct fsverity_descriptor;
+struct merkle_tree_params;
+struct fsverity_info;
+
+TRACE_EVENT(fsverity_enable,
+ TP_PROTO(const struct inode *inode,
+ const struct merkle_tree_params *params),
+ TP_ARGS(inode, params),
+ TP_STRUCT__entry(
+ __field(ino_t, ino)
+ __field(u64, data_size)
+ __field(unsigned int, block_size)
+ __field(unsigned int, num_levels)
+ __field(u64, tree_size)
+ ),
+ TP_fast_assign(
+ __entry->ino = inode->i_ino;
+ __entry->data_size = i_size_read(inode);
+ __entry->block_size = params->block_size;
+ __entry->num_levels = params->num_levels;
+ __entry->tree_size = params->tree_size;
+ ),
+ TP_printk("ino %lu data size %llu tree size %llu block size %u levels %u",
+ (unsigned long) __entry->ino,
+ __entry->data_size,
+ __entry->tree_size,
+ __entry->block_size,
+ __entry->num_levels)
+);
+
+TRACE_EVENT(fsverity_tree_done,
+ TP_PROTO(const struct inode *inode, const struct fsverity_info *vi,
+ const struct merkle_tree_params *params),
+ TP_ARGS(inode, vi, params),
+ TP_STRUCT__entry(
+ __field(ino_t, ino)
+ __field(unsigned int, levels)
+ __field(unsigned int, block_size)
+ __field(u64, tree_size)
+ __dynamic_array(u8, root_hash, params->digest_size)
+ __dynamic_array(u8, file_digest, params->digest_size)
+ ),
+ TP_fast_assign(
+ __entry->ino = inode->i_ino;
+ __entry->levels = params->num_levels;
+ __entry->block_size = params->block_size;
+ __entry->tree_size = params->tree_size;
+ memcpy(__get_dynamic_array(root_hash), vi->root_hash, __get_dynamic_array_len(root_hash));
+ memcpy(__get_dynamic_array(file_digest), vi->file_digest, __get_dynamic_array_len(file_digest));
+ ),
+ TP_printk("ino %lu levels %d block_size %d tree_size %lld root_hash %s digest %s",
+ (unsigned long) __entry->ino,
+ __entry->levels,
+ __entry->block_size,
+ __entry->tree_size,
+ __print_hex_str(__get_dynamic_array(root_hash), __get_dynamic_array_len(root_hash)),
+ __print_hex_str(__get_dynamic_array(file_digest), __get_dynamic_array_len(file_digest)))
+);
+
+TRACE_EVENT(fsverity_verify_data_block,
+ TP_PROTO(const struct inode *inode,
+ const struct merkle_tree_params *params,
+ u64 data_pos),
+ TP_ARGS(inode, params, data_pos),
+ TP_STRUCT__entry(
+ __field(ino_t, ino)
+ __field(u64, data_pos)
+ __field(unsigned int, block_size)
+ ),
+ TP_fast_assign(
+ __entry->ino = inode->i_ino;
+ __entry->data_pos = data_pos;
+ __entry->block_size = params->block_size;
+ ),
+ TP_printk("ino %lu pos %lld merkle_blocksize %u",
+ (unsigned long) __entry->ino,
+ __entry->data_pos,
+ __entry->block_size)
+);
+
+TRACE_EVENT(fsverity_merkle_hit,
+ TP_PROTO(const struct inode *inode, u64 data_pos,
+ unsigned long hblock_idx, unsigned int level,
+ unsigned int hidx),
+ TP_ARGS(inode, data_pos, hblock_idx, level, hidx),
+ TP_STRUCT__entry(
+ __field(ino_t, ino)
+ __field(u64, data_pos)
+ __field(unsigned long, hblock_idx)
+ __field(unsigned int, level)
+ __field(unsigned int, hidx)
+ ),
+ TP_fast_assign(
+ __entry->ino = inode->i_ino;
+ __entry->data_pos = data_pos;
+ __entry->hblock_idx = hblock_idx;
+ __entry->level = level;
+ __entry->hidx = hidx;
+ ),
+ TP_printk("ino %lu data_pos %llu hblock_idx %lu level %u hidx %u",
+ (unsigned long) __entry->ino,
+ __entry->data_pos,
+ __entry->hblock_idx,
+ __entry->level,
+ __entry->hidx)
+);
+
+TRACE_EVENT(fsverity_verify_merkle_block,
+ TP_PROTO(const struct inode *inode, unsigned long index,
+ unsigned int level, unsigned int hidx),
+ TP_ARGS(inode, index, level, hidx),
+ TP_STRUCT__entry(
+ __field(ino_t, ino)
+ __field(unsigned long, index)
+ __field(unsigned int, level)
+ __field(unsigned int, hidx)
+ ),
+ TP_fast_assign(
+ __entry->ino = inode->i_ino;
+ __entry->index = index;
+ __entry->level = level;
+ __entry->hidx = hidx;
+ ),
+ TP_printk("ino %lu hblock_idx %lu level %u hidx %u",
+ (unsigned long) __entry->ino,
+ __entry->index,
+ __entry->level,
+ __entry->hidx)
+);
+
+#endif /* _TRACE_FSVERITY_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
--
2.52.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v2 1/2] fs: add FS_XFLAG_VERITY for fs-verity files
2026-01-19 16:56 ` [PATCH v2 1/2] fs: add FS_XFLAG_VERITY for fs-verity files Andrey Albershteyn
@ 2026-01-20 15:51 ` Darrick J. Wong
2026-01-21 0:33 ` Eric Biggers
1 sibling, 0 replies; 11+ messages in thread
From: Darrick J. Wong @ 2026-01-20 15:51 UTC (permalink / raw)
To: Andrey Albershteyn; +Cc: linux-xfs, fstests, ebiggers
On Mon, Jan 19, 2026 at 05:56:42PM +0100, Andrey Albershteyn wrote:
> fs-verity introduced inode flag for inodes with enabled fs-verity on
> them. This patch adds FS_XFLAG_VERITY file attribute which can be
> retrieved with FS_IOC_FSGETXATTR ioctl() and file_getattr() syscall.
>
> This flag is read-only and can not be set with corresponding set ioctl()
> and file_setattr(). The FS_IOC_SETFLAGS requires file to be opened for
> writing which is not allowed for verity files. The FS_IOC_FSSETXATTR and
> file_setattr() clears this flag from the user input.
>
> As this is now common flag for both flag interfaces (flags/xflags) add
> it to overlapping flags list to exclude it from overwrite.
>
> Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
Technically this uapi change should be cc'd to linux-api, but adding
a flag definition is fairly minor so:
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
> ---
> Documentation/filesystems/fsverity.rst | 16 ++++++++++++++++
> fs/file_attr.c | 4 ++++
> include/linux/fileattr.h | 6 +++---
> include/uapi/linux/fs.h | 1 +
> 4 files changed, 24 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/filesystems/fsverity.rst b/Documentation/filesystems/fsverity.rst
> index 412cf11e3298..22b49b295d1f 100644
> --- a/Documentation/filesystems/fsverity.rst
> +++ b/Documentation/filesystems/fsverity.rst
> @@ -341,6 +341,22 @@ the file has fs-verity enabled. This can perform better than
> FS_IOC_GETFLAGS and FS_IOC_MEASURE_VERITY because it doesn't require
> opening the file, and opening verity files can be expensive.
>
> +FS_IOC_FSGETXATTR
> +-----------------
> +
> +Since Linux v7.0, the FS_IOC_FSGETXATTR ioctl sets FS_XFLAG_VERITY (0x00020000)
> +in the returned flags when the file has verity enabled. Note that this attribute
> +cannot be set with FS_IOC_FSSETXATTR as enabling verity requires input
> +parameters. See FS_IOC_ENABLE_VERITY.
> +
> +file_getattr
> +------------
> +
> +Since Linux v7.0, the file_getattr() syscall sets FS_XFLAG_VERITY (0x00020000)
> +in the returned flags when the file has verity enabled. Note that this attribute
> +cannot be set with file_setattr() as enabling verity requires input parameters.
> +See FS_IOC_ENABLE_VERITY.
> +
> .. _accessing_verity_files:
>
> Accessing verity files
> diff --git a/fs/file_attr.c b/fs/file_attr.c
> index 13cdb31a3e94..f44c873af92b 100644
> --- a/fs/file_attr.c
> +++ b/fs/file_attr.c
> @@ -37,6 +37,8 @@ void fileattr_fill_xflags(struct file_kattr *fa, u32 xflags)
> fa->flags |= FS_DAX_FL;
> if (fa->fsx_xflags & FS_XFLAG_PROJINHERIT)
> fa->flags |= FS_PROJINHERIT_FL;
> + if (fa->fsx_xflags & FS_XFLAG_VERITY)
> + fa->flags |= FS_VERITY_FL;
> }
> EXPORT_SYMBOL(fileattr_fill_xflags);
>
> @@ -67,6 +69,8 @@ void fileattr_fill_flags(struct file_kattr *fa, u32 flags)
> fa->fsx_xflags |= FS_XFLAG_DAX;
> if (fa->flags & FS_PROJINHERIT_FL)
> fa->fsx_xflags |= FS_XFLAG_PROJINHERIT;
> + if (fa->flags & FS_VERITY_FL)
> + fa->fsx_xflags |= FS_XFLAG_VERITY;
> }
> EXPORT_SYMBOL(fileattr_fill_flags);
>
> diff --git a/include/linux/fileattr.h b/include/linux/fileattr.h
> index f89dcfad3f8f..3780904a63a6 100644
> --- a/include/linux/fileattr.h
> +++ b/include/linux/fileattr.h
> @@ -7,16 +7,16 @@
> #define FS_COMMON_FL \
> (FS_SYNC_FL | FS_IMMUTABLE_FL | FS_APPEND_FL | \
> FS_NODUMP_FL | FS_NOATIME_FL | FS_DAX_FL | \
> - FS_PROJINHERIT_FL)
> + FS_PROJINHERIT_FL | FS_VERITY_FL)
>
> #define FS_XFLAG_COMMON \
> (FS_XFLAG_SYNC | FS_XFLAG_IMMUTABLE | FS_XFLAG_APPEND | \
> FS_XFLAG_NODUMP | FS_XFLAG_NOATIME | FS_XFLAG_DAX | \
> - FS_XFLAG_PROJINHERIT)
> + FS_XFLAG_PROJINHERIT | FS_XFLAG_VERITY)
>
> /* Read-only inode flags */
> #define FS_XFLAG_RDONLY_MASK \
> - (FS_XFLAG_PREALLOC | FS_XFLAG_HASATTR)
> + (FS_XFLAG_PREALLOC | FS_XFLAG_HASATTR | FS_XFLAG_VERITY)
>
> /* Flags to indicate valid value of fsx_ fields */
> #define FS_XFLAG_VALUES_MASK \
> diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h
> index 66ca526cf786..70b2b661f42c 100644
> --- a/include/uapi/linux/fs.h
> +++ b/include/uapi/linux/fs.h
> @@ -253,6 +253,7 @@ struct file_attr {
> #define FS_XFLAG_FILESTREAM 0x00004000 /* use filestream allocator */
> #define FS_XFLAG_DAX 0x00008000 /* use DAX for IO */
> #define FS_XFLAG_COWEXTSIZE 0x00010000 /* CoW extent size allocator hint */
> +#define FS_XFLAG_VERITY 0x00020000 /* fs-verity enabled */
> #define FS_XFLAG_HASATTR 0x80000000 /* no DIFLAG for this */
>
> /* the read-only stuff doesn't really belong here, but any other place is
> --
> 2.52.0
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 1/2] fs: add FS_XFLAG_VERITY for fs-verity files
2026-01-19 16:56 ` [PATCH v2 1/2] fs: add FS_XFLAG_VERITY for fs-verity files Andrey Albershteyn
2026-01-20 15:51 ` Darrick J. Wong
@ 2026-01-21 0:33 ` Eric Biggers
2026-01-21 14:23 ` Andrey Albershteyn
1 sibling, 1 reply; 11+ messages in thread
From: Eric Biggers @ 2026-01-21 0:33 UTC (permalink / raw)
To: Andrey Albershteyn; +Cc: linux-xfs, fstests, djwong
On Mon, Jan 19, 2026 at 05:56:42PM +0100, Andrey Albershteyn wrote:
> /* Read-only inode flags */
> #define FS_XFLAG_RDONLY_MASK \
> - (FS_XFLAG_PREALLOC | FS_XFLAG_HASATTR)
> + (FS_XFLAG_PREALLOC | FS_XFLAG_HASATTR | FS_XFLAG_VERITY)
This is the first flag that's both a common flag and a read-only flag.
Looking at how FS_XFLAG_RDONLY_MASK gets used in
copy_fsxattr_from_user():
fileattr_fill_xflags(fa, xfa.fsx_xflags);
fa->fsx_xflags &= ~FS_XFLAG_RDONLY_MASK;
So it translates the xflags into fsflags, then clears the read-only
xflags *but not the read-only fsflags*.
If the user passed FS_XFLAG_VERITY, the result will be that
FS_XFLAG_VERITY will *not* be set in xflags, but FS_VERITY_FL will be
set in fsflags.
Is that working as intended? It seems inconsistent.
- Eric
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 2/2] fsverity: add tracepoints
2026-01-19 16:56 ` [PATCH v2 2/2] fsverity: add tracepoints Andrey Albershteyn
@ 2026-01-21 0:39 ` Eric Biggers
2026-01-24 18:49 ` Eric Biggers
0 siblings, 1 reply; 11+ messages in thread
From: Eric Biggers @ 2026-01-21 0:39 UTC (permalink / raw)
To: Andrey Albershteyn; +Cc: linux-xfs, fstests, djwong
On Mon, Jan 19, 2026 at 05:56:43PM +0100, Andrey Albershteyn wrote:
[...]
> + TP_printk("ino %lu data size %llu tree size %llu block size %u levels %u",
[...]
> + TP_printk("ino %lu levels %d block_size %d tree_size %lld root_hash %s digest %s",
Would be nice to make these consistent. 3 of the parameters are the
same, but the naming and order differs slightly.
[...]
> + TP_printk("ino %lu pos %lld merkle_blocksize %u",
> + (unsigned long) __entry->ino,
> + __entry->data_pos,
> + __entry->block_size)
Likewise here. So now we have "block size", "block_size", and
"merkle_blocksize", all for the same thing.
> + TP_printk("ino %lu data_pos %llu hblock_idx %lu level %u hidx %u",
> + (unsigned long) __entry->ino,
And here's data_pos as a %llu, whereas in the previous tracepoint it's
just pos as an %lld.
> +TRACE_EVENT(fsverity_verify_merkle_block,
> + TP_PROTO(const struct inode *inode, unsigned long index,
> + unsigned int level, unsigned int hidx),
And the 'index' here is what the previous one calls 'hblock_idx'.
I think consistent naming would be helpful for people trying to use
these tracepoints.
- Eric
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 1/2] fs: add FS_XFLAG_VERITY for fs-verity files
2026-01-21 0:33 ` Eric Biggers
@ 2026-01-21 14:23 ` Andrey Albershteyn
0 siblings, 0 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2026-01-21 14:23 UTC (permalink / raw)
To: Eric Biggers; +Cc: Andrey Albershteyn, linux-xfs, fstests, djwong
On 2026-01-20 16:33:21, Eric Biggers wrote:
> On Mon, Jan 19, 2026 at 05:56:42PM +0100, Andrey Albershteyn wrote:
> > /* Read-only inode flags */
> > #define FS_XFLAG_RDONLY_MASK \
> > - (FS_XFLAG_PREALLOC | FS_XFLAG_HASATTR)
> > + (FS_XFLAG_PREALLOC | FS_XFLAG_HASATTR | FS_XFLAG_VERITY)
>
> This is the first flag that's both a common flag and a read-only flag.
>
> Looking at how FS_XFLAG_RDONLY_MASK gets used in
> copy_fsxattr_from_user():
>
> fileattr_fill_xflags(fa, xfa.fsx_xflags);
> fa->fsx_xflags &= ~FS_XFLAG_RDONLY_MASK;
>
> So it translates the xflags into fsflags, then clears the read-only
> xflags *but not the read-only fsflags*.
>
> If the user passed FS_XFLAG_VERITY, the result will be that
> FS_XFLAG_VERITY will *not* be set in xflags, but FS_VERITY_FL will be
> set in fsflags.
>
> Is that working as intended? It seems inconsistent.
Yeah, this seems wrong, thanks! I will send a patch
--
- Andrey
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 2/2] fsverity: add tracepoints
2026-01-21 0:39 ` Eric Biggers
@ 2026-01-24 18:49 ` Eric Biggers
2026-01-26 11:38 ` Andrey Albershteyn
2026-01-29 15:02 ` Christian Brauner
0 siblings, 2 replies; 11+ messages in thread
From: Eric Biggers @ 2026-01-24 18:49 UTC (permalink / raw)
To: Andrey Albershteyn, Christian Brauner
Cc: linux-xfs, fstests, djwong, fsverity
[+Cc fsverity@lists.linux.dev]
On Tue, Jan 20, 2026 at 04:39:17PM -0800, Eric Biggers wrote:
> On Mon, Jan 19, 2026 at 05:56:43PM +0100, Andrey Albershteyn wrote:
> [...]
> > + TP_printk("ino %lu data size %llu tree size %llu block size %u levels %u",
> [...]
> > + TP_printk("ino %lu levels %d block_size %d tree_size %lld root_hash %s digest %s",
>
> Would be nice to make these consistent. 3 of the parameters are the
> same, but the naming and order differs slightly.
>
> [...]
> > + TP_printk("ino %lu pos %lld merkle_blocksize %u",
> > + (unsigned long) __entry->ino,
> > + __entry->data_pos,
> > + __entry->block_size)
>
> Likewise here. So now we have "block size", "block_size", and
> "merkle_blocksize", all for the same thing.
>
> > + TP_printk("ino %lu data_pos %llu hblock_idx %lu level %u hidx %u",
> > + (unsigned long) __entry->ino,
>
> And here's data_pos as a %llu, whereas in the previous tracepoint it's
> just pos as an %lld.
>
> > +TRACE_EVENT(fsverity_verify_merkle_block,
> > + TP_PROTO(const struct inode *inode, unsigned long index,
> > + unsigned int level, unsigned int hidx),
>
> And the 'index' here is what the previous one calls 'hblock_idx'.
>
> I think consistent naming would be helpful for people trying to use
> these tracepoints.
Andrey, let me know if you're planning to send a new version with the
naming cleaned up, or if I should do it in a follow-up patch instead.
Christian, can you let me know if it's okay if I take this series
through the fsverity tree, or do you want it to go through the VFS tree?
Thanks,
- Eric
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 2/2] fsverity: add tracepoints
2026-01-24 18:49 ` Eric Biggers
@ 2026-01-26 11:38 ` Andrey Albershteyn
2026-01-29 15:02 ` Christian Brauner
1 sibling, 0 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2026-01-26 11:38 UTC (permalink / raw)
To: Eric Biggers
Cc: Andrey Albershteyn, Christian Brauner, linux-xfs, fstests, djwong,
fsverity
On 2026-01-24 10:49:54, Eric Biggers wrote:
> [+Cc fsverity@lists.linux.dev]
ops, wrong autocomplete, thanks!
>
> On Tue, Jan 20, 2026 at 04:39:17PM -0800, Eric Biggers wrote:
> > On Mon, Jan 19, 2026 at 05:56:43PM +0100, Andrey Albershteyn wrote:
> > [...]
> > > + TP_printk("ino %lu data size %llu tree size %llu block size %u levels %u",
> > [...]
> > > + TP_printk("ino %lu levels %d block_size %d tree_size %lld root_hash %s digest %s",
> >
> > Would be nice to make these consistent. 3 of the parameters are the
> > same, but the naming and order differs slightly.
> >
> > [...]
> > > + TP_printk("ino %lu pos %lld merkle_blocksize %u",
> > > + (unsigned long) __entry->ino,
> > > + __entry->data_pos,
> > > + __entry->block_size)
> >
> > Likewise here. So now we have "block size", "block_size", and
> > "merkle_blocksize", all for the same thing.
> >
> > > + TP_printk("ino %lu data_pos %llu hblock_idx %lu level %u hidx %u",
> > > + (unsigned long) __entry->ino,
> >
> > And here's data_pos as a %llu, whereas in the previous tracepoint it's
> > just pos as an %lld.
> >
> > > +TRACE_EVENT(fsverity_verify_merkle_block,
> > > + TP_PROTO(const struct inode *inode, unsigned long index,
> > > + unsigned int level, unsigned int hidx),
> >
> > And the 'index' here is what the previous one calls 'hblock_idx'.
> >
> > I think consistent naming would be helpful for people trying to use
> > these tracepoints.
>
> Andrey, let me know if you're planning to send a new version with the
> naming cleaned up, or if I should do it in a follow-up patch instead.
I will send v2 with renames
--
- Andrey
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 2/2] fsverity: add tracepoints
2026-01-24 18:49 ` Eric Biggers
2026-01-26 11:38 ` Andrey Albershteyn
@ 2026-01-29 15:02 ` Christian Brauner
1 sibling, 0 replies; 11+ messages in thread
From: Christian Brauner @ 2026-01-29 15:02 UTC (permalink / raw)
To: Eric Biggers; +Cc: Andrey Albershteyn, linux-xfs, fstests, djwong, fsverity
On Sat, Jan 24, 2026 at 10:49:54AM -0800, Eric Biggers wrote:
> [+Cc fsverity@lists.linux.dev]
>
> On Tue, Jan 20, 2026 at 04:39:17PM -0800, Eric Biggers wrote:
> > On Mon, Jan 19, 2026 at 05:56:43PM +0100, Andrey Albershteyn wrote:
> > [...]
> > > + TP_printk("ino %lu data size %llu tree size %llu block size %u levels %u",
> > [...]
> > > + TP_printk("ino %lu levels %d block_size %d tree_size %lld root_hash %s digest %s",
> >
> > Would be nice to make these consistent. 3 of the parameters are the
> > same, but the naming and order differs slightly.
> >
> > [...]
> > > + TP_printk("ino %lu pos %lld merkle_blocksize %u",
> > > + (unsigned long) __entry->ino,
> > > + __entry->data_pos,
> > > + __entry->block_size)
> >
> > Likewise here. So now we have "block size", "block_size", and
> > "merkle_blocksize", all for the same thing.
> >
> > > + TP_printk("ino %lu data_pos %llu hblock_idx %lu level %u hidx %u",
> > > + (unsigned long) __entry->ino,
> >
> > And here's data_pos as a %llu, whereas in the previous tracepoint it's
> > just pos as an %lld.
> >
> > > +TRACE_EVENT(fsverity_verify_merkle_block,
> > > + TP_PROTO(const struct inode *inode, unsigned long index,
> > > + unsigned int level, unsigned int hidx),
> >
> > And the 'index' here is what the previous one calls 'hblock_idx'.
> >
> > I think consistent naming would be helpful for people trying to use
> > these tracepoints.
>
> Andrey, let me know if you're planning to send a new version with the
> naming cleaned up, or if I should do it in a follow-up patch instead.
>
> Christian, can you let me know if it's okay if I take this series
> through the fsverity tree, or do you want it to go through the VFS tree?
Yeah, I can take them no biggie.
Tracepoints, heh, who would've thought.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2026-01-29 15:02 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-19 16:56 [PATCH v2 0/2] Add traces and file attributes for fs-verity Andrey Albershteyn
2026-01-19 16:56 ` [PATCH v2 1/2] fs: add FS_XFLAG_VERITY for fs-verity files Andrey Albershteyn
2026-01-20 15:51 ` Darrick J. Wong
2026-01-21 0:33 ` Eric Biggers
2026-01-21 14:23 ` Andrey Albershteyn
2026-01-19 16:56 ` [PATCH v2 2/2] fsverity: add tracepoints Andrey Albershteyn
2026-01-21 0:39 ` Eric Biggers
2026-01-24 18:49 ` Eric Biggers
2026-01-26 11:38 ` Andrey Albershteyn
2026-01-29 15:02 ` Christian Brauner
-- strict thread matches above, loose matches on Subject: below --
2026-01-19 16:32 [PATCH v2 0/2] Add traces and file attributes for fs-verity Andrey Albershteyn
2026-01-19 16:32 ` [PATCH v2 2/2] fsverity: add tracepoints Andrey Albershteyn
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.