Hello, The 1st 3 patch are cleanup. The other patches support to move data copy between io request pages and userspace buffer into ublk server(userspace). This way avoids one round trip of uring command(UBLK_F_NEED_GET_DATA), and solve buffer release issue for READ[1]. Meantime both sides becomes cleaner. Also it can be thought as prep patch for supporting zero copy. ublksrv loop usercopy code: https://github.com/ming1/ubdsrv/commits/usercopy [1] https://lore.kernel.org/linux-block/116d8a56-0881-56d3-9bcc-78ff3e1dc4e5@xxxxxxxxxxxxxxxxx/T/#m23bd4b8634c0a054e6797063167b469949a247bb V2: - rebase on latest linus tree Ming Lei (7): ublk: kill queuing request by task_work_add ublk: cleanup io cmd code path by adding ublk_fill_io() ublk: cleanup ublk_copy_user_pages ublk: grab request reference when the request is handled by userspace ublk: support to copy any part of request pages ublk: add read()/write() support for ublk char device ublk: support user copy drivers/block/ublk_drv.c | 458 +++++++++++++++++++++++++--------- include/uapi/linux/ublk_cmd.h | 25 +- 2 files changed, 361 insertions(+), 122 deletions(-) -- 2.40.0