mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-23 07:23:12 +02:00
io_uring-6.16-20250710
-----BEGIN PGP SIGNATURE----- iQJEBAABCAAuFiEEwPw5LcreJtl1+l5K99NY+ylx4KYFAmhwb9gQHGF4Ym9lQGtl cm5lbC5kawAKCRD301j7KXHgpiIAD/0Vs8uJRMTx/tB4xCRDoPrW5mdWK+d6FiPg e0/1Kn5J1vPEbM6uYpn6wZe0BwHS76OQGhJ5OrsFSjtxX5VA4rMYZxJZYxVLW88W U+Y4dGuU1ZoLPQYwGrKVSXz+9tKQzXJOsYIF/LCMvxgjFPJuvzwSsp0DeXT7vzBT 9UsEcnCfjK31X4OBNa9F8RvgfguodknVL3k6B/98wx3+DODM9xaSv7tgDhULFl4Q U+eZYtKr0dd0jUhaWiMgJrmGZ/bElRn36ILsOhJ0wgcZws3l+zLHkCC202Nx+J8/ VvljSeke1hUoY4YMoVAmJ72XlvSW+C2EqTO56P2xEyzpz0/Xhm00qVsiKZQHR0Ia r6xos6scvnni5myVgpkcLpbFRjHlrtSjX+kh3ozqFdya83/Mjd7Midizn7mjaiFS 4r5KK4ov3fXLY29rYeuREkZys31Fn8XCERd3N7RPLAN/hzEC4fXm9/S0lkOqwqTP 3OtvUu+AwepyUyJ0KlakYUDvu6X+vP6WFkQFLFIBFcN/OglWRZe5r3fuQoX0iw6/ Ln+DB+W6XtBi7rzIjuYYzAMgC7iiZc57e64iXlzSyPEsjOUkTngKRH4zQY8MyjFb 1Fnn7TWxIqHzlfpvu5g/e6dxbTduQxnLTDNQwocXw7hc8/D49wbyUUy4KGc+yyUP PYAYQSwtmw== =4o0B -----END PGP SIGNATURE----- Merge tag 'io_uring-6.16-20250710' of git://git.kernel.dk/linux Pull io_uring fixes from Jens Axboe: - Remove a pointless warning in the zcrx code - Fix for MSG_RING commands, where the allocated io_kiocb needs to be freed under RCU as well - Revert the work-around we had in place for the anon inodes pretending to be regular files. Since that got reworked upstream, the work-around is no longer needed * tag 'io_uring-6.16-20250710' of git://git.kernel.dk/linux: Revert "io_uring: gate REQ_F_ISREG on !S_ANON_INODE as well" io_uring/msg_ring: ensure io_kiocb freeing is deferred for RCU io_uring/zcrx: fix pp destruction warnings
This commit is contained in:
commit
cb3002e0e9
|
@ -698,6 +698,8 @@ struct io_kiocb {
|
||||||
struct hlist_node hash_node;
|
struct hlist_node hash_node;
|
||||||
/* For IOPOLL setup queues, with hybrid polling */
|
/* For IOPOLL setup queues, with hybrid polling */
|
||||||
u64 iopoll_start;
|
u64 iopoll_start;
|
||||||
|
/* for private io_kiocb freeing */
|
||||||
|
struct rcu_head rcu_head;
|
||||||
};
|
};
|
||||||
/* internal polling, see IORING_FEAT_FAST_POLL */
|
/* internal polling, see IORING_FEAT_FAST_POLL */
|
||||||
struct async_poll *apoll;
|
struct async_poll *apoll;
|
||||||
|
|
|
@ -1666,12 +1666,11 @@ static void io_iopoll_req_issued(struct io_kiocb *req, unsigned int issue_flags)
|
||||||
|
|
||||||
io_req_flags_t io_file_get_flags(struct file *file)
|
io_req_flags_t io_file_get_flags(struct file *file)
|
||||||
{
|
{
|
||||||
struct inode *inode = file_inode(file);
|
|
||||||
io_req_flags_t res = 0;
|
io_req_flags_t res = 0;
|
||||||
|
|
||||||
BUILD_BUG_ON(REQ_F_ISREG_BIT != REQ_F_SUPPORT_NOWAIT_BIT + 1);
|
BUILD_BUG_ON(REQ_F_ISREG_BIT != REQ_F_SUPPORT_NOWAIT_BIT + 1);
|
||||||
|
|
||||||
if (S_ISREG(inode->i_mode) && !(inode->i_flags & S_ANON_INODE))
|
if (S_ISREG(file_inode(file)->i_mode))
|
||||||
res |= REQ_F_ISREG;
|
res |= REQ_F_ISREG;
|
||||||
if ((file->f_flags & O_NONBLOCK) || (file->f_mode & FMODE_NOWAIT))
|
if ((file->f_flags & O_NONBLOCK) || (file->f_mode & FMODE_NOWAIT))
|
||||||
res |= REQ_F_SUPPORT_NOWAIT;
|
res |= REQ_F_SUPPORT_NOWAIT;
|
||||||
|
|
|
@ -82,7 +82,7 @@ static void io_msg_tw_complete(struct io_kiocb *req, io_tw_token_t tw)
|
||||||
spin_unlock(&ctx->msg_lock);
|
spin_unlock(&ctx->msg_lock);
|
||||||
}
|
}
|
||||||
if (req)
|
if (req)
|
||||||
kmem_cache_free(req_cachep, req);
|
kfree_rcu(req, rcu_head);
|
||||||
percpu_ref_put(&ctx->refs);
|
percpu_ref_put(&ctx->refs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ static int io_msg_remote_post(struct io_ring_ctx *ctx, struct io_kiocb *req,
|
||||||
int res, u32 cflags, u64 user_data)
|
int res, u32 cflags, u64 user_data)
|
||||||
{
|
{
|
||||||
if (!READ_ONCE(ctx->submitter_task)) {
|
if (!READ_ONCE(ctx->submitter_task)) {
|
||||||
kmem_cache_free(req_cachep, req);
|
kfree_rcu(req, rcu_head);
|
||||||
return -EOWNERDEAD;
|
return -EOWNERDEAD;
|
||||||
}
|
}
|
||||||
req->opcode = IORING_OP_NOP;
|
req->opcode = IORING_OP_NOP;
|
||||||
|
|
|
@ -863,10 +863,7 @@ static int io_pp_zc_init(struct page_pool *pp)
|
||||||
static void io_pp_zc_destroy(struct page_pool *pp)
|
static void io_pp_zc_destroy(struct page_pool *pp)
|
||||||
{
|
{
|
||||||
struct io_zcrx_ifq *ifq = io_pp_to_ifq(pp);
|
struct io_zcrx_ifq *ifq = io_pp_to_ifq(pp);
|
||||||
struct io_zcrx_area *area = ifq->area;
|
|
||||||
|
|
||||||
if (WARN_ON_ONCE(area->free_count != area->nia.num_niovs))
|
|
||||||
return;
|
|
||||||
percpu_ref_put(&ifq->ctx->refs);
|
percpu_ref_put(&ifq->ctx->refs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user