unsigned long, gfp_t);
 struct rxrpc_call *rxrpc_incoming_call(struct rxrpc_sock *,
                                       struct rxrpc_connection *,
-                                      struct rxrpc_host_header *);
+                                      struct sk_buff *);
 void rxrpc_release_call(struct rxrpc_call *);
 void rxrpc_release_calls_on_socket(struct rxrpc_sock *);
 void __rxrpc_put_call(struct rxrpc_call *);
 void rxrpc_put_connection(struct rxrpc_connection *);
 void __exit rxrpc_destroy_all_connections(void);
 struct rxrpc_connection *rxrpc_find_connection(struct rxrpc_transport *,
-                                              struct rxrpc_host_header *);
+                                              struct sk_buff *);
 extern struct rxrpc_connection *
-rxrpc_incoming_connection(struct rxrpc_transport *, struct rxrpc_host_header *);
+rxrpc_incoming_connection(struct rxrpc_transport *, struct sk_buff *);
 
 static inline bool rxrpc_conn_is_client(const struct rxrpc_connection *conn)
 {
 
                goto error;
        }
 
-       conn = rxrpc_incoming_connection(trans, &sp->hdr);
+       conn = rxrpc_incoming_connection(trans, skb);
        rxrpc_put_transport(trans);
        if (IS_ERR(conn)) {
                _debug("no conn");
                goto error;
        }
 
