diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2014-11-27 19:52:04 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-02-04 01:34:14 -0500 |
commit | 4c946d9c11d173c2ea6b9081b248f8072e6b46f1 (patch) | |
tree | fdc6745510908db16f14923ffcddf6b7a07a3194 | |
parent | c3c1a7dbe24282ab8999cb8c964dc6371cde3ea3 (diff) |
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: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | drivers/misc/vmw_vmci/vmci_queue_pair.c | 16 | ||||
-rw-r--r-- | include/linux/vmw_vmci_api.h | 2 | ||||
-rw-r--r-- | net/vmw_vsock/vmci_transport.c | 3 |
3 files changed, 10 insertions, 11 deletions
diff --git a/drivers/misc/vmw_vmci/vmci_queue_pair.c b/drivers/misc/vmw_vmci/vmci_queue_pair.c index 7aaaf51e1596..35f19a683822 100644 --- a/drivers/misc/vmw_vmci/vmci_queue_pair.c +++ b/drivers/misc/vmw_vmci/vmci_queue_pair.c | |||
@@ -370,12 +370,12 @@ static int __qp_memcpy_to_queue(struct vmci_queue *queue, | |||
370 | to_copy = size - bytes_copied; | 370 | to_copy = size - bytes_copied; |
371 | 371 | ||
372 | if (is_iovec) { | 372 | if (is_iovec) { |
373 | struct iovec *iov = (struct iovec *)src; | 373 | struct msghdr *msg = (struct msghdr *)src; |
374 | int err; | 374 | int err; |
375 | 375 | ||
376 | /* The iovec will track bytes_copied internally. */ | 376 | /* The iovec will track bytes_copied internally. */ |
377 | err = memcpy_fromiovec((u8 *)va + page_offset, | 377 | err = memcpy_from_msg((u8 *)va + page_offset, |
378 | iov, to_copy); | 378 | msg, to_copy); |
379 | if (err != 0) { | 379 | if (err != 0) { |
380 | if (kernel_if->host) | 380 | if (kernel_if->host) |
381 | kunmap(kernel_if->u.h.page[page_index]); | 381 | kunmap(kernel_if->u.h.page[page_index]); |
@@ -580,7 +580,7 @@ static int qp_memcpy_from_queue(void *dest, | |||
580 | */ | 580 | */ |
581 | static int qp_memcpy_to_queue_iov(struct vmci_queue *queue, | 581 | static int qp_memcpy_to_queue_iov(struct vmci_queue *queue, |
582 | u64 queue_offset, | 582 | u64 queue_offset, |
583 | const void *src, | 583 | const void *msg, |
584 | size_t src_offset, size_t size) | 584 | size_t src_offset, size_t size) |
585 | { | 585 | { |
586 | 586 | ||
@@ -588,7 +588,7 @@ static int qp_memcpy_to_queue_iov(struct vmci_queue *queue, | |||
588 | * We ignore src_offset because src is really a struct iovec * and will | 588 | * We ignore src_offset because src is really a struct iovec * and will |
589 | * maintain offset internally. | 589 | * maintain offset internally. |
590 | */ | 590 | */ |
591 | return __qp_memcpy_to_queue(queue, queue_offset, src, size, true); | 591 | return __qp_memcpy_to_queue(queue, queue_offset, msg, size, true); |
592 | } | 592 | } |
593 | 593 | ||
594 | /* | 594 | /* |
@@ -3223,13 +3223,13 @@ EXPORT_SYMBOL_GPL(vmci_qpair_peek); | |||
3223 | * of bytes enqueued or < 0 on error. | 3223 | * of bytes enqueued or < 0 on error. |
3224 | */ | 3224 | */ |
3225 | ssize_t vmci_qpair_enquev(struct vmci_qp *qpair, | 3225 | ssize_t vmci_qpair_enquev(struct vmci_qp *qpair, |
3226 | void *iov, | 3226 | struct msghdr *msg, |
3227 | size_t iov_size, | 3227 | size_t iov_size, |
3228 | int buf_type) | 3228 | int buf_type) |
3229 | { | 3229 | { |
3230 | ssize_t result; | 3230 | ssize_t result; |
3231 | 3231 | ||
3232 | if (!qpair || !iov) | 3232 | if (!qpair) |
3233 | return VMCI_ERROR_INVALID_ARGS; | 3233 | return VMCI_ERROR_INVALID_ARGS; |
3234 | 3234 | ||
3235 | qp_lock(qpair); | 3235 | qp_lock(qpair); |
@@ -3238,7 +3238,7 @@ ssize_t vmci_qpair_enquev(struct vmci_qp *qpair, | |||
3238 | result = qp_enqueue_locked(qpair->produce_q, | 3238 | result = qp_enqueue_locked(qpair->produce_q, |
3239 | qpair->consume_q, | 3239 | qpair->consume_q, |
3240 | qpair->produce_q_size, | 3240 | qpair->produce_q_size, |
3241 | iov, iov_size, | 3241 | msg, iov_size, |
3242 | qp_memcpy_to_queue_iov); | 3242 | qp_memcpy_to_queue_iov); |
3243 | 3243 | ||
3244 | if (result == VMCI_ERROR_QUEUEPAIR_NOT_READY && | 3244 | if (result == VMCI_ERROR_QUEUEPAIR_NOT_READY && |
diff --git a/include/linux/vmw_vmci_api.h b/include/linux/vmw_vmci_api.h index 5691f752ce8f..63df3a2a8ce5 100644 --- a/include/linux/vmw_vmci_api.h +++ b/include/linux/vmw_vmci_api.h | |||
@@ -74,7 +74,7 @@ ssize_t vmci_qpair_dequeue(struct vmci_qp *qpair, | |||
74 | ssize_t vmci_qpair_peek(struct vmci_qp *qpair, void *buf, size_t buf_size, | 74 | ssize_t vmci_qpair_peek(struct vmci_qp *qpair, void *buf, size_t buf_size, |
75 | int mode); | 75 | int mode); |
76 | ssize_t vmci_qpair_enquev(struct vmci_qp *qpair, | 76 | ssize_t vmci_qpair_enquev(struct vmci_qp *qpair, |
77 | void *iov, size_t iov_size, int mode); | 77 | struct msghdr *msg, size_t iov_size, int mode); |
78 | ssize_t vmci_qpair_dequev(struct vmci_qp *qpair, | 78 | ssize_t vmci_qpair_dequev(struct vmci_qp *qpair, |
79 | struct msghdr *msg, size_t iov_size, int mode); | 79 | struct msghdr *msg, size_t iov_size, int mode); |
80 | ssize_t vmci_qpair_peekv(struct vmci_qp *qpair, struct msghdr *msg, size_t iov_size, | 80 | ssize_t vmci_qpair_peekv(struct vmci_qp *qpair, struct msghdr *msg, size_t iov_size, |
diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c index 02d2e5229240..7f3255084a6c 100644 --- a/net/vmw_vsock/vmci_transport.c +++ b/net/vmw_vsock/vmci_transport.c | |||
@@ -1850,8 +1850,7 @@ static ssize_t vmci_transport_stream_enqueue( | |||
1850 | struct msghdr *msg, | 1850 | struct msghdr *msg, |
1851 | size_t len) | 1851 | size_t len) |
1852 | { | 1852 | { |
1853 | /* XXX: stripping const */ | 1853 | return vmci_qpair_enquev(vmci_trans(vsk)->qpair, msg, len, 0); |
1854 | return vmci_qpair_enquev(vmci_trans(vsk)->qpair, (struct iovec *)msg->msg_iter.iov, len, 0); | ||
1855 | } | 1854 | } |
1856 | 1855 | ||
1857 | static s64 vmci_transport_stream_has_data(struct vsock_sock *vsk) | 1856 | static s64 vmci_transport_stream_has_data(struct vsock_sock *vsk) |