Commit 92f778a0 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'io_uring-6.19-20260205' of git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux

Pull io_uring fixes from Jens Axboe:

 - Two small fixes for zcrx

 - Two small fixes for fdinfo - one is just killing a superflous newline

* tag 'io_uring-6.19-20260205' of git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux:
  io_uring/fdinfo: be a bit nicer when looping a lot of SQEs/CQEs
  io_uring/fdinfo: kill unnecessary newline feed in CQE32 printing
  io_uring/zcrx: fix rq flush locking
  io_uring/zcrx: fix page array leak
parents 49233c41 38cfdd9d
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ static void __io_uring_show_fdinfo(struct io_ring_ctx *ctx, struct seq_file *m)
	unsigned int cq_head = READ_ONCE(r->cq.head);
	unsigned int cq_tail = READ_ONCE(r->cq.tail);
	unsigned int sq_shift = 0;
	unsigned int sq_entries;
	unsigned int cq_entries, sq_entries;
	int sq_pid = -1, sq_cpu = -1;
	u64 sq_total_time = 0, sq_work_time = 0;
	unsigned int i;
@@ -146,9 +146,11 @@ static void __io_uring_show_fdinfo(struct io_ring_ctx *ctx, struct seq_file *m)
			}
		}
		seq_printf(m, "\n");
		cond_resched();
	}
	seq_printf(m, "CQEs:\t%u\n", cq_tail - cq_head);
	while (cq_head < cq_tail) {
	cq_entries = min(cq_tail - cq_head, ctx->cq_entries);
	for (i = 0; i < cq_entries; i++) {
		struct io_uring_cqe *cqe;
		bool cqe32 = false;

@@ -159,12 +161,15 @@ static void __io_uring_show_fdinfo(struct io_ring_ctx *ctx, struct seq_file *m)
			   cq_head & cq_mask, cqe->user_data, cqe->res,
			   cqe->flags);
		if (cqe32)
			seq_printf(m, ", extra1:%llu, extra2:%llu\n",
			seq_printf(m, ", extra1:%llu, extra2:%llu",
					cqe->big_cqe[0], cqe->big_cqe[1]);
		seq_printf(m, "\n");
		cq_head++;
		if (cqe32)
		if (cqe32) {
			cq_head++;
			i++;
		}
		cond_resched();
	}

	if (ctx->flags & IORING_SETUP_SQPOLL) {
+5 −4
Original line number Diff line number Diff line
@@ -197,6 +197,7 @@ static int io_import_umem(struct io_zcrx_ifq *ifq,
					GFP_KERNEL_ACCOUNT);
	if (ret) {
		unpin_user_pages(pages, nr_pages);
		kvfree(pages);
		return ret;
	}

@@ -1068,8 +1069,6 @@ static unsigned zcrx_parse_rq(netmem_ref *netmem_array, unsigned nr,
	unsigned int mask = zcrx->rq_entries - 1;
	unsigned int i;

	guard(spinlock_bh)(&zcrx->rq_lock);

	nr = min(nr, io_zcrx_rqring_entries(zcrx));
	for (i = 0; i < nr; i++) {
		struct io_uring_zcrx_rqe *rqe = io_zcrx_get_rqe(zcrx, mask);
@@ -1114,9 +1113,11 @@ static int zcrx_flush_rq(struct io_ring_ctx *ctx, struct io_zcrx_ifq *zcrx,
		return -EINVAL;

	do {
		scoped_guard(spinlock_bh, &zcrx->rq_lock) {
			nr = zcrx_parse_rq(netmems, ZCRX_FLUSH_BATCH, zcrx);

			zcrx_return_buffers(netmems, nr);
		}

		total += nr;

		if (fatal_signal_pending(current))