1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (C) 2018, Microsoft Corporation. 4 * 5 * Author(s): Steve French <stfrench@microsoft.com> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 15 * the GNU General Public License for more details. 16 */ 17 #undef TRACE_SYSTEM 18 #define TRACE_SYSTEM cifs 19 20 #if !defined(_CIFS_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 21 #define _CIFS_TRACE_H 22 23 #include <linux/tracepoint.h> 24 25 /* For logging errors in read or write */ 26 DECLARE_EVENT_CLASS(smb3_rw_err_class, 27 TP_PROTO(unsigned int xid, 28 __u64 fid, 29 __u32 tid, 30 __u64 sesid, 31 __u64 offset, 32 __u32 len, 33 int rc), 34 TP_ARGS(xid, fid, tid, sesid, offset, len, rc), 35 TP_STRUCT__entry( 36 __field(unsigned int, xid) 37 __field(__u64, fid) 38 __field(__u32, tid) 39 __field(__u64, sesid) 40 __field(__u64, offset) 41 __field(__u32, len) 42 __field(int, rc) 43 ), 44 TP_fast_assign( 45 __entry->xid = xid; 46 __entry->fid = fid; 47 __entry->tid = tid; 48 __entry->sesid = sesid; 49 __entry->offset = offset; 50 __entry->len = len; 51 __entry->rc = rc; 52 ), 53 TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x rc=%d", 54 __entry->xid, __entry->sesid, __entry->tid, __entry->fid, 55 __entry->offset, __entry->len, __entry->rc) 56 ) 57 58 #define DEFINE_SMB3_RW_ERR_EVENT(name) \ 59 DEFINE_EVENT(smb3_rw_err_class, smb3_##name, \ 60 TP_PROTO(unsigned int xid, \ 61 __u64 fid, \ 62 __u32 tid, \ 63 __u64 sesid, \ 64 __u64 offset, \ 65 __u32 len, \ 66 int rc), \ 67 TP_ARGS(xid, fid, tid, sesid, offset, len, rc)) 68 69 DEFINE_SMB3_RW_ERR_EVENT(write_err); 70 DEFINE_SMB3_RW_ERR_EVENT(read_err); 71 72 73 /* For logging successful read or write */ 74 DECLARE_EVENT_CLASS(smb3_rw_done_class, 75 TP_PROTO(unsigned int xid, 76 __u64 fid, 77 __u32 tid, 78 __u64 sesid, 79 __u64 offset, 80 __u32 len), 81 TP_ARGS(xid, fid, tid, sesid, offset, len), 82 TP_STRUCT__entry( 83 __field(unsigned int, xid) 84 __field(__u64, fid) 85 __field(__u32, tid) 86 __field(__u64, sesid) 87 __field(__u64, offset) 88 __field(__u32, len) 89 ), 90 TP_fast_assign( 91 __entry->xid = xid; 92 __entry->fid = fid; 93 __entry->tid = tid; 94 __entry->sesid = sesid; 95 __entry->offset = offset; 96 __entry->len = len; 97 ), 98 TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x", 99 __entry->xid, __entry->sesid, __entry->tid, __entry->fid, 100 __entry->offset, __entry->len) 101 ) 102 103 #define DEFINE_SMB3_RW_DONE_EVENT(name) \ 104 DEFINE_EVENT(smb3_rw_done_class, smb3_##name, \ 105 TP_PROTO(unsigned int xid, \ 106 __u64 fid, \ 107 __u32 tid, \ 108 __u64 sesid, \ 109 __u64 offset, \ 110 __u32 len), \ 111 TP_ARGS(xid, fid, tid, sesid, offset, len)) 112 113 DEFINE_SMB3_RW_DONE_EVENT(write_done); 114 DEFINE_SMB3_RW_DONE_EVENT(read_done); 115 116 /* 117 * For handle based calls other than read and write, and get/set info 118 */ 119 DECLARE_EVENT_CLASS(smb3_fd_err_class, 120 TP_PROTO(unsigned int xid, 121 __u64 fid, 122 __u32 tid, 123 __u64 sesid, 124 int rc), 125 TP_ARGS(xid, fid, tid, sesid, rc), 126 TP_STRUCT__entry( 127 __field(unsigned int, xid) 128 __field(__u64, fid) 129 __field(__u32, tid) 130 __field(__u64, sesid) 131 __field(int, rc) 132 ), 133 TP_fast_assign( 134 __entry->xid = xid; 135 __entry->fid = fid; 136 __entry->tid = tid; 137 __entry->sesid = sesid; 138 __entry->rc = rc; 139 ), 140 TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx rc=%d", 141 __entry->xid, __entry->sesid, __entry->tid, __entry->fid, 142 __entry->rc) 143 ) 144 145 #define DEFINE_SMB3_FD_ERR_EVENT(name) \ 146 DEFINE_EVENT(smb3_fd_err_class, smb3_##name, \ 147 TP_PROTO(unsigned int xid, \ 148 __u64 fid, \ 149 __u32 tid, \ 150 __u64 sesid, \ 151 int rc), \ 152 TP_ARGS(xid, fid, tid, sesid, rc)) 153 154 DEFINE_SMB3_FD_ERR_EVENT(flush_err); 155 DEFINE_SMB3_FD_ERR_EVENT(lock_err); 156 DEFINE_SMB3_FD_ERR_EVENT(close_err); 157 158 /* 159 * For handle based query/set info calls 160 */ 161 DECLARE_EVENT_CLASS(smb3_inf_err_class, 162 TP_PROTO(unsigned int xid, 163 __u64 fid, 164 __u32 tid, 165 __u64 sesid, 166 __u8 infclass, 167 __u32 type, 168 int rc), 169 TP_ARGS(xid, fid, tid, sesid, infclass, type, rc), 170 TP_STRUCT__entry( 171 __field(unsigned int, xid) 172 __field(__u64, fid) 173 __field(__u32, tid) 174 __field(__u64, sesid) 175 __field(__u8, infclass) 176 __field(__u32, type) 177 __field(int, rc) 178 ), 179 TP_fast_assign( 180 __entry->xid = xid; 181 __entry->fid = fid; 182 __entry->tid = tid; 183 __entry->sesid = sesid; 184 __entry->infclass = infclass; 185 __entry->type = type; 186 __entry->rc = rc; 187 ), 188 TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx class=%u type=0x%x rc=%d", 189 __entry->xid, __entry->sesid, __entry->tid, __entry->fid, 190 __entry->infclass, __entry->type, __entry->rc) 191 ) 192 193 #define DEFINE_SMB3_INF_ERR_EVENT(name) \ 194 DEFINE_EVENT(smb3_inf_err_class, smb3_##name, \ 195 TP_PROTO(unsigned int xid, \ 196 __u64 fid, \ 197 __u32 tid, \ 198 __u64 sesid, \ 199 __u8 infclass, \ 200 __u32 type, \ 201 int rc), \ 202 TP_ARGS(xid, fid, tid, sesid, infclass, type, rc)) 203 204 DEFINE_SMB3_INF_ERR_EVENT(query_info_err); 205 DEFINE_SMB3_INF_ERR_EVENT(set_info_err); 206 DEFINE_SMB3_INF_ERR_EVENT(fsctl_err); 207 208 /* 209 * For logging SMB3 Status code and Command for responses which return errors 210 */ 211 DECLARE_EVENT_CLASS(smb3_cmd_err_class, 212 TP_PROTO(__u32 tid, 213 __u64 sesid, 214 __u16 cmd, 215 __u64 mid, 216 __u32 status, 217 int rc), 218 TP_ARGS(tid, sesid, cmd, mid, status, rc), 219 TP_STRUCT__entry( 220 __field(__u32, tid) 221 __field(__u64, sesid) 222 __field(__u16, cmd) 223 __field(__u64, mid) 224 __field(__u32, status) 225 __field(int, rc) 226 ), 227 TP_fast_assign( 228 __entry->tid = tid; 229 __entry->sesid = sesid; 230 __entry->cmd = cmd; 231 __entry->mid = mid; 232 __entry->status = status; 233 __entry->rc = rc; 234 ), 235 TP_printk("\tsid=0x%llx tid=0x%x cmd=%u mid=%llu status=0x%x rc=%d", 236 __entry->sesid, __entry->tid, __entry->cmd, __entry->mid, 237 __entry->status, __entry->rc) 238 ) 239 240 #define DEFINE_SMB3_CMD_ERR_EVENT(name) \ 241 DEFINE_EVENT(smb3_cmd_err_class, smb3_##name, \ 242 TP_PROTO(__u32 tid, \ 243 __u64 sesid, \ 244 __u16 cmd, \ 245 __u64 mid, \ 246 __u32 status, \ 247 int rc), \ 248 TP_ARGS(tid, sesid, cmd, mid, status, rc)) 249 250 DEFINE_SMB3_CMD_ERR_EVENT(cmd_err); 251 252 DECLARE_EVENT_CLASS(smb3_cmd_done_class, 253 TP_PROTO(__u32 tid, 254 __u64 sesid, 255 __u16 cmd, 256 __u64 mid), 257 TP_ARGS(tid, sesid, cmd, mid), 258 TP_STRUCT__entry( 259 __field(__u32, tid) 260 __field(__u64, sesid) 261 __field(__u16, cmd) 262 __field(__u64, mid) 263 ), 264 TP_fast_assign( 265 __entry->tid = tid; 266 __entry->sesid = sesid; 267 __entry->cmd = cmd; 268 __entry->mid = mid; 269 ), 270 TP_printk("\tsid=0x%llx tid=0x%x cmd=%u mid=%llu", 271 __entry->sesid, __entry->tid, 272 __entry->cmd, __entry->mid) 273 ) 274 275 #define DEFINE_SMB3_CMD_DONE_EVENT(name) \ 276 DEFINE_EVENT(smb3_cmd_done_class, smb3_##name, \ 277 TP_PROTO(__u32 tid, \ 278 __u64 sesid, \ 279 __u16 cmd, \ 280 __u64 mid), \ 281 TP_ARGS(tid, sesid, cmd, mid)) 282 283 DEFINE_SMB3_CMD_DONE_EVENT(cmd_done); 284 DEFINE_SMB3_CMD_DONE_EVENT(ses_expired); 285 286 DECLARE_EVENT_CLASS(smb3_mid_class, 287 TP_PROTO(__u16 cmd, 288 __u64 mid, 289 __u32 pid, 290 unsigned long when_sent, 291 unsigned long when_received), 292 TP_ARGS(cmd, mid, pid, when_sent, when_received), 293 TP_STRUCT__entry( 294 __field(__u16, cmd) 295 __field(__u64, mid) 296 __field(__u32, pid) 297 __field(unsigned long, when_sent) 298 __field(unsigned long, when_received) 299 ), 300 TP_fast_assign( 301 __entry->cmd = cmd; 302 __entry->mid = mid; 303 __entry->pid = pid; 304 __entry->when_sent = when_sent; 305 __entry->when_received = when_received; 306 ), 307 TP_printk("\tcmd=%u mid=%llu pid=%u, when_sent=%lu when_rcv=%lu", 308 __entry->cmd, __entry->mid, __entry->pid, __entry->when_sent, 309 __entry->when_received) 310 ) 311 312 #define DEFINE_SMB3_MID_EVENT(name) \ 313 DEFINE_EVENT(smb3_mid_class, smb3_##name, \ 314 TP_PROTO(__u16 cmd, \ 315 __u64 mid, \ 316 __u32 pid, \ 317 unsigned long when_sent, \ 318 unsigned long when_received), \ 319 TP_ARGS(cmd, mid, pid, when_sent, when_received)) 320 321 DEFINE_SMB3_MID_EVENT(slow_rsp); 322 323 DECLARE_EVENT_CLASS(smb3_exit_err_class, 324 TP_PROTO(unsigned int xid, 325 const char *func_name, 326 int rc), 327 TP_ARGS(xid, func_name, rc), 328 TP_STRUCT__entry( 329 __field(unsigned int, xid) 330 __field(const char *, func_name) 331 __field(int, rc) 332 ), 333 TP_fast_assign( 334 __entry->xid = xid; 335 __entry->func_name = func_name; 336 __entry->rc = rc; 337 ), 338 TP_printk("\t%s: xid=%u rc=%d", 339 __entry->func_name, __entry->xid, __entry->rc) 340 ) 341 342 #define DEFINE_SMB3_EXIT_ERR_EVENT(name) \ 343 DEFINE_EVENT(smb3_exit_err_class, smb3_##name, \ 344 TP_PROTO(unsigned int xid, \ 345 const char *func_name, \ 346 int rc), \ 347 TP_ARGS(xid, func_name, rc)) 348 349 DEFINE_SMB3_EXIT_ERR_EVENT(exit_err); 350 351 DECLARE_EVENT_CLASS(smb3_enter_exit_class, 352 TP_PROTO(unsigned int xid, 353 const char *func_name), 354 TP_ARGS(xid, func_name), 355 TP_STRUCT__entry( 356 __field(unsigned int, xid) 357 __field(const char *, func_name) 358 ), 359 TP_fast_assign( 360 __entry->xid = xid; 361 __entry->func_name = func_name; 362 ), 363 TP_printk("\t%s: xid=%u", 364 __entry->func_name, __entry->xid) 365 ) 366 367 #define DEFINE_SMB3_ENTER_EXIT_EVENT(name) \ 368 DEFINE_EVENT(smb3_enter_exit_class, smb3_##name, \ 369 TP_PROTO(unsigned int xid, \ 370 const char *func_name), \ 371 TP_ARGS(xid, func_name)) 372 373 DEFINE_SMB3_ENTER_EXIT_EVENT(enter); 374 DEFINE_SMB3_ENTER_EXIT_EVENT(exit_done); 375 376 /* 377 * For smb2/smb3 open call 378 */ 379 DECLARE_EVENT_CLASS(smb3_open_err_class, 380 TP_PROTO(unsigned int xid, 381 __u32 tid, 382 __u64 sesid, 383 int create_options, 384 int desired_access, 385 int rc), 386 TP_ARGS(xid, tid, sesid, create_options, desired_access, rc), 387 TP_STRUCT__entry( 388 __field(unsigned int, xid) 389 __field(__u32, tid) 390 __field(__u64, sesid) 391 __field(int, create_options) 392 __field(int, desired_access) 393 __field(int, rc) 394 ), 395 TP_fast_assign( 396 __entry->xid = xid; 397 __entry->tid = tid; 398 __entry->sesid = sesid; 399 __entry->create_options = create_options; 400 __entry->desired_access = desired_access; 401 __entry->rc = rc; 402 ), 403 TP_printk("xid=%u sid=0x%llx tid=0x%x cr_opts=0x%x des_access=0x%x rc=%d", 404 __entry->xid, __entry->sesid, __entry->tid, 405 __entry->create_options, __entry->desired_access, __entry->rc) 406 ) 407 408 #define DEFINE_SMB3_OPEN_ERR_EVENT(name) \ 409 DEFINE_EVENT(smb3_open_err_class, smb3_##name, \ 410 TP_PROTO(unsigned int xid, \ 411 __u32 tid, \ 412 __u64 sesid, \ 413 int create_options, \ 414 int desired_access, \ 415 int rc), \ 416 TP_ARGS(xid, tid, sesid, create_options, desired_access, rc)) 417 418 DEFINE_SMB3_OPEN_ERR_EVENT(open_err); 419 DEFINE_SMB3_OPEN_ERR_EVENT(posix_mkdir_err); 420 421 DECLARE_EVENT_CLASS(smb3_open_done_class, 422 TP_PROTO(unsigned int xid, 423 __u64 fid, 424 __u32 tid, 425 __u64 sesid, 426 int create_options, 427 int desired_access), 428 TP_ARGS(xid, fid, tid, sesid, create_options, desired_access), 429 TP_STRUCT__entry( 430 __field(unsigned int, xid) 431 __field(__u64, fid) 432 __field(__u32, tid) 433 __field(__u64, sesid) 434 __field(int, create_options) 435 __field(int, desired_access) 436 ), 437 TP_fast_assign( 438 __entry->xid = xid; 439 __entry->fid = fid; 440 __entry->tid = tid; 441 __entry->sesid = sesid; 442 __entry->create_options = create_options; 443 __entry->desired_access = desired_access; 444 ), 445 TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx cr_opts=0x%x des_access=0x%x", 446 __entry->xid, __entry->sesid, __entry->tid, __entry->fid, 447 __entry->create_options, __entry->desired_access) 448 ) 449 450 #define DEFINE_SMB3_OPEN_DONE_EVENT(name) \ 451 DEFINE_EVENT(smb3_open_done_class, smb3_##name, \ 452 TP_PROTO(unsigned int xid, \ 453 __u64 fid, \ 454 __u32 tid, \ 455 __u64 sesid, \ 456 int create_options, \ 457 int desired_access), \ 458 TP_ARGS(xid, fid, tid, sesid, create_options, desired_access)) 459 460 DEFINE_SMB3_OPEN_DONE_EVENT(open_done); 461 DEFINE_SMB3_OPEN_DONE_EVENT(posix_mkdir_done); 462 463 DECLARE_EVENT_CLASS(smb3_reconnect_class, 464 TP_PROTO(__u64 currmid, 465 char *hostname), 466 TP_ARGS(currmid, hostname), 467 TP_STRUCT__entry( 468 __field(__u64, currmid) 469 __field(char *, hostname) 470 ), 471 TP_fast_assign( 472 __entry->currmid = currmid; 473 __entry->hostname = hostname; 474 ), 475 TP_printk("server=%s current_mid=0x%llx", 476 __entry->hostname, 477 __entry->currmid) 478 ) 479 480 #define DEFINE_SMB3_RECONNECT_EVENT(name) \ 481 DEFINE_EVENT(smb3_reconnect_class, smb3_##name, \ 482 TP_PROTO(__u64 currmid, \ 483 char *hostname), \ 484 TP_ARGS(currmid, hostname)) 485 486 DEFINE_SMB3_RECONNECT_EVENT(reconnect); 487 DEFINE_SMB3_RECONNECT_EVENT(partial_send_reconnect); 488 489 #endif /* _CIFS_TRACE_H */ 490 491 #undef TRACE_INCLUDE_PATH 492 #define TRACE_INCLUDE_PATH . 493 #define TRACE_INCLUDE_FILE trace 494 #include <trace/define_trace.h> 495