Message ID | 20241206221801.790690-8-kbusch@meta.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | block write streams with nvme fdp | expand |
On 12/6/24 23:17, Keith Busch wrote: > From: Keith Busch <kbusch@kernel.org> > > Allow userspace to pass a per-I/O write stream in the SQE: > > __u8 write_stream; > > The __u8 type matches the size the filesystems and block layer support. > > Application can query the supported values from the statx > max_write_streams field. Unsupported values are ignored by file > operations that do not support write streams or rejected with an error > by those that support them. > > Signed-off-by: Keith Busch <kbusch@kernel.org> > --- > include/uapi/linux/io_uring.h | 4 ++++ > io_uring/io_uring.c | 2 ++ > io_uring/rw.c | 1 + > 3 files changed, 7 insertions(+) > Reviewed-by: Hannes Reinecke <hare@suse.de> Cheers, Hannes
diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h index 38f0d6b10eaf7..986a480e3b9c2 100644 --- a/include/uapi/linux/io_uring.h +++ b/include/uapi/linux/io_uring.h @@ -92,6 +92,10 @@ struct io_uring_sqe { __u16 addr_len; __u16 __pad3[1]; }; + struct { + __u8 write_stream; + __u8 __pad4[3]; + }; }; union { struct { diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index a8cbe674e5d63..978d0617d7af8 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -3868,6 +3868,8 @@ static int __init io_uring_init(void) BUILD_BUG_SQE_ELEM(44, __s32, splice_fd_in); BUILD_BUG_SQE_ELEM(44, __u32, file_index); BUILD_BUG_SQE_ELEM(44, __u16, addr_len); + BUILD_BUG_SQE_ELEM(44, __u8, write_stream); + BUILD_BUG_SQE_ELEM(45, __u8, __pad4[0]); BUILD_BUG_SQE_ELEM(46, __u16, __pad3[0]); BUILD_BUG_SQE_ELEM(48, __u64, addr3); BUILD_BUG_SQE_ELEM_SIZE(48, 0, cmd); diff --git a/io_uring/rw.c b/io_uring/rw.c index 04e4467ab0ee8..b8aa2dfcbf48c 100644 --- a/io_uring/rw.c +++ b/io_uring/rw.c @@ -322,6 +322,7 @@ static int io_prep_rw(struct io_kiocb *req, const struct io_uring_sqe *sqe, } rw->kiocb.dio_complete = NULL; rw->kiocb.ki_flags = 0; + rw->kiocb.ki_write_stream = READ_ONCE(sqe->write_stream); rw->addr = READ_ONCE(sqe->addr); rw->len = READ_ONCE(sqe->len);