Skip to content

Commit 566a424

Browse files
committed
io_uring/net: use ITER_UBUF for single segment send maps
Just like what is being done on the recv side, if we only map a single segment, then use ITER_UBUF for mapping it. That's more efficient than using an ITER_IOVEC. Signed-off-by: Jens Axboe <[email protected]>
1 parent 03e02e8 commit 566a424

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

io_uring/net.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -618,14 +618,23 @@ int io_send(struct io_kiocb *req, unsigned int issue_flags)
618618
if (unlikely(ret < 0))
619619
return ret;
620620

621-
sr->len = arg.out_len;
622-
iov_iter_init(&kmsg->msg.msg_iter, ITER_SOURCE, arg.iovs, ret,
623-
arg.out_len);
624621
if (arg.iovs != &kmsg->fast_iov && arg.iovs != kmsg->free_iov) {
625622
kmsg->free_iov_nr = ret;
626623
kmsg->free_iov = arg.iovs;
627624
req->flags |= REQ_F_NEED_CLEANUP;
628625
}
626+
sr->len = arg.out_len;
627+
628+
if (ret == 1) {
629+
sr->buf = arg.iovs[0].iov_base;
630+
ret = import_ubuf(ITER_SOURCE, sr->buf, sr->len,
631+
&kmsg->msg.msg_iter);
632+
if (unlikely(ret))
633+
return ret;
634+
} else {
635+
iov_iter_init(&kmsg->msg.msg_iter, ITER_SOURCE,
636+
arg.iovs, ret, arg.out_len);
637+
}
629638
}
630639

631640
/*

0 commit comments

Comments
 (0)