| .. | .. |
|---|
| 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 */ |
|---|