Skip to content

Commit 92f778a

Browse files
committed
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
2 parents 49233c4 + 38cfdd9 commit 92f778a

2 files changed

Lines changed: 14 additions & 8 deletions

File tree

io_uring/fdinfo.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ static void __io_uring_show_fdinfo(struct io_ring_ctx *ctx, struct seq_file *m)
6767
unsigned int cq_head = READ_ONCE(r->cq.head);
6868
unsigned int cq_tail = READ_ONCE(r->cq.tail);
6969
unsigned int sq_shift = 0;
70-
unsigned int sq_entries;
70+
unsigned int cq_entries, sq_entries;
7171
int sq_pid = -1, sq_cpu = -1;
7272
u64 sq_total_time = 0, sq_work_time = 0;
7373
unsigned int i;
@@ -146,9 +146,11 @@ static void __io_uring_show_fdinfo(struct io_ring_ctx *ctx, struct seq_file *m)
146146
}
147147
}
148148
seq_printf(m, "\n");
149+
cond_resched();
149150
}
150151
seq_printf(m, "CQEs:\t%u\n", cq_tail - cq_head);
151-
while (cq_head < cq_tail) {
152+
cq_entries = min(cq_tail - cq_head, ctx->cq_entries);
153+
for (i = 0; i < cq_entries; i++) {
152154
struct io_uring_cqe *cqe;
153155
bool cqe32 = false;
154156

@@ -159,12 +161,15 @@ static void __io_uring_show_fdinfo(struct io_ring_ctx *ctx, struct seq_file *m)
159161
cq_head & cq_mask, cqe->user_data, cqe->res,
160162
cqe->flags);
161163
if (cqe32)
162-
seq_printf(m, ", extra1:%llu, extra2:%llu\n",
164+
seq_printf(m, ", extra1:%llu, extra2:%llu",
163165
cqe->big_cqe[0], cqe->big_cqe[1]);
164166
seq_printf(m, "\n");
165167
cq_head++;
166-
if (cqe32)
168+
if (cqe32) {
167169
cq_head++;
170+
i++;
171+
}
172+
cond_resched();
168173
}
169174

170175
if (ctx->flags & IORING_SETUP_SQPOLL) {

io_uring/zcrx.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ static int io_import_umem(struct io_zcrx_ifq *ifq,
197197
GFP_KERNEL_ACCOUNT);
198198
if (ret) {
199199
unpin_user_pages(pages, nr_pages);
200+
kvfree(pages);
200201
return ret;
201202
}
202203

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

1071-
guard(spinlock_bh)(&zcrx->rq_lock);
1072-
10731072
nr = min(nr, io_zcrx_rqring_entries(zcrx));
10741073
for (i = 0; i < nr; i++) {
10751074
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,
11141113
return -EINVAL;
11151114

11161115
do {
1117-
nr = zcrx_parse_rq(netmems, ZCRX_FLUSH_BATCH, zcrx);
1116+
scoped_guard(spinlock_bh, &zcrx->rq_lock) {
1117+
nr = zcrx_parse_rq(netmems, ZCRX_FLUSH_BATCH, zcrx);
1118+
zcrx_return_buffers(netmems, nr);
1119+
}
11181120

1119-
zcrx_return_buffers(netmems, nr);
11201121
total += nr;
11211122

11221123
if (fatal_signal_pending(current))

0 commit comments

Comments
 (0)