Merge tag 'xfs-5.13-merge-3' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
[linux-2.6-microblaze.git] / net / rxrpc / recvmsg.c
index fef3573..eca6dda 100644 (file)
@@ -669,6 +669,7 @@ wait_error:
  * @sock: The socket that the call exists on
  * @call: The call to send data through
  * @iter: The buffer to receive into
+ * @_len: The amount of data we want to receive (decreased on return)
  * @want_more: True if more data is expected to be read
  * @_abort: Where the abort code is stored if -ECONNABORTED is returned
  * @_service: Where to store the actual service ID (may be upgraded)
@@ -684,7 +685,7 @@ wait_error:
  * *_abort should also be initialised to 0.
  */
 int rxrpc_kernel_recv_data(struct socket *sock, struct rxrpc_call *call,
-                          struct iov_iter *iter,
+                          struct iov_iter *iter, size_t *_len,
                           bool want_more, u32 *_abort, u16 *_service)
 {
        size_t offset = 0;
@@ -692,7 +693,7 @@ int rxrpc_kernel_recv_data(struct socket *sock, struct rxrpc_call *call,
 
        _enter("{%d,%s},%zu,%d",
               call->debug_id, rxrpc_call_states[call->state],
-              iov_iter_count(iter), want_more);
+              *_len, want_more);
 
        ASSERTCMP(call->state, !=, RXRPC_CALL_SERVER_SECURING);
 
@@ -703,8 +704,8 @@ int rxrpc_kernel_recv_data(struct socket *sock, struct rxrpc_call *call,
        case RXRPC_CALL_SERVER_RECV_REQUEST:
        case RXRPC_CALL_SERVER_ACK_REQUEST:
                ret = rxrpc_recvmsg_data(sock, call, NULL, iter,
-                                        iov_iter_count(iter), 0,
-                                        &offset);
+                                        *_len, 0, &offset);
+               *_len -= offset;
                if (ret < 0)
                        goto out;