Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+5 -7
+2
include/linux/io_uring_types.h
··· 698 698 struct hlist_node hash_node; 699 699 /* For IOPOLL setup queues, with hybrid polling */ 700 700 u64 iopoll_start; 701 + /* for private io_kiocb freeing */ 702 + struct rcu_head rcu_head; 701 703 }; 702 704 /* internal polling, see IORING_FEAT_FAST_POLL */ 703 705 struct async_poll *apoll;
+1 -2
io_uring/io_uring.c
··· 1666 1666 1667 1667 io_req_flags_t io_file_get_flags(struct file *file) 1668 1668 { 1669 - struct inode *inode = file_inode(file); 1670 1669 io_req_flags_t res = 0; 1671 1670 1672 1671 BUILD_BUG_ON(REQ_F_ISREG_BIT != REQ_F_SUPPORT_NOWAIT_BIT + 1); 1673 1672 1674 - if (S_ISREG(inode->i_mode) && !(inode->i_flags & S_ANON_INODE)) 1673 + if (S_ISREG(file_inode(file)->i_mode)) 1675 1674 res |= REQ_F_ISREG; 1676 1675 if ((file->f_flags & O_NONBLOCK) || (file->f_mode & FMODE_NOWAIT)) 1677 1676 res |= REQ_F_SUPPORT_NOWAIT;
+2 -2
io_uring/msg_ring.c
··· 82 82 spin_unlock(&ctx->msg_lock); 83 83 } 84 84 if (req) 85 - kmem_cache_free(req_cachep, req); 85 + kfree_rcu(req, rcu_head); 86 86 percpu_ref_put(&ctx->refs); 87 87 } 88 88 ··· 90 90 int res, u32 cflags, u64 user_data) 91 91 { 92 92 if (!READ_ONCE(ctx->submitter_task)) { 93 - kmem_cache_free(req_cachep, req); 93 + kfree_rcu(req, rcu_head); 94 94 return -EOWNERDEAD; 95 95 } 96 96 req->opcode = IORING_OP_NOP;
-3
io_uring/zcrx.c
··· 863 863 static void io_pp_zc_destroy(struct page_pool *pp) 864 864 { 865 865 struct io_zcrx_ifq *ifq = io_pp_to_ifq(pp); 866 - struct io_zcrx_area *area = ifq->area; 867 866 868 - if (WARN_ON_ONCE(area->free_count != area->nia.num_niovs)) 869 - return; 870 867 percpu_ref_put(&ifq->ctx->refs); 871 868 } 872 869