Lines Matching refs:kmsg

160 static void io_netmsg_iovec_free(struct io_async_msghdr *kmsg)
162 if (kmsg->vec.iovec)
163 io_vec_free(&kmsg->vec);
201 struct io_async_msghdr *kmsg)
352 struct io_async_msghdr *kmsg = req->async_data;
362 kmsg->msg.msg_name = NULL;
363 kmsg->msg.msg_namelen = 0;
364 kmsg->msg.msg_control = NULL;
365 kmsg->msg.msg_controllen = 0;
366 kmsg->msg.msg_ubuf = NULL;
371 ret = move_addr_to_kernel(addr, addr_len, &kmsg->addr);
374 kmsg->msg.msg_name = &kmsg->addr;
375 kmsg->msg.msg_namelen = addr_len;
385 return io_net_import_vec(req, kmsg, sr->buf, sr->len, ITER_SOURCE);
387 return import_ubuf(ITER_SOURCE, sr->buf, sr->len, &kmsg->msg.msg_iter);
393 struct io_async_msghdr *kmsg = req->async_data;
398 ret = io_msg_copy_hdr(req, kmsg, &msg, ITER_SOURCE, NULL);
402 sr->msg_control = kmsg->msg.msg_control_user;
405 kmsg->msg.msg_iter.nr_segs = msg.msg_iovlen;
406 return io_prep_reg_iovec(req, &kmsg->vec, msg.msg_iov,
411 return io_net_import_vec(req, kmsg, msg.msg_iov, msg.msg_iovlen, ITER_SOURCE);
463 static int io_bundle_nbufs(struct io_async_msghdr *kmsg, int ret)
471 if (iter_is_ubuf(&kmsg->msg.msg_iter))
474 iov = kmsg->vec.iovec;
476 iov = &kmsg->fast_iov;
479 if (!iov_iter_count(&kmsg->msg.msg_iter))
480 return iter_iov(&kmsg->msg.msg_iter) - iov;
495 struct io_async_msghdr *kmsg, int len)
499 io_kbuf_commit(req, bl, len, io_bundle_nbufs(kmsg, len));
504 struct io_async_msghdr *kmsg,
516 cflags = io_put_kbufs(req, sel->val, sel->buf_list, io_bundle_nbufs(kmsg, sel->val));
530 io_mshot_prep_retry(req, kmsg);
544 struct io_async_msghdr *kmsg = req->async_data;
562 min_ret = iov_iter_count(&kmsg->msg.msg_iter);
564 kmsg->msg.msg_control_user = sr->msg_control;
566 ret = __sys_sendmsg_sock(sock, &kmsg->msg, flags);
572 kmsg->msg.msg_controllen = 0;
573 kmsg->msg.msg_control = NULL;
591 struct io_br_sel *sel, struct io_async_msghdr *kmsg)
595 .iovs = &kmsg->fast_iov,
602 if (kmsg->vec.iovec) {
603 arg.nr_iovs = kmsg->vec.nr;
604 arg.iovs = kmsg->vec.iovec;
617 if (arg.iovs != &kmsg->fast_iov && arg.iovs != kmsg->vec.iovec) {
618 kmsg->vec.nr = ret;
619 kmsg->vec.iovec = arg.iovs;
627 &kmsg->msg.msg_iter);
631 iov_iter_init(&kmsg->msg.msg_iter, ITER_SOURCE,
641 struct io_async_msghdr *kmsg = req->async_data;
663 ret = io_send_select_buffer(req, issue_flags, &sel, kmsg);
674 min_ret = iov_iter_count(&kmsg->msg.msg_iter);
677 kmsg->msg.msg_flags = flags;
678 ret = sock_sendmsg(sock, &kmsg->msg);
687 return io_net_kbuf_recyle(req, sel.buf_list, kmsg, ret);
699 if (!io_send_finish(req, kmsg, &sel))
753 struct io_async_msghdr *kmsg;
755 kmsg = io_msg_alloc_async(req);
756 if (unlikely(!kmsg))
760 kmsg->msg.msg_name = NULL;
761 kmsg->msg.msg_namelen = 0;
762 kmsg->msg.msg_inq = 0;
763 kmsg->msg.msg_control = NULL;
764 kmsg->msg.msg_get_inq = 1;
765 kmsg->msg.msg_controllen = 0;
766 kmsg->msg.msg_iocb = NULL;
767 kmsg->msg.msg_ubuf = NULL;
772 &kmsg->msg.msg_iter);
775 return io_recvmsg_copy_hdr(req, kmsg);
843 struct io_async_msghdr *kmsg,
850 if (kmsg->msg.msg_inq > 0)
869 cflags |= io_put_kbufs(req, this_ret, sel->buf_list, io_bundle_nbufs(kmsg, this_ret));
882 kmsg->msg.msg_inq > 1 && this_ret > 0 &&
883 !iov_iter_count(&kmsg->msg.msg_iter)) {
885 sr->len = kmsg->msg.msg_inq;
901 io_mshot_prep_retry(req, kmsg);
903 if (cflags & IORING_CQE_F_SOCK_NONEMPTY || kmsg->msg.msg_inq < 0) {
925 static int io_recvmsg_prep_multishot(struct io_async_msghdr *kmsg,
932 hdr = sizeof(struct io_uring_recvmsg_out) + kmsg->namelen +
933 kmsg->controllen;
937 if (kmsg->controllen) {
938 unsigned long control = ubuf + hdr - kmsg->controllen;
940 kmsg->msg.msg_control_user = (void __user *) control;
941 kmsg->msg.msg_controllen = kmsg->controllen;
946 kmsg->payloadlen = *len = *len - hdr;
956 struct io_async_msghdr *kmsg,
963 if (kmsg->namelen)
964 kmsg->msg.msg_name = &hdr.addr;
965 kmsg->msg.msg_flags = flags & (MSG_CMSG_CLOEXEC|MSG_CMSG_COMPAT);
966 kmsg->msg.msg_namelen = 0;
971 err = sock_recvmsg(sock, &kmsg->msg, flags);
977 .controllen = kmsg->controllen - kmsg->msg.msg_controllen,
978 .flags = kmsg->msg.msg_flags & ~MSG_CMSG_COMPAT
982 if (err > kmsg->payloadlen)
983 err = kmsg->payloadlen;
986 if (kmsg->msg.msg_namelen > kmsg->namelen)
987 copy_len += kmsg->namelen;
989 copy_len += kmsg->msg.msg_namelen;
995 hdr.msg.namelen = kmsg->msg.msg_namelen;
1005 return sizeof(struct io_uring_recvmsg_out) + kmsg->namelen +
1006 kmsg->controllen + err;
1012 struct io_async_msghdr *kmsg = req->async_data;
1042 ret = io_recvmsg_prep_multishot(kmsg, sr, &sel.addr, &len);
1049 iov_iter_ubuf(&kmsg->msg.msg_iter, ITER_DEST, sel.addr, len);
1052 kmsg->msg.msg_get_inq = 1;
1053 kmsg->msg.msg_inq = -1;
1055 ret = io_recvmsg_multishot(sock, sr, kmsg, flags,
1059 if (flags & MSG_WAITALL && !kmsg->msg.msg_controllen)
1060 min_ret = iov_iter_count(&kmsg->msg.msg_iter);
1062 ret = __sys_recvmsg_sock(sock, &kmsg->msg, sr->umsg,
1063 kmsg->uaddr, flags);
1073 return io_net_kbuf_recyle(req, sel.buf_list, kmsg, ret);
1078 } else if ((flags & MSG_WAITALL) && (kmsg->msg.msg_flags & (MSG_TRUNC | MSG_CTRUNC))) {
1090 if (!io_recv_finish(req, kmsg, &sel, mshot_finished, issue_flags))
1096 static int io_recv_buf_select(struct io_kiocb *req, struct io_async_msghdr *kmsg,
1110 .iovs = &kmsg->fast_iov,
1116 if (kmsg->vec.iovec) {
1117 arg.nr_iovs = kmsg->vec.nr;
1118 arg.iovs = kmsg->vec.iovec;
1124 else if (kmsg->msg.msg_inq > 1)
1125 arg.max_len = min_not_zero(sel->val, (ssize_t) kmsg->msg.msg_inq);
1134 if (arg.iovs != &kmsg->fast_iov && arg.iovs != kmsg->vec.iovec) {
1135 kmsg->vec.nr = ret;
1136 kmsg->vec.iovec = arg.iovs;
1148 iov_iter_init(&kmsg->msg.msg_iter, ITER_DEST, arg.iovs, ret,
1160 &kmsg->msg.msg_iter);
1171 struct io_async_msghdr *kmsg = req->async_data;
1195 ret = io_recv_buf_select(req, kmsg, &sel, issue_flags);
1197 kmsg->msg.msg_inq = -1;
1203 kmsg->msg.msg_flags = 0;
1204 kmsg->msg.msg_inq = -1;
1207 min_ret = iov_iter_count(&kmsg->msg.msg_iter);
1209 ret = sock_recvmsg(sock, &kmsg->msg, flags);
1219 return io_net_kbuf_recyle(req, sel.buf_list, kmsg, ret);
1224 } else if ((flags & MSG_WAITALL) && (kmsg->msg.msg_flags & (MSG_TRUNC | MSG_CTRUNC))) {
1238 if (!io_recv_finish(req, kmsg, &sel, mshot_finished, issue_flags))
1445 struct io_async_msghdr *kmsg = req->async_data;
1450 return io_import_reg_buf(sr->notif, &kmsg->msg.msg_iter,
1458 struct io_async_msghdr *kmsg = req->async_data;
1484 min_ret = iov_iter_count(&kmsg->msg.msg_iter);
1487 kmsg->msg.msg_flags = msg_flags;
1488 kmsg->msg.msg_ubuf = &io_notif_to_data(zc->notif)->uarg;
1489 ret = sock_sendmsg(sock, &kmsg->msg);
1495 if (ret > 0 && io_net_retry(sock, kmsg->msg.msg_flags)) {
1525 struct io_async_msghdr *kmsg = req->async_data;
1531 unsigned uvec_segs = kmsg->msg.msg_iter.nr_segs;
1535 ret = io_import_reg_vec(ITER_SOURCE, &kmsg->msg.msg_iter,
1536 sr->notif, &kmsg->vec, uvec_segs,
1557 min_ret = iov_iter_count(&kmsg->msg.msg_iter);
1559 kmsg->msg.msg_control_user = sr->msg_control;
1560 kmsg->msg.msg_ubuf = &io_notif_to_data(sr->notif)->uarg;
1561 ret = __sys_sendmsg_sock(sock, &kmsg->msg, flags);
1904 struct io_async_msghdr *kmsg = (struct io_async_msghdr *) entry;
1906 io_vec_free(&kmsg->vec);
1907 kfree(kmsg);