@@ -619,6 +619,8 @@ struct io_kiocb {
619
619
bool needs_fixed_file ;
620
620
u8 opcode ;
621
621
622
+ u16 buf_index ;
623
+
622
624
struct io_ring_ctx * ctx ;
623
625
struct list_head list ;
624
626
unsigned int flags ;
@@ -2101,9 +2103,7 @@ static int io_prep_rw(struct io_kiocb *req, const struct io_uring_sqe *sqe,
2101
2103
2102
2104
req -> rw .addr = READ_ONCE (sqe -> addr );
2103
2105
req -> rw .len = READ_ONCE (sqe -> len );
2104
- /* we own ->private, reuse it for the buffer index / buffer ID */
2105
- req -> rw .kiocb .private = (void * ) (unsigned long )
2106
- READ_ONCE (sqe -> buf_index );
2106
+ req -> buf_index = READ_ONCE (sqe -> buf_index );
2107
2107
return 0 ;
2108
2108
}
2109
2109
@@ -2146,15 +2146,15 @@ static ssize_t io_import_fixed(struct io_kiocb *req, int rw,
2146
2146
struct io_ring_ctx * ctx = req -> ctx ;
2147
2147
size_t len = req -> rw .len ;
2148
2148
struct io_mapped_ubuf * imu ;
2149
- unsigned index , buf_index ;
2149
+ u16 index , buf_index ;
2150
2150
size_t offset ;
2151
2151
u64 buf_addr ;
2152
2152
2153
2153
/* attempt to use fixed buffers without having provided iovecs */
2154
2154
if (unlikely (!ctx -> user_bufs ))
2155
2155
return - EFAULT ;
2156
2156
2157
- buf_index = ( unsigned long ) req -> rw . kiocb . private ;
2157
+ buf_index = req -> buf_index ;
2158
2158
if (unlikely (buf_index >= ctx -> nr_user_bufs ))
2159
2159
return - EFAULT ;
2160
2160
@@ -2270,10 +2270,10 @@ static void __user *io_rw_buffer_select(struct io_kiocb *req, size_t *len,
2270
2270
bool needs_lock )
2271
2271
{
2272
2272
struct io_buffer * kbuf ;
2273
- int bgid ;
2273
+ u16 bgid ;
2274
2274
2275
2275
kbuf = (struct io_buffer * ) (unsigned long ) req -> rw .addr ;
2276
- bgid = ( int ) ( unsigned long ) req -> rw . kiocb . private ;
2276
+ bgid = req -> buf_index ;
2277
2277
kbuf = io_buffer_select (req , len , bgid , kbuf , needs_lock );
2278
2278
if (IS_ERR (kbuf ))
2279
2279
return kbuf ;
@@ -2364,7 +2364,7 @@ static ssize_t io_import_iovec(int rw, struct io_kiocb *req,
2364
2364
}
2365
2365
2366
2366
/* buffer index only valid with fixed read/write, or buffer select */
2367
- if (req -> rw . kiocb . private && !(req -> flags & REQ_F_BUFFER_SELECT ))
2367
+ if (req -> buf_index && !(req -> flags & REQ_F_BUFFER_SELECT ))
2368
2368
return - EINVAL ;
2369
2369
2370
2370
if (opcode == IORING_OP_READ || opcode == IORING_OP_WRITE ) {
0 commit comments