[RFC,0/4] userspace PI passthrough via io_uring
mbox series

Message ID 20200226083719.4389-1-bob.liu@oracle.com
Headers show
Series
  • userspace PI passthrough via io_uring
Related show

Message

Bob Liu Feb. 26, 2020, 8:37 a.m. UTC
This RFC provides a rough implementation of a mechanism to allow
userspace to attach protection information (e.g. T10 DIF) data to a
disk write and to receive the information alongside a disk read.
The interface is an extension to the io_uring interface:
two new commands (IORING_OP_READV{WRITEV}_PI) are provided.
The last struct iovec in the arg list is interpreted to point to a buffer
containing the the PI data.

Patch #1 add two new commands to io_uring.
Patch #2 introduces two helper funcs in bio-integrity.
Patch #3 implement the PI passthrough in direct-io of block-dev.
(Similar extensions may add to fs/direct-io.c and fs/maps/directio.c)
Patch #4 add io_uring use space test case to liburing.

Welcome any feedbacks.
Thanks!

There was attempt before[1], but was based on AIO at that time.
[1] https://www.mail-archive.com/linux-scsi@vger.kernel.org/msg27537.html

Bob Liu (3):
  io_uring: add IORING_OP_READ{WRITE}V_PI cmd
  bio-integrity: introduce two funcs handle protect information
  block_dev: support protect information passthrough

 block/bio-integrity.c         | 77 +++++++++++++++++++++++++++++++++++++++++++
 fs/block_dev.c                | 17 ++++++++++
 fs/io_uring.c                 | 12 +++++++
 include/linux/bio.h           | 14 ++++++++
 include/linux/fs.h            |  1 +
 include/uapi/linux/io_uring.h |  2 ++
 6 files changed, 123 insertions(+)

Comments

Jens Axboe Feb. 26, 2020, 2:25 p.m. UTC | #1
On 2/26/20 1:37 AM, Bob Liu wrote:
> This RFC provides a rough implementation of a mechanism to allow
> userspace to attach protection information (e.g. T10 DIF) data to a
> disk write and to receive the information alongside a disk read.
> The interface is an extension to the io_uring interface:
> two new commands (IORING_OP_READV{WRITEV}_PI) are provided.
> The last struct iovec in the arg list is interpreted to point to a buffer
> containing the the PI data.
> 
> Patch #1 add two new commands to io_uring.
> Patch #2 introduces two helper funcs in bio-integrity.
> Patch #3 implement the PI passthrough in direct-io of block-dev.
> (Similar extensions may add to fs/direct-io.c and fs/maps/directio.c)
> Patch #4 add io_uring use space test case to liburing.

No strong feelings on the support in general, the io_uring bits are
trivial enough (once fixed up, per comments in that patch) that I
have no objections on that front.

I'd really like Martin to render an opinion on the API (PI info in
last vec), since he's the integrity guy.