]> err.no Git - linux-2.6/blobdiff - include/linux/sunrpc/clnt.h
SUNRPC: Add a helper rpc_call_start() that initialises task->tk_action
[linux-2.6] / include / linux / sunrpc / clnt.h
index 66611423c8ee3763a9bcc8390d9ffab9f85cd0a7..c79f2edf032377af67c5b1717621a48dbd9f4b00 100644 (file)
@@ -24,8 +24,10 @@ struct rpc_inode;
  * The high-level client handle
  */
 struct rpc_clnt {
-       atomic_t                cl_count;       /* Number of clones */
-       atomic_t                cl_users;       /* number of references */
+       struct kref             cl_kref;        /* Number of references */
+       struct list_head        cl_clients;     /* Global list of clients */
+       struct list_head        cl_tasks;       /* List of tasks */
+       spinlock_t              cl_lock;        /* spinlock */
        struct rpc_xprt *       cl_xprt;        /* transport */
        struct rpc_procinfo *   cl_procinfo;    /* procedure info */
        u32                     cl_prog,        /* RPC program number */
@@ -41,9 +43,7 @@ struct rpc_clnt {
        unsigned int            cl_softrtry : 1,/* soft timeouts */
                                cl_intr     : 1,/* interruptible */
                                cl_discrtry : 1,/* disconnect before retry */
-                               cl_autobind : 1,/* use getport() */
-                               cl_oneshot  : 1,/* dispose after use */
-                               cl_dead     : 1;/* abandoned */
+                               cl_autobind : 1;/* use getport() */
 
        struct rpc_rtt *        cl_rtt;         /* RTO estimator data */
 
@@ -98,6 +98,7 @@ struct rpc_create_args {
        int                     protocol;
        struct sockaddr         *address;
        size_t                  addrsize;
+       struct sockaddr         *saddress;
        struct rpc_timeout      *timeout;
        char                    *servername;
        struct rpc_program      *program;
@@ -110,42 +111,38 @@ struct rpc_create_args {
 #define RPC_CLNT_CREATE_HARDRTRY       (1UL << 0)
 #define RPC_CLNT_CREATE_INTR           (1UL << 1)
 #define RPC_CLNT_CREATE_AUTOBIND       (1UL << 2)
-#define RPC_CLNT_CREATE_ONESHOT                (1UL << 3)
-#define RPC_CLNT_CREATE_NONPRIVPORT    (1UL << 4)
-#define RPC_CLNT_CREATE_NOPING         (1UL << 5)
-#define RPC_CLNT_CREATE_DISCRTRY       (1UL << 6)
+#define RPC_CLNT_CREATE_NONPRIVPORT    (1UL << 3)
+#define RPC_CLNT_CREATE_NOPING         (1UL << 4)
+#define RPC_CLNT_CREATE_DISCRTRY       (1UL << 5)
 
 struct rpc_clnt *rpc_create(struct rpc_create_args *args);
 struct rpc_clnt        *rpc_bind_new_program(struct rpc_clnt *,
-                               struct rpc_program *, int);
+                               struct rpc_program *, u32);
 struct rpc_clnt *rpc_clone_client(struct rpc_clnt *);
-int            rpc_shutdown_client(struct rpc_clnt *);
-int            rpc_destroy_client(struct rpc_clnt *);
+void           rpc_shutdown_client(struct rpc_clnt *);
 void           rpc_release_client(struct rpc_clnt *);
-int            rpcb_register(u32, u32, int, unsigned short, int *);
-void           rpcb_getport(struct rpc_task *);
 
-void           rpc_call_setup(struct rpc_task *, struct rpc_message *, int);
+int            rpcb_register(u32, u32, int, unsigned short, int *);
+int            rpcb_getport_sync(struct sockaddr_in *, __u32, __u32, int);
+void           rpcb_getport_async(struct rpc_task *);
 
+void           rpc_call_setup(struct rpc_task *, const struct rpc_message *, int);
+void           rpc_call_start(struct rpc_task *);
 int            rpc_call_async(struct rpc_clnt *clnt, struct rpc_message *msg,
                               int flags, const struct rpc_call_ops *tk_ops,
                               void *calldata);
 int            rpc_call_sync(struct rpc_clnt *clnt, struct rpc_message *msg,
                              int flags);
+struct rpc_task *rpc_call_null(struct rpc_clnt *clnt, struct rpc_cred *cred,
+                              int flags);
 void           rpc_restart_call(struct rpc_task *);
 void           rpc_clnt_sigmask(struct rpc_clnt *clnt, sigset_t *oldset);
 void           rpc_clnt_sigunmask(struct rpc_clnt *clnt, sigset_t *oldset);
 void           rpc_setbufsize(struct rpc_clnt *, unsigned int, unsigned int);
 size_t         rpc_max_payload(struct rpc_clnt *);
 void           rpc_force_rebind(struct rpc_clnt *);
-int            rpc_ping(struct rpc_clnt *clnt, int flags);
 size_t         rpc_peeraddr(struct rpc_clnt *, struct sockaddr *, size_t);
 char *         rpc_peeraddr2str(struct rpc_clnt *, enum rpc_display_format_t);
 
-/*
- * Helper function for NFSroot support
- */
-int            rpcb_getport_external(struct sockaddr_in *, __u32, __u32, int);
-
 #endif /* __KERNEL__ */
 #endif /* _LINUX_SUNRPC_CLNT_H */