Pull io_uring updates from Jens Axboe: "Here are the io_uring changes for this merge window. Light on new features this time around (just splice + buffer selection), lots of cleanups, fixes, and improvements to existing support. In particular, this contains: - Cleanup fixed file update handling for stack fallback (Hillf) - Re-work of how pollable async IO is handled, we no longer require thread offload to handle that. Instead we rely using poll to drive this, with task_work execution. - In conjunction with the above, allow expendable buffer selection, so that poll+recv (for example) no longer has to be a split operation. - Make sure we honor RLIMIT_FSIZE for buffered writes - Add support for splice (Pavel) - Linked work inheritance fixes and optimizations (Pavel) - Async work fixes and cleanups (Pavel) - Improve io-wq locking (Pavel) - Hashed link write improvements (Pavel) - SETUP_IOPOLL|SETUP_SQPOLL improvements (Xiaoguang)" * tag 'for-5.7/io_uring-2020-03-29' of git://git.kernel.dk/linux-block: (54 commits) io_uring: cleanup io_alloc_async_ctx() io_uring: fix missing 'return' in comment io-wq: handle hashed writes in chains io-uring: drop 'free_pfile' in struct io_file_put io-uring: drop completion when removing file io_uring: Fix ->data corruption on re-enqueue io-wq: close cancel gap for hashed linked work io_uring: make spdxcheck.py happy io_uring: honor original task RLIMIT_FSIZE io-wq: hash dependent work io-wq: split hashing and enqueueing io-wq: don't resched if there is no work io-wq: remove duplicated cancel code io_uring: fix truncated async read/readv and write/writev retry io_uring: dual license io_uring.h uapi header io_uring: io_uring_enter(2) don't poll while SETUP_IOPOLL|SETUP_SQPOLL enabled io_uring: Fix unused function warnings io_uring: add end-of-bits marker and build time verify it io_uring: provide means of removing buffers io_uring: add IOSQE_BUFFER_SELECT support for IORING_OP_RECVMSG ...
Showing the changes to include/trace (1 of 12 files). Show all
Unified · Split
| @@ -357,6 +357,109 @@ TRACE_EVENT(io_uring_submit_sqe, · 356 unmodified lines | |||
| 357 | __entry->force_nonblock, __entry->sq_thread) | 357 | __entry->force_nonblock, __entry->sq_thread) |
| 358 | ); | 358 | ); |
| 359 | 359 | ||
| 360 | TRACE_EVENT(io_uring_poll_arm, | ||
| 361 | |||
| 362 | TP_PROTO(void *ctx, u8 opcode, u64 user_data, int mask, int events), | ||
| 363 | |||
| 364 | TP_ARGS(ctx, opcode, user_data, mask, events), | ||
| 365 | |||
| 366 | TP_STRUCT__entry ( | ||
| 367 | __field( void *, ctx ) | ||
| 368 | __field( u8, opcode ) | ||
| 369 | __field( u64, user_data ) | ||
| 370 | __field( int, mask ) | ||
| 371 | __field( int, events ) | ||
| 372 | ), | ||
| 373 | |||
| 374 | TP_fast_assign( | ||
| 375 | __entry->ctx = ctx; | ||
| 376 | __entry->opcode = opcode; | ||
| 377 | __entry->user_data = user_data; | ||
| 378 | __entry->mask = mask; | ||
| 379 | __entry->events = events; | ||
| 380 | ), | ||
| 381 | |||
| 382 | TP_printk("ring %p, op %d, data 0x%llx, mask 0x%x, events 0x%x", | ||
| 383 | __entry->ctx, __entry->opcode, | ||
| 384 | (unsigned long long) __entry->user_data, | ||
| 385 | __entry->mask, __entry->events) | ||
| 386 | ); | ||
| 387 | |||
| 388 | TRACE_EVENT(io_uring_poll_wake, | ||
| 389 | |||
| 390 | TP_PROTO(void *ctx, u8 opcode, u64 user_data, int mask), | ||
| 391 | |||
| 392 | TP_ARGS(ctx, opcode, user_data, mask), | ||
| 393 | |||
| 394 | TP_STRUCT__entry ( | ||
| 395 | __field( void *, ctx ) | ||
| 396 | __field( u8, opcode ) | ||
| 397 | __field( u64, user_data ) | ||
| 398 | __field( int, mask ) | ||
| 399 | ), | ||
| 400 | |||
| 401 | TP_fast_assign( | ||
| 402 | __entry->ctx = ctx; | ||
| 403 | __entry->opcode = opcode; | ||
| 404 | __entry->user_data = user_data; | ||
| 405 | __entry->mask = mask; | ||
| 406 | ), | ||
| 407 | |||
| 408 | TP_printk("ring %p, op %d, data 0x%llx, mask 0x%x", | ||
| 409 | __entry->ctx, __entry->opcode, | ||
| 410 | (unsigned long long) __entry->user_data, | ||
| 411 | __entry->mask) | ||
| 412 | ); | ||
| 413 | |||
| 414 | TRACE_EVENT(io_uring_task_add, | ||
| 415 | |||
| 416 | TP_PROTO(void *ctx, u8 opcode, u64 user_data, int mask), | ||
| 417 | |||
| 418 | TP_ARGS(ctx, opcode, user_data, mask), | ||
| 419 | |||
| 420 | TP_STRUCT__entry ( | ||
| 421 | __field( void *, ctx ) | ||
| 422 | __field( u8, opcode ) | ||
| 423 | __field( u64, user_data ) | ||
| 424 | __field( int, mask ) | ||
| 425 | ), | ||
| 426 | |||
| 427 | TP_fast_assign( | ||
| 428 | __entry->ctx = ctx; | ||
| 429 | __entry->opcode = opcode; | ||
| 430 | __entry->user_data = user_data; | ||
| 431 | __entry->mask = mask; | ||
| 432 | ), | ||
| 433 | |||
| 434 | TP_printk("ring %p, op %d, data 0x%llx, mask %x", | ||
| 435 | __entry->ctx, __entry->opcode, | ||
| 436 | (unsigned long long) __entry->user_data, | ||
| 437 | __entry->mask) | ||
| 438 | ); | ||
| 439 | |||
| 440 | TRACE_EVENT(io_uring_task_run, | ||
| 441 | |||
| 442 | TP_PROTO(void *ctx, u8 opcode, u64 user_data), | ||
| 443 | |||
| 444 | TP_ARGS(ctx, opcode, user_data), | ||
| 445 | |||
| 446 | TP_STRUCT__entry ( | ||
| 447 | __field( void *, ctx ) | ||
| 448 | __field( u8, opcode ) | ||
| 449 | __field( u64, user_data ) | ||
| 450 | ), | ||
| 451 | |||
| 452 | TP_fast_assign( | ||
| 453 | __entry->ctx = ctx; | ||
| 454 | __entry->opcode = opcode; | ||
| 455 | __entry->user_data = user_data; | ||
| 456 | ), | ||
| 457 | |||
| 458 | TP_printk("ring %p, op %d, data 0x%llx", | ||
| 459 | __entry->ctx, __entry->opcode, | ||
| 460 | (unsigned long long) __entry->user_data) | ||
| 461 | ); | ||
| 462 | |||
| 360 | #endif /* _TRACE_IO_URING_H */ | 463 | #endif /* _TRACE_IO_URING_H */ |
| 361 | 464 | ||
| 362 | /* This part must be outside protection */ | 465 | /* This part must be outside protection */ |