On Thu, Sep 01, 2022 at 11:04:24AM +0800, Ziyang Zhang wrote: > On 2022/9/1 10:30, Ming Lei wrote: > > + > > +- ``UBLK_IO_NEED_GET_DATA`` > > + > > + ublk server pre-allocates IO buffer for each IO by default. Any new projects > > + should use this buffer to communicate with ublk driver. However, existing > > + projects may break or not able to consume the new buffer interface; that's > > + why this command is added for backwards compatibility so that existing > > + projects can still consume existing buffers. > > Hi, Ming. > > Could you please add more information on UBLK_IO_NEED_GET_DATA. stefanha > found it hard to understand. > > Myabe we should write like this: > > With UBLK_F_NEED_GET_DATA enabled, the WRITE request will be firstly issued to > ublksrv without data copy. Then, IO backend receives the request and it can allocate > data buffer and embed its addr inside a new ioucmd. After the kernel driver gets the > ioucmd, the data copy happens(from biovecs to backend's buffer). Finally, > the backend receives the request again with data to be written and it can truly > handle the request. > > UBLK_IO_NEED_GET_DATA add one additional round-trip in ublk_drv and one > io_uring_enter() syscall. Any user thinks that it may lower performance > should not enable UBLK_F_NEED_GET_DATA. ublk server pre-allocates IO buffer > for each IO by default. Any new projects should use this buffer to communicate > with ublk driver. However, existing projects may break or not able to consume > the new buffer interface; that's why this command is added for backwards > compatibility so that existing projects can still consume existing buffers. I am fine to add it if V3 is needed. If not, please send a new patch. BTW, I guess Jens may consider it for v6.0. Thanks, Ming