Hello, Add two OPs which buffer is retrieved via kernel splice for supporting fuse/ublk zero copy. The 1st patch enhances direct pipe & splice for moving pages in kernel, so that the two added OPs won't be misused, and avoid potential security hole. The 2nd patch allows splice_direct_to_actor() caller to ignore signal if the actor won't block and can be done in bound time. The 3rd patch add the two OPs. The 4th patch implements ublk's ->splice_read() for supporting zero copy. ublksrv(userspace): https://github.com/ming1/ubdsrv/commits/io_uring_splice_buf So far, only loop/null target implements zero copy in above branch: ublk add -t loop -f $file -z ublk add -t none -z Basic FS/IO function is verified, mount/kernel building & fio works fine, and big chunk IO(BS: 64k/512k) performance gets improved obviously. Any comment is welcome! Ming Lei (4): fs/splice: enhance direct pipe & splice for moving pages in kernel fs/splice: allow to ignore signal in __splice_from_pipe io_uring: add IORING_OP_READ[WRITE]_SPLICE_BUF ublk_drv: support splice based read/write zero copy drivers/block/ublk_drv.c | 169 +++++++++++++++++++++++++++++++-- fs/splice.c | 19 +++- include/linux/pipe_fs_i.h | 10 ++ include/linux/splice.h | 23 +++++ include/uapi/linux/io_uring.h | 2 + include/uapi/linux/ublk_cmd.h | 31 +++++- io_uring/opdef.c | 37 ++++++++ io_uring/rw.c | 174 +++++++++++++++++++++++++++++++++- io_uring/rw.h | 1 + 9 files changed, 456 insertions(+), 10 deletions(-) -- 2.31.1