When setting up a new transport instance, allocate enough memory for an
rpc_xprt and a private area.  As part of the same memory allocation, it
will be easy to find one, given a pointer to the other.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
 }
 #endif
 
+struct sock_xprt {
+       struct rpc_xprt         xprt;
+};
+
 static void xs_format_peer_addresses(struct rpc_xprt *xprt)
 {
        struct sockaddr_in *addr = (struct sockaddr_in *) &xprt->addr;
 static struct rpc_xprt *xs_setup_xprt(struct sockaddr *addr, size_t addrlen, unsigned int slot_table_size)
 {
        struct rpc_xprt *xprt;
+       struct sock_xprt *new;
 
        if (addrlen > sizeof(xprt->addr)) {
                dprintk("RPC:      xs_setup_xprt: address too large\n");
                return ERR_PTR(-EBADF);
        }
 
-       xprt = kzalloc(sizeof(struct rpc_xprt), GFP_KERNEL);
-       if (xprt == NULL) {
+       new = kzalloc(sizeof(*new), GFP_KERNEL);
+       if (new == NULL) {
                dprintk("RPC:      xs_setup_xprt: couldn't allocate rpc_xprt\n");
                return ERR_PTR(-ENOMEM);
        }
+       xprt = &new->xprt;
 
        xprt->max_reqs = slot_table_size;
        xprt->slot = kcalloc(xprt->max_reqs, sizeof(struct rpc_rqst), GFP_KERNEL);