diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-01-03 03:55:04 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-01-06 14:58:39 -0500 |
commit | 963d8fe53339128ee46a7701f2e36305f0ccff8c (patch) | |
tree | 426736c70a8e05cb1d945d5c7f44ea6475edd113 /include/linux/sunrpc | |
parent | abbcf28f23d53e8ec56a91f3528743913fa2694a (diff) |
RPC: Clean up RPC task structure
Shrink the RPC task structure. Instead of storing separate pointers
for task->tk_exit and task->tk_release, put them in a structure.
Also pass the user data pointer as a parameter instead of passing it via
task->tk_calldata. This enables us to nest callbacks.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'include/linux/sunrpc')
-rw-r--r-- | include/linux/sunrpc/clnt.h | 3 | ||||
-rw-r--r-- | include/linux/sunrpc/sched.h | 20 |
2 files changed, 16 insertions, 7 deletions
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index ab151bbb66df..b0ab959eca65 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h | |||
@@ -126,7 +126,8 @@ int rpc_register(u32, u32, int, unsigned short, int *); | |||
126 | void rpc_call_setup(struct rpc_task *, struct rpc_message *, int); | 126 | void rpc_call_setup(struct rpc_task *, struct rpc_message *, int); |
127 | 127 | ||
128 | int rpc_call_async(struct rpc_clnt *clnt, struct rpc_message *msg, | 128 | int rpc_call_async(struct rpc_clnt *clnt, struct rpc_message *msg, |
129 | int flags, rpc_action callback, void *clntdata); | 129 | int flags, const struct rpc_call_ops *tk_ops, |
130 | void *calldata); | ||
130 | int rpc_call_sync(struct rpc_clnt *clnt, struct rpc_message *msg, | 131 | int rpc_call_sync(struct rpc_clnt *clnt, struct rpc_message *msg, |
131 | int flags); | 132 | int flags); |
132 | void rpc_restart_call(struct rpc_task *); | 133 | void rpc_restart_call(struct rpc_task *); |
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h index 4c4b2dc8aca5..581d8cdc3b86 100644 --- a/include/linux/sunrpc/sched.h +++ b/include/linux/sunrpc/sched.h | |||
@@ -27,6 +27,7 @@ struct rpc_message { | |||
27 | struct rpc_cred * rpc_cred; /* Credentials */ | 27 | struct rpc_cred * rpc_cred; /* Credentials */ |
28 | }; | 28 | }; |
29 | 29 | ||
30 | struct rpc_call_ops; | ||
30 | struct rpc_wait_queue; | 31 | struct rpc_wait_queue; |
31 | struct rpc_wait { | 32 | struct rpc_wait { |
32 | struct list_head list; /* wait queue links */ | 33 | struct list_head list; /* wait queue links */ |
@@ -61,13 +62,12 @@ struct rpc_task { | |||
61 | * timeout_fn to be executed by timer bottom half | 62 | * timeout_fn to be executed by timer bottom half |
62 | * callback to be executed after waking up | 63 | * callback to be executed after waking up |
63 | * action next procedure for async tasks | 64 | * action next procedure for async tasks |
64 | * exit exit async task and report to caller | 65 | * tk_ops caller callbacks |
65 | */ | 66 | */ |
66 | void (*tk_timeout_fn)(struct rpc_task *); | 67 | void (*tk_timeout_fn)(struct rpc_task *); |
67 | void (*tk_callback)(struct rpc_task *); | 68 | void (*tk_callback)(struct rpc_task *); |
68 | void (*tk_action)(struct rpc_task *); | 69 | void (*tk_action)(struct rpc_task *); |
69 | void (*tk_exit)(struct rpc_task *); | 70 | const struct rpc_call_ops *tk_ops; |
70 | void (*tk_release)(struct rpc_task *); | ||
71 | void * tk_calldata; | 71 | void * tk_calldata; |
72 | 72 | ||
73 | /* | 73 | /* |
@@ -111,6 +111,12 @@ struct rpc_task { | |||
111 | 111 | ||
112 | typedef void (*rpc_action)(struct rpc_task *); | 112 | typedef void (*rpc_action)(struct rpc_task *); |
113 | 113 | ||
114 | struct rpc_call_ops { | ||
115 | void (*rpc_call_done)(struct rpc_task *, void *); | ||
116 | void (*rpc_release)(void *); | ||
117 | }; | ||
118 | |||
119 | |||
114 | /* | 120 | /* |
115 | * RPC task flags | 121 | * RPC task flags |
116 | */ | 122 | */ |
@@ -228,10 +234,12 @@ struct rpc_wait_queue { | |||
228 | /* | 234 | /* |
229 | * Function prototypes | 235 | * Function prototypes |
230 | */ | 236 | */ |
231 | struct rpc_task *rpc_new_task(struct rpc_clnt *, rpc_action, int flags); | 237 | struct rpc_task *rpc_new_task(struct rpc_clnt *, int flags, |
238 | const struct rpc_call_ops *ops, void *data); | ||
232 | struct rpc_task *rpc_new_child(struct rpc_clnt *, struct rpc_task *parent); | 239 | struct rpc_task *rpc_new_child(struct rpc_clnt *, struct rpc_task *parent); |
233 | void rpc_init_task(struct rpc_task *, struct rpc_clnt *, | 240 | void rpc_init_task(struct rpc_task *task, struct rpc_clnt *clnt, |
234 | rpc_action exitfunc, int flags); | 241 | int flags, const struct rpc_call_ops *ops, |
242 | void *data); | ||
235 | void rpc_release_task(struct rpc_task *); | 243 | void rpc_release_task(struct rpc_task *); |
236 | void rpc_exit_task(struct rpc_task *); | 244 | void rpc_exit_task(struct rpc_task *); |
237 | void rpc_killall_tasks(struct rpc_clnt *); | 245 | void rpc_killall_tasks(struct rpc_clnt *); |