4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or https://opensource.org/licenses/CDDL-1.0.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
23 #if defined(HAVE_DECLARE_EVENT_CLASS)
26 #define TRACE_SYSTEM zfs
28 #undef TRACE_SYSTEM_VAR
29 #define TRACE_SYSTEM_VAR zfs_acl
31 #if !defined(_TRACE_ACL_H) || defined(TRACE_HEADER_MULTI_READ)
34 #include <linux/tracepoint.h>
35 #include <linux/vfs_compat.h>
36 #include <sys/types.h>
39 * Generic support for three argument tracepoints of the form:
43 * zfs_ace_hdr_t *, ...,
47 DECLARE_EVENT_CLASS(zfs_ace_class
,
48 TP_PROTO(znode_t
*zn
, zfs_ace_hdr_t
*ace
, uint32_t mask_matched
),
49 TP_ARGS(zn
, ace
, mask_matched
),
51 __field(uint64_t, z_id
)
52 __field(uint8_t, z_unlinked
)
53 __field(uint8_t, z_atime_dirty
)
54 __field(uint8_t, z_zn_prefetch
)
55 __field(uint_t
, z_blksz
)
56 __field(uint_t
, z_seq
)
57 __field(uint64_t, z_mapcnt
)
58 __field(uint64_t, z_size
)
59 __field(uint64_t, z_pflags
)
60 __field(uint32_t, z_sync_cnt
)
61 __field(uint32_t, z_sync_writes_cnt
)
62 __field(uint32_t, z_async_writes_cnt
)
63 __field(mode_t
, z_mode
)
64 __field(boolean_t
, z_is_sa
)
65 __field(boolean_t
, z_is_ctldir
)
67 __field(uint32_t, i_uid
)
68 __field(uint32_t, i_gid
)
69 __field(unsigned long, i_ino
)
70 __field(unsigned int, i_nlink
)
71 __field(loff_t
, i_size
)
72 __field(unsigned int, i_blkbits
)
73 __field(unsigned short, i_bytes
)
74 __field(umode_t
, i_mode
)
75 __field(__u32
, i_generation
)
77 __field(uint16_t, z_type
)
78 __field(uint16_t, z_flags
)
79 __field(uint32_t, z_access_mask
)
81 __field(uint32_t, mask_matched
)
84 __entry
->z_id
= zn
->z_id
;
85 __entry
->z_unlinked
= zn
->z_unlinked
;
86 __entry
->z_atime_dirty
= zn
->z_atime_dirty
;
87 __entry
->z_zn_prefetch
= zn
->z_zn_prefetch
;
88 __entry
->z_blksz
= zn
->z_blksz
;
89 __entry
->z_seq
= zn
->z_seq
;
90 __entry
->z_mapcnt
= zn
->z_mapcnt
;
91 __entry
->z_size
= zn
->z_size
;
92 __entry
->z_pflags
= zn
->z_pflags
;
93 __entry
->z_sync_cnt
= zn
->z_sync_cnt
;
94 __entry
->z_sync_writes_cnt
= zn
->z_sync_writes_cnt
;
95 __entry
->z_async_writes_cnt
= zn
->z_async_writes_cnt
;
96 __entry
->z_mode
= zn
->z_mode
;
97 __entry
->z_is_sa
= zn
->z_is_sa
;
98 __entry
->z_is_ctldir
= zn
->z_is_ctldir
;
100 __entry
->i_uid
= KUID_TO_SUID(ZTOI(zn
)->i_uid
);
101 __entry
->i_gid
= KGID_TO_SGID(ZTOI(zn
)->i_gid
);
102 __entry
->i_ino
= zn
->z_inode
.i_ino
;
103 __entry
->i_nlink
= zn
->z_inode
.i_nlink
;
104 __entry
->i_size
= zn
->z_inode
.i_size
;
105 __entry
->i_blkbits
= zn
->z_inode
.i_blkbits
;
106 __entry
->i_bytes
= zn
->z_inode
.i_bytes
;
107 __entry
->i_mode
= zn
->z_inode
.i_mode
;
108 __entry
->i_generation
= zn
->z_inode
.i_generation
;
110 __entry
->z_type
= ace
->z_type
;
111 __entry
->z_flags
= ace
->z_flags
;
112 __entry
->z_access_mask
= ace
->z_access_mask
;
114 __entry
->mask_matched
= mask_matched
;
116 TP_printk("zn { id %llu unlinked %u atime_dirty %u "
117 "zn_prefetch %u blksz %u seq %u "
118 "mapcnt %llu size %llu pflags %llu "
119 "sync_cnt %u sync_writes_cnt %u async_writes_cnt %u "
120 "mode 0x%x is_sa %d is_ctldir %d "
121 "inode { uid %u gid %u ino %lu nlink %u size %lli "
122 "blkbits %u bytes %u mode 0x%x generation %x } } "
123 "ace { type %u flags %u access_mask %u } mask_matched %u",
124 __entry
->z_id
, __entry
->z_unlinked
, __entry
->z_atime_dirty
,
125 __entry
->z_zn_prefetch
, __entry
->z_blksz
,
126 __entry
->z_seq
, __entry
->z_mapcnt
, __entry
->z_size
,
127 __entry
->z_pflags
, __entry
->z_sync_cnt
,
128 __entry
->z_sync_writes_cnt
, __entry
->z_async_writes_cnt
,
129 __entry
->z_mode
, __entry
->z_is_sa
, __entry
->z_is_ctldir
,
130 __entry
->i_uid
, __entry
->i_gid
, __entry
->i_ino
, __entry
->i_nlink
,
131 __entry
->i_size
, __entry
->i_blkbits
,
132 __entry
->i_bytes
, __entry
->i_mode
, __entry
->i_generation
,
133 __entry
->z_type
, __entry
->z_flags
, __entry
->z_access_mask
,
134 __entry
->mask_matched
)
138 #define DEFINE_ACE_EVENT(name) \
139 DEFINE_EVENT(zfs_ace_class, name, \
140 TP_PROTO(znode_t *zn, zfs_ace_hdr_t *ace, uint32_t mask_matched), \
141 TP_ARGS(zn, ace, mask_matched))
142 DEFINE_ACE_EVENT(zfs_zfs__ace__denies
);
143 DEFINE_ACE_EVENT(zfs_zfs__ace__allows
);
145 #endif /* _TRACE_ACL_H */
147 #undef TRACE_INCLUDE_PATH
148 #undef TRACE_INCLUDE_FILE
149 #define TRACE_INCLUDE_PATH sys
150 #define TRACE_INCLUDE_FILE trace_acl
151 #include <trace/define_trace.h>
155 DEFINE_DTRACE_PROBE3(zfs__ace__denies
);
156 DEFINE_DTRACE_PROBE3(zfs__ace__allows
);
157 DEFINE_DTRACE_PROBE(zfs__fastpath__execute__access__miss
);
159 #endif /* HAVE_DECLARE_EVENT_CLASS */