-       call = rxrpc_incoming_call(rx, conn, &sp->hdr);
+       call = rxrpc_incoming_call(rx, conn, skb);
        rxrpc_put_connection(conn);
        if (IS_ERR(call)) {
                _debug("no call");
 
  */
 struct rxrpc_call *rxrpc_incoming_call(struct rxrpc_sock *rx,
                                       struct rxrpc_connection *conn,
-                                      struct rxrpc_host_header *hdr)
+                                      struct sk_buff *skb)
 {
+       struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
        struct rxrpc_call *call, *candidate;
        struct rb_node **p, *parent;
        u32 call_id;
        if (!candidate)
                return ERR_PTR(-EBUSY);
 
-       candidate->socket = rx;
-       candidate->conn = conn;
-       candidate->cid = hdr->cid;
-       candidate->call_id = hdr->callNumber;
-       candidate->channel = hdr->cid & RXRPC_CHANNELMASK;
-       candidate->rx_data_post = 0;
-       candidate->state = RXRPC_CALL_SERVER_ACCEPTING;
+       candidate->socket       = rx;
+       candidate->conn         = conn;
+       candidate->cid          = sp->hdr.cid;
+       candidate->call_id      = sp->hdr.callNumber;
+       candidate->channel      = sp->hdr.cid & RXRPC_CHANNELMASK;
+       candidate->rx_data_post = 0;
+       candidate->state        = RXRPC_CALL_SERVER_ACCEPTING;
        if (conn->security_ix > 0)
                candidate->state = RXRPC_CALL_SERVER_SECURING;
 
        /* set the channel for this call */
        call = conn->channels[candidate->channel];
        _debug("channel[%u] is %p", candidate->channel, call);
-       if (call && call->call_id == hdr->callNumber) {
+       if (call && call->call_id == sp->hdr.callNumber) {
                /* already set; must've been a duplicate packet */
                _debug("extant call [%d]", call->state);
                ASSERTCMP(call->conn, ==, conn);
 
        /* check the call number isn't duplicate */
        _debug("check dup");
-       call_id = hdr->callNumber;
+       call_id = sp->hdr.callNumber;
        p = &conn->calls.rb_node;
        parent = NULL;
        while (*p) {
 
  * get a record of an incoming connection
  */
 struct rxrpc_connection *
-rxrpc_incoming_connection(struct rxrpc_transport *trans,
-                         struct rxrpc_host_header *hdr)
+rxrpc_incoming_connection(struct rxrpc_transport *trans, struct sk_buff *skb)
 {
        struct rxrpc_connection *conn, *candidate = NULL;
+       struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
        struct rb_node *p, **pp;
        const char *new = "old";
        __be32 epoch;
 
        _enter("");
 
-       ASSERT(hdr->flags & RXRPC_CLIENT_INITIATED);
+       ASSERT(sp->hdr.flags & RXRPC_CLIENT_INITIATED);
 
-       epoch = hdr->epoch;
-       cid = hdr->cid & RXRPC_CIDMASK;
+       epoch = sp->hdr.epoch;
+       cid = sp->hdr.cid & RXRPC_CIDMASK;
 
        /* search the connection list first */
        read_lock_bh(&trans->conn_lock);
                return ERR_PTR(-ENOMEM);
        }
 
-       candidate->trans = trans;
-       candidate->proto.local = trans->local;
-       candidate->proto.epoch = hdr->epoch;
-       candidate->proto.cid = hdr->cid & RXRPC_CIDMASK;
-       candidate->proto.in_clientflag = RXRPC_CLIENT_INITIATED;
-       candidate->params.local = trans->local;
-       candidate->params.peer = trans->peer;
-       candidate->params.service_id = hdr->serviceId;
-       candidate->security_ix = hdr->securityIndex;
-       candidate->out_clientflag = 0;
-       candidate->state = RXRPC_CONN_SERVER;
+       candidate->trans                = trans;
+       candidate->proto.local          = trans->local;
+       candidate->proto.epoch          = sp->hdr.epoch;
+       candidate->proto.cid            = sp->hdr.cid & RXRPC_CIDMASK;
+       candidate->proto.in_clientflag  = RXRPC_CLIENT_INITIATED;
+       candidate->params.local         = trans->local;
+       candidate->params.peer          = trans->peer;
+       candidate->params.service_id    = sp->hdr.serviceId;
+       candidate->security_ix          = sp->hdr.securityIndex;
+       candidate->out_clientflag       = 0;
+       candidate->state                = RXRPC_CONN_SERVER;
        if (candidate->params.service_id)
-               candidate->state = RXRPC_CONN_SERVER_UNSECURED;
+               candidate->state        = RXRPC_CONN_SERVER_UNSECURED;
 
        write_lock_bh(&trans->conn_lock);
 
 
        /* we found the connection in the list immediately */
 found_extant_connection:
-       if (hdr->securityIndex != conn->security_ix) {
+       if (sp->hdr.securityIndex != conn->security_ix) {
                read_unlock_bh(&trans->conn_lock);
                goto security_mismatch;
        }
 
        /* we found the connection on the second time through the list */
 found_extant_second:
-       if (hdr->securityIndex != conn->security_ix) {
+       if (sp->hdr.securityIndex != conn->security_ix) {
                write_unlock_bh(&trans->conn_lock);
                goto security_mismatch;
        }
  * packet
  */
 struct rxrpc_connection *rxrpc_find_connection(struct rxrpc_transport *trans,
-                                              struct rxrpc_host_header *hdr)
+                                              struct sk_buff *skb)
 {
        struct rxrpc_connection *conn;
+       struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
        struct rb_node *p;
        u32 epoch, cid;
 
-       _enter(",{%x,%x}", hdr->cid, hdr->flags);
+       _enter(",{%x,%x}", sp->hdr.cid, sp->hdr.flags);
 
        read_lock_bh(&trans->conn_lock);
 
-       cid = hdr->cid & RXRPC_CIDMASK;
-       epoch = hdr->epoch;
+       cid     = sp->hdr.cid & RXRPC_CIDMASK;
+       epoch   = sp->hdr.epoch;
 
-       if (hdr->flags & RXRPC_CLIENT_INITIATED)
+       if (sp->hdr.flags & RXRPC_CLIENT_INITIATED)
                p = trans->server_conns.rb_node;
        else
                p = trans->client_conns.rb_node;
 
 }
 
 static struct rxrpc_connection *rxrpc_conn_from_local(struct rxrpc_local *local,
-                                              struct sk_buff *skb,
-                                              struct rxrpc_skb_priv *sp)
+                                                     struct sk_buff *skb)
 {
        struct rxrpc_peer *peer;
        struct rxrpc_transport *trans;
        if (!trans)
                goto cant_find_conn;
 
-       conn = rxrpc_find_connection(trans, &sp->hdr);
+       conn = rxrpc_find_connection(trans, skb);
        rxrpc_put_transport(trans);
        if (!conn)
                goto cant_find_conn;
                 * old-fashioned way doesn't really hurt */
                struct rxrpc_connection *conn;
 
-               conn = rxrpc_conn_from_local(local, skb, sp);
+               conn = rxrpc_conn_from_local(local, skb);
                if (!conn)
                        goto cant_route_call;