[PATCH v6 06/10] io_uring/rw: add support to send metadata along with read/write
Keith Busch
kbusch at kernel.org
Wed Oct 30 14:09:26 PDT 2024
On Wed, Oct 30, 2024 at 11:31:08PM +0530, Kanchan Joshi wrote:
> diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h
> index 024745283783..48dcca125db3 100644
> --- a/include/uapi/linux/io_uring.h
> +++ b/include/uapi/linux/io_uring.h
> @@ -105,6 +105,22 @@ struct io_uring_sqe {
> */
> __u8 cmd[0];
> };
> + /*
> + * If the ring is initialized with IORING_SETUP_SQE128, then
> + * this field is starting offset for 64 bytes of data. For meta io
> + * this contains 'struct io_uring_meta_pi'
> + */
> + __u8 big_sqe[0];
> +};
> +
> +/* this is placed in SQE128 */
> +struct io_uring_meta_pi {
> + __u16 pi_flags;
> + __u16 app_tag;
> + __u32 len;
> + __u64 addr;
> + __u64 seed;
> + __u64 rsvd[2];
> };
On the previous version, I was more questioning if it aligns with what
Pavel was trying to do here. I didn't quite get it, so I was more
confused than saying it should be this way now.
But I personally think this path makes sense. I would set it up just a
little differently for extended sqe's so that the PI overlays a more
generic struct that other opcodes might find a way to use later.
Something like:
struct io_uring_sqe_ext {
union {
__u32 rsvd0[8];
struct {
__u16 pi_flags;
__u16 app_tag;
__u32 len;
__u64 addr;
__u64 seed;
} rw_pi;
};
__u32 rsvd1[8];
};
> @@ -3902,6 +3903,9 @@ static int __init io_uring_init(void)
> /* top 8bits are for internal use */
> BUILD_BUG_ON((IORING_URING_CMD_MASK & 0xff000000) != 0);
>
> + BUILD_BUG_ON(sizeof(struct io_uring_meta_pi) >
> + sizeof(struct io_uring_sqe));
Then this check would become:
BUILD_BUG_ON(sizeof(struct io_uring_sqe_ext) != sizeof(struct io_uring_sqe));
More information about the Linux-nvme
mailing list