struct svc_deferred_req {
        u32                     prot;   /* protocol (UDP or TCP) */
-       struct sockaddr_in      addr;
-       struct svc_sock         *svsk;  /* where reply must go */
+       struct svc_sock         *svsk;
+       struct sockaddr_storage addr;   /* where reply must go */
+       size_t                  addrlen;
        __be32                  daddr;  /* where reply must come from */
        struct cache_deferred_req handle;
        int                     argslen;
 
 
                dr->handle.owner = rqstp->rq_server;
                dr->prot = rqstp->rq_prot;
-               dr->addr = rqstp->rq_addr;
+               memcpy(&dr->addr, &rqstp->rq_addr, rqstp->rq_addrlen);
+               dr->addrlen = rqstp->rq_addrlen;
                dr->daddr = rqstp->rq_daddr;
                dr->argslen = rqstp->rq_arg.len >> 2;
                memcpy(dr->args, rqstp->rq_arg.head[0].iov_base-skip, dr->argslen<<2);
        rqstp->rq_arg.page_len = 0;
        rqstp->rq_arg.len = dr->argslen<<2;
        rqstp->rq_prot        = dr->prot;
-       rqstp->rq_addr        = dr->addr;
+       memcpy(&rqstp->rq_addr, &dr->addr, dr->addrlen);
+       rqstp->rq_addrlen     = dr->addrlen;
        rqstp->rq_daddr       = dr->daddr;
        rqstp->rq_respages    = rqstp->rq_pages;
        return dr->argslen<<2;