mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-02 18:04:38 -04:00
Merge tag 'io_uring-5.14-2021-08-20' of git://git.kernel.dk/linux-block
Pull io_uring fixes from Jens Axboe:
"A few small fixes that should go into this release:
- Fix never re-assigning an initial error value for io_uring_enter()
for SQPOLL, if asked to do nothing
- Fix xa_alloc_cycle() return value checking, for cases where we have
wrapped around
- Fix for a ctx pin issue introduced in this cycle (Pavel)"
* tag 'io_uring-5.14-2021-08-20' of git://git.kernel.dk/linux-block:
io_uring: fix xa_alloc_cycle() error return value check
io_uring: pin ctx on fallback execution
io_uring: only assign io_uring_enter() SQPOLL error in actual error case
This commit is contained in:
@@ -2477,8 +2477,10 @@ static void io_fallback_req_func(struct work_struct *work)
|
||||
struct llist_node *node = llist_del_all(&ctx->fallback_llist);
|
||||
struct io_kiocb *req, *tmp;
|
||||
|
||||
percpu_ref_get(&ctx->refs);
|
||||
llist_for_each_entry_safe(req, tmp, node, io_task_work.fallback_node)
|
||||
req->io_task_work.func(req);
|
||||
percpu_ref_put(&ctx->refs);
|
||||
}
|
||||
|
||||
static void __io_complete_rw(struct io_kiocb *req, long res, long res2,
|
||||
@@ -9370,9 +9372,10 @@ SYSCALL_DEFINE6(io_uring_enter, unsigned int, fd, u32, to_submit,
|
||||
if (ctx->flags & IORING_SETUP_SQPOLL) {
|
||||
io_cqring_overflow_flush(ctx, false);
|
||||
|
||||
ret = -EOWNERDEAD;
|
||||
if (unlikely(ctx->sq_data->thread == NULL))
|
||||
if (unlikely(ctx->sq_data->thread == NULL)) {
|
||||
ret = -EOWNERDEAD;
|
||||
goto out;
|
||||
}
|
||||
if (flags & IORING_ENTER_SQ_WAKEUP)
|
||||
wake_up(&ctx->sq_data->wait);
|
||||
if (flags & IORING_ENTER_SQ_WAIT) {
|
||||
@@ -9840,10 +9843,11 @@ static int io_register_personality(struct io_ring_ctx *ctx)
|
||||
|
||||
ret = xa_alloc_cyclic(&ctx->personalities, &id, (void *)creds,
|
||||
XA_LIMIT(0, USHRT_MAX), &ctx->pers_next, GFP_KERNEL);
|
||||
if (!ret)
|
||||
return id;
|
||||
put_cred(creds);
|
||||
return ret;
|
||||
if (ret < 0) {
|
||||
put_cred(creds);
|
||||
return ret;
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
static int io_register_restrictions(struct io_ring_ctx *ctx, void __user *arg,
|
||||
|
||||
Reference in New Issue
Block a user