Merge branch 'osd-devel' into nfs-for-next
[pandora-kernel.git] / include / linux / sunrpc / svc.h
index 5e71a30..35b37b1 100644 (file)
@@ -212,11 +212,6 @@ static inline void svc_putu32(struct kvec *iov, __be32 val)
        iov->iov_len += sizeof(__be32);
 }
 
-union svc_addr_u {
-    struct in_addr     addr;
-    struct in6_addr    addr6;
-};
-
 /*
  * The context of a single thread, including the request currently being
  * processed.
@@ -225,8 +220,12 @@ struct svc_rqst {
        struct list_head        rq_list;        /* idle list */
        struct list_head        rq_all;         /* all threads list */
        struct svc_xprt *       rq_xprt;        /* transport ptr */
+
        struct sockaddr_storage rq_addr;        /* peer address */
        size_t                  rq_addrlen;
+       struct sockaddr_storage rq_daddr;       /* dest addr of request
+                                                *  - reply from here */
+       size_t                  rq_daddrlen;
 
        struct svc_serv *       rq_server;      /* RPC service definition */
        struct svc_pool *       rq_pool;        /* thread pool */
@@ -255,9 +254,6 @@ struct svc_rqst {
        unsigned short
                                rq_secure  : 1; /* secure port */
 
-       union svc_addr_u        rq_daddr;       /* dest addr of request
-                                                *  - reply from here */
-
        void *                  rq_argp;        /* decoded arguments */
        void *                  rq_resp;        /* xdr'd results */
        void *                  rq_auth_data;   /* flavor-specific data */
@@ -300,6 +296,21 @@ static inline struct sockaddr *svc_addr(const struct svc_rqst *rqst)
        return (struct sockaddr *) &rqst->rq_addr;
 }
 
+static inline struct sockaddr_in *svc_daddr_in(const struct svc_rqst *rqst)
+{
+       return (struct sockaddr_in *) &rqst->rq_daddr;
+}
+
+static inline struct sockaddr_in6 *svc_daddr_in6(const struct svc_rqst *rqst)
+{
+       return (struct sockaddr_in6 *) &rqst->rq_daddr;
+}
+
+static inline struct sockaddr *svc_daddr(const struct svc_rqst *rqst)
+{
+       return (struct sockaddr *) &rqst->rq_daddr;
+}
+
 /*
  * Check buffer bounds after decoding arguments
  */
@@ -340,7 +351,8 @@ struct svc_deferred_req {
        struct svc_xprt         *xprt;
        struct sockaddr_storage addr;   /* where reply must go */
        size_t                  addrlen;
-       union svc_addr_u        daddr;  /* where reply must come from */
+       struct sockaddr_storage daddr;  /* where reply must come from */
+       size_t                  daddrlen;
        struct cache_deferred_req handle;
        size_t                  xprt_hlen;
        int                     argslen;
@@ -405,7 +417,7 @@ void svc_rpcb_cleanup(struct svc_serv *serv);
 struct svc_serv *svc_create(struct svc_program *, unsigned int,
                            void (*shutdown)(struct svc_serv *));
 struct svc_rqst *svc_prepare_thread(struct svc_serv *serv,
-                                       struct svc_pool *pool);
+                                       struct svc_pool *pool, int node);
 void              svc_exit_thread(struct svc_rqst *);
 struct svc_serv *  svc_create_pooled(struct svc_program *, unsigned int,
                        void (*shutdown)(struct svc_serv *),