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.

io_uring/net: set sg_from_iter in advance

In preparation to the next patch, set ->sg_from_iter callback at request
prep time.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/5fe2972701df3bacdb3d760bce195fa640bee201.1743202294.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Pavel Begunkov and committed by
Jens Axboe
ad3f6cc4 49dbce56

+15 -10
+15 -10
io_uring/net.c
··· 97 97 struct io_zcrx_ifq *ifq; 98 98 }; 99 99 100 + static int io_sg_from_iter_iovec(struct sk_buff *skb, 101 + struct iov_iter *from, size_t length); 102 + static int io_sg_from_iter(struct sk_buff *skb, 103 + struct iov_iter *from, size_t length); 104 + 100 105 int io_shutdown_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) 101 106 { 102 107 struct io_shutdown *shutdown = io_kiocb_to_cmd(req, struct io_shutdown); ··· 1271 1266 { 1272 1267 struct io_sr_msg *zc = io_kiocb_to_cmd(req, struct io_sr_msg); 1273 1268 struct io_ring_ctx *ctx = req->ctx; 1269 + struct io_async_msghdr *iomsg; 1274 1270 struct io_kiocb *notif; 1275 1271 int ret; 1276 1272 ··· 1314 1308 if (io_is_compat(req->ctx)) 1315 1309 zc->msg_flags |= MSG_CMSG_COMPAT; 1316 1310 1317 - if (unlikely(!io_msg_alloc_async(req))) 1311 + iomsg = io_msg_alloc_async(req); 1312 + if (unlikely(!iomsg)) 1318 1313 return -ENOMEM; 1314 + 1315 + if (zc->flags & IORING_RECVSEND_FIXED_BUF) 1316 + iomsg->msg.sg_from_iter = io_sg_from_iter; 1317 + else 1318 + iomsg->msg.sg_from_iter = io_sg_from_iter_iovec; 1319 + 1319 1320 if (req->opcode == IORING_OP_SEND_ZC) { 1320 1321 req->flags |= REQ_F_IMPORT_BUFFER; 1321 1322 return io_send_setup(req, sqe); ··· 1333 1320 if (unlikely(ret)) 1334 1321 return ret; 1335 1322 1336 - if (!(zc->flags & IORING_RECVSEND_FIXED_BUF)) { 1337 - struct io_async_msghdr *iomsg = req->async_data; 1338 - 1323 + if (!(zc->flags & IORING_RECVSEND_FIXED_BUF)) 1339 1324 return io_notif_account_mem(zc->notif, iomsg->msg.msg_iter.count); 1340 - } 1341 1325 return 0; 1342 1326 } 1343 1327 ··· 1401 1391 ITER_SOURCE, issue_flags); 1402 1392 if (unlikely(ret)) 1403 1393 return ret; 1404 - kmsg->msg.sg_from_iter = io_sg_from_iter; 1405 1394 } else { 1406 1395 ret = import_ubuf(ITER_SOURCE, sr->buf, sr->len, &kmsg->msg.msg_iter); 1407 1396 if (unlikely(ret)) ··· 1408 1399 ret = io_notif_account_mem(sr->notif, sr->len); 1409 1400 if (unlikely(ret)) 1410 1401 return ret; 1411 - kmsg->msg.sg_from_iter = io_sg_from_iter_iovec; 1412 1402 } 1413 1403 1414 1404 return ret; ··· 1491 1483 unsigned flags; 1492 1484 int ret, min_ret = 0; 1493 1485 1494 - kmsg->msg.sg_from_iter = io_sg_from_iter_iovec; 1495 - 1496 1486 if (req->flags & REQ_F_IMPORT_BUFFER) { 1497 1487 unsigned uvec_segs = kmsg->msg.msg_iter.nr_segs; 1498 1488 int ret; ··· 1499 1493 &kmsg->vec, uvec_segs, issue_flags); 1500 1494 if (unlikely(ret)) 1501 1495 return ret; 1502 - kmsg->msg.sg_from_iter = io_sg_from_iter; 1503 1496 req->flags &= ~REQ_F_IMPORT_BUFFER; 1504 1497 } 1505 1498