1/2 is a prep patch. 2/2 is the main one. The good thing: see commit message. the side effect: for normal io-worker path, added two if and two local variables. for FORCE_ASYNC path, added three if and several dereferences I think it is fine since the io-worker path is not the fast path, and the benefit of this patchset is worth it. Btw, we need to tweak the io-cancel.c a bit, not a big problem. liburing tests will come later. v1-->v2: - split logic of force_nonblock - tweak added code in io_wq_submit_work to reduce overhead from Pavel's commments. Hao Xu (2): io_uring: split logic of force_nonblock io_uring: implement async hybrid mode for pollable requests fs/io_uring.c | 85 ++++++++++++++++++++++++++--------- include/uapi/linux/io_uring.h | 4 +- 2 files changed, 66 insertions(+), 23 deletions(-) -- 2.24.4