]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/linux/sunrpc/svcsock.h
svc: Change sk_inuse to a kref
[linux-2.6-omap-h63xx.git] / include / linux / sunrpc / svcsock.h
index cccea0a0feb48e83923cc10df72cd1b26133f244..ba07d50cb11bdfc3b1843f51b214ba8932bfe81c 100644 (file)
 #define SUNRPC_SVCSOCK_H
 
 #include <linux/sunrpc/svc.h>
+#include <linux/sunrpc/svc_xprt.h>
 
 /*
  * RPC server socket.
  */
 struct svc_sock {
+       struct svc_xprt         sk_xprt;
        struct list_head        sk_ready;       /* list of ready sockets */
        struct list_head        sk_list;        /* list of all sockets */
        struct socket *         sk_sock;        /* berkeley socket layer */
@@ -22,7 +24,6 @@ struct svc_sock {
 
        struct svc_pool *       sk_pool;        /* current pool iff queued */
        struct svc_serv *       sk_server;      /* service for this socket */
-       atomic_t                sk_inuse;       /* use count */
        unsigned long           sk_flags;
 #define        SK_BUSY         0                       /* enqueued/receiving */
 #define        SK_CONN         1                       /* conn pending */
@@ -34,17 +35,16 @@ struct svc_sock {
 #define        SK_DEFERRED     8                       /* request on sk_deferred */
 #define        SK_OLD          9                       /* used for temp socket aging mark+sweep */
 #define        SK_DETACHED     10                      /* detached from tempsocks list */
+#define SK_LISTENER    11                      /* listening endpoint */
 
        atomic_t                sk_reserved;    /* space on outq that is reserved */
 
-       spinlock_t              sk_defer_lock;  /* protects sk_deferred */
+       spinlock_t              sk_lock;        /* protects sk_deferred and
+                                                * sk_info_authunix */
        struct list_head        sk_deferred;    /* deferred requests that need to
                                                 * be revisted */
        struct mutex            sk_mutex;       /* to serialize sending data */
 
-       int                     (*sk_recvfrom)(struct svc_rqst *rqstp);
-       int                     (*sk_sendto)(struct svc_rqst *rqstp);
-
        /* We keep the old state_change and data_ready CB's here */
        void                    (*sk_ostate)(struct sock *);
        void                    (*sk_odata)(struct sock *, int bytes);
@@ -58,6 +58,7 @@ struct svc_sock {
        /* cache of various info for TCP sockets */
        void                    *sk_info_authunix;
 
+       struct sockaddr_storage sk_local;       /* local address */
        struct sockaddr_storage sk_remote;      /* remote peer's address */
        int                     sk_remotelen;   /* length of address */
 };
@@ -65,8 +66,7 @@ struct svc_sock {
 /*
  * Function prototypes.
  */
-int            svc_makesock(struct svc_serv *, int, unsigned short, int flags);
-void           svc_close_socket(struct svc_sock *);
+void           svc_force_close_socket(struct svc_sock *);
 int            svc_recv(struct svc_rqst *, long);
 int            svc_send(struct svc_rqst *);
 void           svc_drop(struct svc_rqst *);
@@ -76,6 +76,8 @@ int           svc_addsock(struct svc_serv *serv,
                            int fd,
                            char *name_return,
                            int *proto);
+void           svc_init_xprt_sock(void);
+void           svc_cleanup_xprt_sock(void);
 
 /*
  * svc_makesock socket characteristics