.. | .. |
---|
68 | 68 | __field(struct file_lock *, fl) |
---|
69 | 69 | __field(unsigned long, i_ino) |
---|
70 | 70 | __field(dev_t, s_dev) |
---|
71 | | - __field(struct file_lock *, fl_next) |
---|
| 71 | + __field(struct file_lock *, fl_blocker) |
---|
72 | 72 | __field(fl_owner_t, fl_owner) |
---|
73 | 73 | __field(unsigned int, fl_pid) |
---|
74 | 74 | __field(unsigned int, fl_flags) |
---|
.. | .. |
---|
82 | 82 | __entry->fl = fl ? fl : NULL; |
---|
83 | 83 | __entry->s_dev = inode->i_sb->s_dev; |
---|
84 | 84 | __entry->i_ino = inode->i_ino; |
---|
85 | | - __entry->fl_next = fl ? fl->fl_next : NULL; |
---|
| 85 | + __entry->fl_blocker = fl ? fl->fl_blocker : NULL; |
---|
86 | 86 | __entry->fl_owner = fl ? fl->fl_owner : NULL; |
---|
87 | 87 | __entry->fl_pid = fl ? fl->fl_pid : 0; |
---|
88 | 88 | __entry->fl_flags = fl ? fl->fl_flags : 0; |
---|
.. | .. |
---|
92 | 92 | __entry->ret = ret; |
---|
93 | 93 | ), |
---|
94 | 94 | |
---|
95 | | - TP_printk("fl=0x%p dev=0x%x:0x%x ino=0x%lx fl_next=0x%p fl_owner=0x%p fl_pid=%u fl_flags=%s fl_type=%s fl_start=%lld fl_end=%lld ret=%d", |
---|
| 95 | + TP_printk("fl=%p dev=0x%x:0x%x ino=0x%lx fl_blocker=%p fl_owner=%p fl_pid=%u fl_flags=%s fl_type=%s fl_start=%lld fl_end=%lld ret=%d", |
---|
96 | 96 | __entry->fl, MAJOR(__entry->s_dev), MINOR(__entry->s_dev), |
---|
97 | | - __entry->i_ino, __entry->fl_next, __entry->fl_owner, |
---|
| 97 | + __entry->i_ino, __entry->fl_blocker, __entry->fl_owner, |
---|
98 | 98 | __entry->fl_pid, show_fl_flags(__entry->fl_flags), |
---|
99 | 99 | show_fl_type(__entry->fl_type), |
---|
100 | 100 | __entry->fl_start, __entry->fl_end, __entry->ret) |
---|
.. | .. |
---|
125 | 125 | __field(struct file_lock *, fl) |
---|
126 | 126 | __field(unsigned long, i_ino) |
---|
127 | 127 | __field(dev_t, s_dev) |
---|
128 | | - __field(struct file_lock *, fl_next) |
---|
| 128 | + __field(struct file_lock *, fl_blocker) |
---|
129 | 129 | __field(fl_owner_t, fl_owner) |
---|
130 | 130 | __field(unsigned int, fl_flags) |
---|
131 | 131 | __field(unsigned char, fl_type) |
---|
.. | .. |
---|
137 | 137 | __entry->fl = fl ? fl : NULL; |
---|
138 | 138 | __entry->s_dev = inode->i_sb->s_dev; |
---|
139 | 139 | __entry->i_ino = inode->i_ino; |
---|
140 | | - __entry->fl_next = fl ? fl->fl_next : NULL; |
---|
| 140 | + __entry->fl_blocker = fl ? fl->fl_blocker : NULL; |
---|
141 | 141 | __entry->fl_owner = fl ? fl->fl_owner : NULL; |
---|
142 | 142 | __entry->fl_flags = fl ? fl->fl_flags : 0; |
---|
143 | 143 | __entry->fl_type = fl ? fl->fl_type : 0; |
---|
.. | .. |
---|
145 | 145 | __entry->fl_downgrade_time = fl ? fl->fl_downgrade_time : 0; |
---|
146 | 146 | ), |
---|
147 | 147 | |
---|
148 | | - TP_printk("fl=0x%p dev=0x%x:0x%x ino=0x%lx fl_next=0x%p fl_owner=0x%p fl_flags=%s fl_type=%s fl_break_time=%lu fl_downgrade_time=%lu", |
---|
| 148 | + TP_printk("fl=%p dev=0x%x:0x%x ino=0x%lx fl_blocker=%p fl_owner=%p fl_flags=%s fl_type=%s fl_break_time=%lu fl_downgrade_time=%lu", |
---|
149 | 149 | __entry->fl, MAJOR(__entry->s_dev), MINOR(__entry->s_dev), |
---|
150 | | - __entry->i_ino, __entry->fl_next, __entry->fl_owner, |
---|
| 150 | + __entry->i_ino, __entry->fl_blocker, __entry->fl_owner, |
---|
151 | 151 | show_fl_flags(__entry->fl_flags), |
---|
152 | 152 | show_fl_type(__entry->fl_type), |
---|
153 | 153 | __entry->fl_break_time, __entry->fl_downgrade_time) |
---|
.. | .. |
---|
176 | 176 | TP_STRUCT__entry( |
---|
177 | 177 | __field(unsigned long, i_ino) |
---|
178 | 178 | __field(int, wcount) |
---|
179 | | - __field(int, dcount) |
---|
| 179 | + __field(int, rcount) |
---|
180 | 180 | __field(int, icount) |
---|
181 | 181 | __field(dev_t, s_dev) |
---|
182 | 182 | __field(fl_owner_t, fl_owner) |
---|
.. | .. |
---|
188 | 188 | __entry->s_dev = inode->i_sb->s_dev; |
---|
189 | 189 | __entry->i_ino = inode->i_ino; |
---|
190 | 190 | __entry->wcount = atomic_read(&inode->i_writecount); |
---|
191 | | - __entry->dcount = d_count(fl->fl_file->f_path.dentry); |
---|
| 191 | + __entry->rcount = atomic_read(&inode->i_readcount); |
---|
192 | 192 | __entry->icount = atomic_read(&inode->i_count); |
---|
193 | | - __entry->fl_owner = fl ? fl->fl_owner : NULL; |
---|
194 | | - __entry->fl_flags = fl ? fl->fl_flags : 0; |
---|
195 | | - __entry->fl_type = fl ? fl->fl_type : 0; |
---|
| 193 | + __entry->fl_owner = fl->fl_owner; |
---|
| 194 | + __entry->fl_flags = fl->fl_flags; |
---|
| 195 | + __entry->fl_type = fl->fl_type; |
---|
196 | 196 | ), |
---|
197 | 197 | |
---|
198 | | - TP_printk("dev=0x%x:0x%x ino=0x%lx wcount=%d dcount=%d icount=%d fl_owner=0x%p fl_flags=%s fl_type=%s", |
---|
| 198 | + TP_printk("dev=0x%x:0x%x ino=0x%lx wcount=%d rcount=%d icount=%d fl_owner=%p fl_flags=%s fl_type=%s", |
---|
199 | 199 | MAJOR(__entry->s_dev), MINOR(__entry->s_dev), |
---|
200 | | - __entry->i_ino, __entry->wcount, __entry->dcount, |
---|
| 200 | + __entry->i_ino, __entry->wcount, __entry->rcount, |
---|
201 | 201 | __entry->icount, __entry->fl_owner, |
---|
202 | 202 | show_fl_flags(__entry->fl_flags), |
---|
203 | 203 | show_fl_type(__entry->fl_type)) |
---|
204 | 204 | ); |
---|
205 | 205 | |
---|
| 206 | +TRACE_EVENT(leases_conflict, |
---|
| 207 | + TP_PROTO(bool conflict, struct file_lock *lease, struct file_lock *breaker), |
---|
| 208 | + |
---|
| 209 | + TP_ARGS(conflict, lease, breaker), |
---|
| 210 | + |
---|
| 211 | + TP_STRUCT__entry( |
---|
| 212 | + __field(void *, lease) |
---|
| 213 | + __field(void *, breaker) |
---|
| 214 | + __field(unsigned int, l_fl_flags) |
---|
| 215 | + __field(unsigned int, b_fl_flags) |
---|
| 216 | + __field(unsigned char, l_fl_type) |
---|
| 217 | + __field(unsigned char, b_fl_type) |
---|
| 218 | + __field(bool, conflict) |
---|
| 219 | + ), |
---|
| 220 | + |
---|
| 221 | + TP_fast_assign( |
---|
| 222 | + __entry->lease = lease; |
---|
| 223 | + __entry->l_fl_flags = lease->fl_flags; |
---|
| 224 | + __entry->l_fl_type = lease->fl_type; |
---|
| 225 | + __entry->breaker = breaker; |
---|
| 226 | + __entry->b_fl_flags = breaker->fl_flags; |
---|
| 227 | + __entry->b_fl_type = breaker->fl_type; |
---|
| 228 | + __entry->conflict = conflict; |
---|
| 229 | + ), |
---|
| 230 | + |
---|
| 231 | + TP_printk("conflict %d: lease=%p fl_flags=%s fl_type=%s; breaker=%p fl_flags=%s fl_type=%s", |
---|
| 232 | + __entry->conflict, |
---|
| 233 | + __entry->lease, |
---|
| 234 | + show_fl_flags(__entry->l_fl_flags), |
---|
| 235 | + show_fl_type(__entry->l_fl_type), |
---|
| 236 | + __entry->breaker, |
---|
| 237 | + show_fl_flags(__entry->b_fl_flags), |
---|
| 238 | + show_fl_type(__entry->b_fl_type)) |
---|
| 239 | +); |
---|
| 240 | + |
---|
206 | 241 | #endif /* _TRACE_FILELOCK_H */ |
---|
207 | 242 | |
---|
208 | 243 | /* This part must be outside protection */ |
---|