Skip to content

Commit b7966a5

Browse files
committed
Merge tag 'io_uring-6.3-2023-03-16' of git://git.kernel.dk/linux
Pull io_uring fixes from Jens Axboe: - When PF_NO_SETAFFINITY was removed for io-wq threads, we kind of forgot about the SQPOLL thread. Remove it there as well, there's even less of a reason to set it there (Michal) - Fixup a confusing 'ret' setting (Li) - When MSG_RING is used to send a direct descriptor to another ring, it's possible to have it allocate it on the target ring rather than provide a specific index for it. If this is done, return the chosen value in the CQE, like we would've done locally (Pavel) - Fix a regression in this series on huge page bvec collapsing (Pavel) * tag 'io_uring-6.3-2023-03-16' of git://git.kernel.dk/linux: io_uring/rsrc: fix folio accounting io_uring/msg_ring: let target know allocated index io_uring: rsrc: Optimize return value variable 'ret' io_uring/sqpoll: Do not set PF_NO_SETAFFINITY on sqpoll threads
2 parents 02ef7d3 + d2acf78 commit b7966a5

File tree

3 files changed

+11
-4
lines changed

3 files changed

+11
-4
lines changed

io_uring/msg_ring.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ static int io_msg_install_complete(struct io_kiocb *req, unsigned int issue_flag
202202
* completes with -EOVERFLOW, then the sender must ensure that a
203203
* later IORING_OP_MSG_RING delivers the message.
204204
*/
205-
if (!io_post_aux_cqe(target_ctx, msg->user_data, msg->len, 0))
205+
if (!io_post_aux_cqe(target_ctx, msg->user_data, ret, 0))
206206
ret = -EOVERFLOW;
207207
out_unlock:
208208
io_double_unlock_ctx(target_ctx);
@@ -229,6 +229,8 @@ static int io_msg_send_fd(struct io_kiocb *req, unsigned int issue_flags)
229229
struct io_ring_ctx *ctx = req->ctx;
230230
struct file *src_file = msg->src_file;
231231

232+
if (msg->len)
233+
return -EINVAL;
232234
if (target_ctx == ctx)
233235
return -EINVAL;
234236
if (target_ctx->flags & IORING_SETUP_R_DISABLED)

io_uring/rsrc.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ __cold static int io_rsrc_data_alloc(struct io_ring_ctx *ctx,
410410
unsigned nr, struct io_rsrc_data **pdata)
411411
{
412412
struct io_rsrc_data *data;
413-
int ret = -ENOMEM;
413+
int ret = 0;
414414
unsigned i;
415415

416416
data = kzalloc(sizeof(*data), GFP_KERNEL);
@@ -1235,7 +1235,13 @@ static int io_sqe_buffer_register(struct io_ring_ctx *ctx, struct iovec *iov,
12351235
}
12361236
}
12371237
if (folio) {
1238-
folio_put_refs(folio, nr_pages - 1);
1238+
/*
1239+
* The pages are bound to the folio, it doesn't
1240+
* actually unpin them but drops all but one reference,
1241+
* which is usually put down by io_buffer_unmap().
1242+
* Note, needs a better helper.
1243+
*/
1244+
unpin_user_pages(&pages[1], nr_pages - 1);
12391245
nr_pages = 1;
12401246
}
12411247
}

io_uring/sqpoll.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,6 @@ static int io_sq_thread(void *data)
233233
set_cpus_allowed_ptr(current, cpumask_of(sqd->sq_cpu));
234234
else
235235
set_cpus_allowed_ptr(current, cpu_online_mask);
236-
current->flags |= PF_NO_SETAFFINITY;
237236

238237
mutex_lock(&sqd->lock);
239238
while (1) {

0 commit comments

Comments
 (0)