Skip to content

Commit fbe1a30

Browse files
isilenceaxboe
authored andcommitted
io_uring/net: import zc ubuf earlier
io_send_setup() already sets up the iterator for IORING_OP_SEND_ZC, we don't need repeating that at issue time. Move it all together with mem accounting at prep time, which is more consistent with how the non-zc version does that. Signed-off-by: Pavel Begunkov <[email protected]> Link: https://lore.kernel.org/r/eb54f007c493ad9f4ca89aa8e715baf30d83fb88.1743202294.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <[email protected]>
1 parent ad3f6cc commit fbe1a30

File tree

1 file changed

+16
-28
lines changed

1 file changed

+16
-28
lines changed

io_uring/net.c

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1318,23 +1318,23 @@ int io_send_zc_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
13181318
if (unlikely(!iomsg))
13191319
return -ENOMEM;
13201320

1321-
if (zc->flags & IORING_RECVSEND_FIXED_BUF)
1322-
iomsg->msg.sg_from_iter = io_sg_from_iter;
1323-
else
1324-
iomsg->msg.sg_from_iter = io_sg_from_iter_iovec;
1325-
13261321
if (req->opcode == IORING_OP_SEND_ZC) {
1327-
req->flags |= REQ_F_IMPORT_BUFFER;
1328-
return io_send_setup(req, sqe);
1322+
if (zc->flags & IORING_RECVSEND_FIXED_BUF)
1323+
req->flags |= REQ_F_IMPORT_BUFFER;
1324+
ret = io_send_setup(req, sqe);
1325+
} else {
1326+
if (unlikely(sqe->addr2 || sqe->file_index))
1327+
return -EINVAL;
1328+
ret = io_sendmsg_setup(req, sqe);
13291329
}
1330-
if (unlikely(sqe->addr2 || sqe->file_index))
1331-
return -EINVAL;
1332-
ret = io_sendmsg_setup(req, sqe);
13331330
if (unlikely(ret))
13341331
return ret;
13351332

1336-
if (!(zc->flags & IORING_RECVSEND_FIXED_BUF))
1333+
if (!(zc->flags & IORING_RECVSEND_FIXED_BUF)) {
1334+
iomsg->msg.sg_from_iter = io_sg_from_iter_iovec;
13371335
return io_notif_account_mem(zc->notif, iomsg->msg.msg_iter.count);
1336+
}
1337+
iomsg->msg.sg_from_iter = io_sg_from_iter;
13381338
return 0;
13391339
}
13401340

@@ -1392,25 +1392,13 @@ static int io_send_zc_import(struct io_kiocb *req, unsigned int issue_flags)
13921392
{
13931393
struct io_sr_msg *sr = io_kiocb_to_cmd(req, struct io_sr_msg);
13941394
struct io_async_msghdr *kmsg = req->async_data;
1395-
int ret;
13961395

1397-
if (sr->flags & IORING_RECVSEND_FIXED_BUF) {
1398-
sr->notif->buf_index = req->buf_index;
1399-
ret = io_import_reg_buf(sr->notif, &kmsg->msg.msg_iter,
1400-
(u64)(uintptr_t)sr->buf, sr->len,
1401-
ITER_SOURCE, issue_flags);
1402-
if (unlikely(ret))
1403-
return ret;
1404-
} else {
1405-
ret = import_ubuf(ITER_SOURCE, sr->buf, sr->len, &kmsg->msg.msg_iter);
1406-
if (unlikely(ret))
1407-
return ret;
1408-
ret = io_notif_account_mem(sr->notif, sr->len);
1409-
if (unlikely(ret))
1410-
return ret;
1411-
}
1396+
WARN_ON_ONCE(!(sr->flags & IORING_RECVSEND_FIXED_BUF));
14121397

1413-
return ret;
1398+
sr->notif->buf_index = req->buf_index;
1399+
return io_import_reg_buf(sr->notif, &kmsg->msg.msg_iter,
1400+
(u64)(uintptr_t)sr->buf, sr->len,
1401+
ITER_SOURCE, issue_flags);
14141402
}
14151403

14161404
int io_send_zc(struct io_kiocb *req, unsigned int issue_flags)

0 commit comments

Comments
 (0)