Commit 4c946d9c authored by Al Viro's avatar Al Viro

vmci: propagate msghdr all way down to __qp_memcpy_to_queue()

Switch from passing msg->iov_iter.iov to passing msg itself
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent c3c1a7db
...@@ -370,12 +370,12 @@ static int __qp_memcpy_to_queue(struct vmci_queue *queue, ...@@ -370,12 +370,12 @@ static int __qp_memcpy_to_queue(struct vmci_queue *queue,
to_copy = size - bytes_copied; to_copy = size - bytes_copied;
if (is_iovec) { if (is_iovec) {
struct iovec *iov = (struct iovec *)src; struct msghdr *msg = (struct msghdr *)src;
int err; int err;
/* The iovec will track bytes_copied internally. */ /* The iovec will track bytes_copied internally. */
err = memcpy_fromiovec((u8 *)va + page_offset, err = memcpy_from_msg((u8 *)va + page_offset,
iov, to_copy); msg, to_copy);
if (err != 0) { if (err != 0) {
if (kernel_if->host) if (kernel_if->host)
kunmap(kernel_if->u.h.page[page_index]); kunmap(kernel_if->u.h.page[page_index]);
...@@ -580,7 +580,7 @@ static int qp_memcpy_from_queue(void *dest, ...@@ -580,7 +580,7 @@ static int qp_memcpy_from_queue(void *dest,
*/ */
static int qp_memcpy_to_queue_iov(struct vmci_queue *queue, static int qp_memcpy_to_queue_iov(struct vmci_queue *queue,
u64 queue_offset, u64 queue_offset,
const void *src, const void *msg,
size_t src_offset, size_t size) size_t src_offset, size_t size)
{ {
...@@ -588,7 +588,7 @@ static int qp_memcpy_to_queue_iov(struct vmci_queue *queue, ...@@ -588,7 +588,7 @@ static int qp_memcpy_to_queue_iov(struct vmci_queue *queue,
* We ignore src_offset because src is really a struct iovec * and will * We ignore src_offset because src is really a struct iovec * and will
* maintain offset internally. * maintain offset internally.
*/ */
return __qp_memcpy_to_queue(queue, queue_offset, src, size, true); return __qp_memcpy_to_queue(queue, queue_offset, msg, size, true);
} }
/* /*
...@@ -3223,13 +3223,13 @@ EXPORT_SYMBOL_GPL(vmci_qpair_peek); ...@@ -3223,13 +3223,13 @@ EXPORT_SYMBOL_GPL(vmci_qpair_peek);
* of bytes enqueued or < 0 on error. * of bytes enqueued or < 0 on error.
*/ */
ssize_t vmci_qpair_enquev(struct vmci_qp *qpair, ssize_t vmci_qpair_enquev(struct vmci_qp *qpair,
void *iov, struct msghdr *msg,
size_t iov_size, size_t iov_size,
int buf_type) int buf_type)
{ {
ssize_t result; ssize_t result;
if (!qpair || !iov) if (!qpair)
return VMCI_ERROR_INVALID_ARGS; return VMCI_ERROR_INVALID_ARGS;
qp_lock(qpair); qp_lock(qpair);
...@@ -3238,7 +3238,7 @@ ssize_t vmci_qpair_enquev(struct vmci_qp *qpair, ...@@ -3238,7 +3238,7 @@ ssize_t vmci_qpair_enquev(struct vmci_qp *qpair,
result = qp_enqueue_locked(qpair->produce_q, result = qp_enqueue_locked(qpair->produce_q,
qpair->consume_q, qpair->consume_q,
qpair->produce_q_size, qpair->produce_q_size,
iov, iov_size, msg, iov_size,
qp_memcpy_to_queue_iov); qp_memcpy_to_queue_iov);
if (result == VMCI_ERROR_QUEUEPAIR_NOT_READY && if (result == VMCI_ERROR_QUEUEPAIR_NOT_READY &&
......
...@@ -74,7 +74,7 @@ ssize_t vmci_qpair_dequeue(struct vmci_qp *qpair, ...@@ -74,7 +74,7 @@ ssize_t vmci_qpair_dequeue(struct vmci_qp *qpair,
ssize_t vmci_qpair_peek(struct vmci_qp *qpair, void *buf, size_t buf_size, ssize_t vmci_qpair_peek(struct vmci_qp *qpair, void *buf, size_t buf_size,
int mode); int mode);
ssize_t vmci_qpair_enquev(struct vmci_qp *qpair, ssize_t vmci_qpair_enquev(struct vmci_qp *qpair,
void *iov, size_t iov_size, int mode); struct msghdr *msg, size_t iov_size, int mode);
ssize_t vmci_qpair_dequev(struct vmci_qp *qpair, ssize_t vmci_qpair_dequev(struct vmci_qp *qpair,
struct msghdr *msg, size_t iov_size, int mode); struct msghdr *msg, size_t iov_size, int mode);
ssize_t vmci_qpair_peekv(struct vmci_qp *qpair, struct msghdr *msg, size_t iov_size, ssize_t vmci_qpair_peekv(struct vmci_qp *qpair, struct msghdr *msg, size_t iov_size,
......
...@@ -1850,8 +1850,7 @@ static ssize_t vmci_transport_stream_enqueue( ...@@ -1850,8 +1850,7 @@ static ssize_t vmci_transport_stream_enqueue(
struct msghdr *msg, struct msghdr *msg,
size_t len) size_t len)
{ {
/* XXX: stripping const */ return vmci_qpair_enquev(vmci_trans(vsk)->qpair, msg, len, 0);
return vmci_qpair_enquev(vmci_trans(vsk)->qpair, (struct iovec *)msg->msg_iter.iov, len, 0);
} }
static s64 vmci_transport_stream_has_data(struct vsock_sock *vsk) static s64 vmci_transport_stream_has_data(struct vsock_sock *vsk)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment