summaryrefslogtreecommitdiff
path: root/io_uring/rw.h
diff options
context:
space:
mode:
authorAnuj Gupta <anuj20.g@samsung.com>2024-11-28 16:52:36 +0530
committerJens Axboe <axboe@kernel.dk>2024-12-23 08:17:16 -0700
commit59a7d12a7fb5ab24efa893e6980a00ffc090c777 (patch)
tree954d15727ccdb0b4b24a08ad70c8d479e7eb9177 /io_uring/rw.h
parent4de2ce04c862db66a7c1dbe0f358fc6df3825bac (diff)
downloadlinux-next-59a7d12a7fb5ab24efa893e6980a00ffc090c777.tar.gz
linux-next-59a7d12a7fb5ab24efa893e6980a00ffc090c777.zip
io_uring: introduce attributes for read/write and PI support
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@samsung.com> Signed-off-by: Kanchan Joshi <joshi.k@samsung.com> Link: https://lore.kernel.org/r/20241128112240.8867-7-anuj20.g@samsung.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring/rw.h')
-rw-r--r--io_uring/rw.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/io_uring/rw.h b/io_uring/rw.h
index 3f432dc75441..2d7656bd268d 100644
--- a/io_uring/rw.h
+++ b/io_uring/rw.h
@@ -2,6 +2,11 @@
#include <linux/pagemap.h>
+struct io_meta_state {
+ u32 seed;
+ struct iov_iter_state iter_meta;
+};
+
struct io_async_rw {
size_t bytes_done;
struct iov_iter iter;
@@ -9,7 +14,14 @@ struct io_async_rw {
struct iovec fast_iov;
struct iovec *free_iovec;
int free_iov_nr;
- struct wait_page_queue wpq;
+ /* wpq is for buffered io, while meta fields are used with direct io */
+ union {
+ struct wait_page_queue wpq;
+ struct {
+ struct uio_meta meta;
+ struct io_meta_state meta_state;
+ };
+ };
};
int io_prep_read_fixed(struct io_kiocb *req, const struct io_uring_sqe *sqe);