On Thu, Nov 28, 2024 at 04:52:36PM +0530, Anuj Gupta wrote: > Add the ability to pass additional attributes along with read/write. > Application can prepare attibute specific information and pass its > address using the SQE field: > __u64 attr_ptr; > > Along with setting a mask indicating attributes being passed: > __u64 attr_type_mask; > > Overall 64 attributes are allowed and currently one attribute > 'IORING_RW_ATTR_FLAG_PI' is supported. > > With PI attribute, userspace can pass following information: > - flags: integrity check flags IO_INTEGRITY_CHK_{GUARD/APPTAG/REFTAG} > - len: length of PI/metadata buffer > - addr: address of metadata buffer > - seed: seed value for reftag remapping > - app_tag: application defined 16b value > > Process this information to prepare uio_meta_descriptor and pass it down > using kiocb->private. > > PI attribute is supported only for direct IO. > > Signed-off-by: Anuj Gupta <anuj20.g@xxxxxxxxxxx> > Signed-off-by: Kanchan Joshi <joshi.k@xxxxxxxxxxx> > --- > include/uapi/linux/io_uring.h | 16 +++++++ > io_uring/io_uring.c | 2 + > io_uring/rw.c | 83 ++++++++++++++++++++++++++++++++++- > io_uring/rw.h | 14 +++++- > 4 files changed, 112 insertions(+), 3 deletions(-) > > diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h > index aac9a4f8fa9a..38f0d6b10eaf 100644 > --- a/include/uapi/linux/io_uring.h > +++ b/include/uapi/linux/io_uring.h > @@ -98,6 +98,10 @@ struct io_uring_sqe { > __u64 addr3; > __u64 __pad2[1]; > }; > + struct { > + __u64 attr_ptr; /* pointer to attribute information */ > + __u64 attr_type_mask; /* bit mask of attributes */ > + }; I can't say I'm a fan of how this turned out. I'm merging up the write hint stuff, and these new fields occupy where that 16-bit value was initially going. Okay, so I guess I need to just add a new attribute flag? That might work if I am only appending exactly one extra attribute per SQE, but what if I need both PI and Write Hint? Do the attributes need to appear in a strict order?