io_uring: add generic command payload type to struct io_kiocb
authorJens Axboe <axboe@kernel.dk>
Tue, 24 May 2022 14:32:05 +0000 (08:32 -0600)
committerJens Axboe <axboe@kernel.dk>
Mon, 25 Jul 2022 00:39:10 +0000 (18:39 -0600)
Each opcode generally has a command structure in io_kiocb which it can
use to store data associated with that request.

In preparation for having the core layer not know about what's inside
these fields, add a generic io_cmd_data type and put in the union as
well.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/io_uring.c

index f353822..c596ffd 100644 (file)
@@ -954,14 +954,27 @@ enum {
 };
 
 /*
- * NOTE! Each of the iocb union members has the file pointer
- * as the first entry in their struct definition. So you can
- * access the file pointer through any of the sub-structs,
- * or directly as just 'file' in this struct.
+ * Each request type overlays its private data structure on top of this one.
+ * They must not exceed this one in size.
  */
+struct io_cmd_data {
+       struct file             *file;
+       /* each command gets 56 bytes of data */
+       __u8                    data[56];
+};
+
+#define io_kiocb_to_cmd(req)   ((void *) &(req)->cmd)
+
 struct io_kiocb {
        union {
+               /*
+                * NOTE! Each of the io_kiocb union members has the file pointer
+                * as the first entry in their struct definition. So you can
+                * access the file pointer through any of the sub-structs,
+                * or directly as just 'file' in this struct.
+                */
                struct file             *file;
+               struct io_cmd_data      cmd;
                struct io_rw            rw;
                struct io_poll_iocb     poll;
                struct io_poll_update   poll_update;