(*) End a client call.
 
-       void rxrpc_kernel_end_call(struct rxrpc_call *call);
+       void rxrpc_kernel_end_call(struct socket *sock,
+                                  struct rxrpc_call *call);
 
      This is used to end a previously begun call.  The user_call_ID is expunged
      from AF_RXRPC's knowledge and will not be seen again in association with
 
  (*) Send data through a call.
 
-       int rxrpc_kernel_send_data(struct rxrpc_call *call, struct msghdr *msg,
+       int rxrpc_kernel_send_data(struct socket *sock,
+                                  struct rxrpc_call *call,
+                                  struct msghdr *msg,
                                   size_t len);
 
      This is used to supply either the request part of a client call or the
 
  (*) Abort a call.
 
-       void rxrpc_kernel_abort_call(struct rxrpc_call *call, u32 abort_code);
+       void rxrpc_kernel_abort_call(struct socket *sock,
+                                    struct rxrpc_call *call,
+                                    u32 abort_code);
 
      This is used to abort a call if it's still in an abortable state.  The
      abort code specified will be placed in the ABORT message sent.
 
 static void afs_end_call_nofree(struct afs_call *call)
 {
        if (call->rxcall) {
-               rxrpc_kernel_end_call(call->rxcall);
+               rxrpc_kernel_end_call(afs_socket, call->rxcall);
                call->rxcall = NULL;
        }
        if (call->type->destructor)
                         * returns from sending the request */
                        if (first + loop >= last)
                                call->state = AFS_CALL_AWAIT_REPLY;
-                       ret = rxrpc_kernel_send_data(call->rxcall, msg,
-                                                    to - offset);
+                       ret = rxrpc_kernel_send_data(afs_socket, call->rxcall,
+                                                    msg, to - offset);
                        kunmap(pages[loop]);
                        if (ret < 0)
                                break;
         * request */
        if (!call->send_pages)
                call->state = AFS_CALL_AWAIT_REPLY;
-       ret = rxrpc_kernel_send_data(rxcall, &msg, call->request_size);
+       ret = rxrpc_kernel_send_data(afs_socket, rxcall,
+                                    &msg, call->request_size);
        if (ret < 0)
                goto error_do_abort;
 
        return wait_mode->wait(call);
 
 error_do_abort:
-       rxrpc_kernel_abort_call(rxcall, RX_USER_ABORT);
+       rxrpc_kernel_abort_call(afs_socket, rxcall, RX_USER_ABORT);
        while ((skb = skb_dequeue(&call->rx_queue)))
                afs_free_skb(skb);
 error_kill_call:
                                if (call->state != AFS_CALL_AWAIT_REPLY)
                                        abort_code = RXGEN_SS_UNMARSHAL;
                        do_abort:
-                               rxrpc_kernel_abort_call(call->rxcall,
+                               rxrpc_kernel_abort_call(afs_socket,
+                                                       call->rxcall,
                                                        abort_code);
                                call->error = ret;
                                call->state = AFS_CALL_ERROR;
        /* kill the call */
        if (call->state < AFS_CALL_COMPLETE) {
                _debug("call incomplete");
-               rxrpc_kernel_abort_call(call->rxcall, RX_CALL_DEAD);
+               rxrpc_kernel_abort_call(afs_socket, call->rxcall, RX_CALL_DEAD);
                while ((skb = skb_dequeue(&call->rx_queue)))
                        afs_free_skb(skb);
        }
        msg.msg_flags           = 0;
 
        call->state = AFS_CALL_AWAIT_ACK;
-       switch (rxrpc_kernel_send_data(call->rxcall, &msg, 0)) {
+       switch (rxrpc_kernel_send_data(afs_socket, call->rxcall, &msg, 0)) {
        case 0:
                _leave(" [replied]");
                return;
 
        case -ENOMEM:
                _debug("oom");
-               rxrpc_kernel_abort_call(call->rxcall, RX_USER_ABORT);
+               rxrpc_kernel_abort_call(afs_socket, call->rxcall,
+                                       RX_USER_ABORT);
        default:
                afs_end_call(call);
                _leave(" [error]");
        msg.msg_flags           = 0;
 
        call->state = AFS_CALL_AWAIT_ACK;
-       n = rxrpc_kernel_send_data(call->rxcall, &msg, len);
+       n = rxrpc_kernel_send_data(afs_socket, call->rxcall, &msg, len);
        if (n >= 0) {
                /* Success */
                _leave(" [replied]");
 
        if (n == -ENOMEM) {
                _debug("oom");
-               rxrpc_kernel_abort_call(call->rxcall, RX_USER_ABORT);
+               rxrpc_kernel_abort_call(afs_socket, call->rxcall,
+                                       RX_USER_ABORT);
        }
        afs_end_call(call);
        _leave(" [error]");
 
 #include <linux/skbuff.h>
 #include <linux/rxrpc.h>
 
+struct key;
+struct sock;
+struct socket;
 struct rxrpc_call;
 
 /*
                                           struct key *,
                                           unsigned long,
                                           gfp_t);
-int rxrpc_kernel_send_data(struct rxrpc_call *, struct msghdr *, size_t);
+int rxrpc_kernel_send_data(struct socket *, struct rxrpc_call *,
+                          struct msghdr *, size_t);
 void rxrpc_kernel_data_consumed(struct rxrpc_call *, struct sk_buff *);
-void rxrpc_kernel_abort_call(struct rxrpc_call *, u32);
-void rxrpc_kernel_end_call(struct rxrpc_call *);
+void rxrpc_kernel_abort_call(struct socket *, struct rxrpc_call *, u32);
+void rxrpc_kernel_end_call(struct socket *, struct rxrpc_call *);
 bool rxrpc_kernel_is_data_last(struct sk_buff *);
 u32 rxrpc_kernel_get_abort_code(struct sk_buff *);
 int rxrpc_kernel_get_error_number(struct sk_buff *);
 
 
 /**
  * rxrpc_kernel_end_call - Allow a kernel service to end a call it was using
+ * @sock: The socket the call is on
  * @call: The call to end
  *
  * Allow a kernel service to end a call it was using.  The call must be
  * complete before this is called (the call should be aborted if necessary).
  */
-void rxrpc_kernel_end_call(struct rxrpc_call *call)
+void rxrpc_kernel_end_call(struct socket *sock, struct rxrpc_call *call)
 {
        _enter("%d{%d}", call->debug_id, atomic_read(&call->usage));
-       rxrpc_remove_user_ID(call->socket, call);
+       rxrpc_remove_user_ID(rxrpc_sk(sock->sk), call);
        rxrpc_put_call(call);
 }
 EXPORT_SYMBOL(rxrpc_kernel_end_call);
 
 
 /**
  * rxrpc_kernel_send_data - Allow a kernel service to send data on a call
+ * @sock: The socket the call is on
  * @call: The call to send data through
  * @msg: The data to send
  * @len: The amount of data to send
  * nor should an address be supplied.  MSG_MORE should be flagged if there's
  * more data to come, otherwise this data will end the transmission phase.
  */
-int rxrpc_kernel_send_data(struct rxrpc_call *call, struct msghdr *msg,
-                          size_t len)
+int rxrpc_kernel_send_data(struct socket *sock, struct rxrpc_call *call,
+                          struct msghdr *msg, size_t len)
 {
        int ret;
 
        ASSERTCMP(msg->msg_name, ==, NULL);
        ASSERTCMP(msg->msg_control, ==, NULL);
 
-       lock_sock(&call->socket->sk);
+       lock_sock(sock->sk);
 
        _debug("CALL %d USR %lx ST %d on CONN %p",
               call->debug_id, call->user_call_ID, call->state, call->conn);
                   call->state != RXRPC_CALL_SERVER_SEND_REPLY) {
                ret = -EPROTO; /* request phase complete for this client call */
        } else {
-               ret = rxrpc_send_data(call->socket, call, msg, len);
+               ret = rxrpc_send_data(rxrpc_sk(sock->sk), call, msg, len);
        }
 
-       release_sock(&call->socket->sk);
+       release_sock(sock->sk);
        _leave(" = %d", ret);
        return ret;
 }
-
 EXPORT_SYMBOL(rxrpc_kernel_send_data);
 
 /**
  * rxrpc_kernel_abort_call - Allow a kernel service to abort a call
+ * @sock: The socket the call is on
  * @call: The call to be aborted
  * @abort_code: The abort code to stick into the ABORT packet
  *
  * Allow a kernel service to abort a call, if it's still in an abortable state.
  */
-void rxrpc_kernel_abort_call(struct rxrpc_call *call, u32 abort_code)
+void rxrpc_kernel_abort_call(struct socket *sock, struct rxrpc_call *call,
+                            u32 abort_code)
 {
        _enter("{%d},%d", call->debug_id, abort_code);
 
-       lock_sock(&call->socket->sk);
+       lock_sock(sock->sk);
 
        _debug("CALL %d USR %lx ST %d on CONN %p",
               call->debug_id, call->user_call_ID, call->state, call->conn);
 
        rxrpc_send_abort(call, abort_code);
 
-       release_sock(&call->socket->sk);
+       release_sock(sock->sk);
        _leave("");
 }