diff options
author | Tom Tucker <tom@opengridcomputing.com> | 2007-12-30 22:07:53 -0500 |
---|---|---|
committer | J. Bruce Fields <bfields@citi.umich.edu> | 2008-02-01 16:42:11 -0500 |
commit | 7a18208383ab3f3ce4a1f4e0536acc9372523d81 (patch) | |
tree | 851a1cc29d753297c2e7cf4cb4a95c4af7868427 /include/linux/sunrpc | |
parent | bb5cf160b282644c4491afbf76fbc66f5dc35030 (diff) |
svc: Make close transport independent
Move sk_list and sk_ready to svc_xprt. This involves close because these
lists are walked by svcs when closing all their transports. So I combined
the moving of these lists to svc_xprt with making close transport independent.
The svc_force_sock_close has been changed to svc_close_all and takes a list
as an argument. This removes some svc internals knowledge from the svcs.
This code races with module removal and transport addition.
Thanks to Simon Holm Thøgersen for a compile fix.
Signed-off-by: Tom Tucker <tom@opengridcomputing.com>
Acked-by: Neil Brown <neilb@suse.de>
Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: Greg Banks <gnb@sgi.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Cc: Simon Holm Thøgersen <odie@cs.aau.dk>
Diffstat (limited to 'include/linux/sunrpc')
-rw-r--r-- | include/linux/sunrpc/svc_xprt.h | 2 | ||||
-rw-r--r-- | include/linux/sunrpc/svcsock.h | 4 |
2 files changed, 3 insertions, 3 deletions
diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h index 4042cdfec4fe..0a3e09b42a83 100644 --- a/include/linux/sunrpc/svc_xprt.h +++ b/include/linux/sunrpc/svc_xprt.h | |||
@@ -36,6 +36,8 @@ struct svc_xprt { | |||
36 | struct svc_xprt_class *xpt_class; | 36 | struct svc_xprt_class *xpt_class; |
37 | struct svc_xprt_ops *xpt_ops; | 37 | struct svc_xprt_ops *xpt_ops; |
38 | struct kref xpt_ref; | 38 | struct kref xpt_ref; |
39 | struct list_head xpt_list; | ||
40 | struct list_head xpt_ready; | ||
39 | unsigned long xpt_flags; | 41 | unsigned long xpt_flags; |
40 | #define XPT_BUSY 0 /* enqueued/receiving */ | 42 | #define XPT_BUSY 0 /* enqueued/receiving */ |
41 | #define XPT_CONN 1 /* conn pending */ | 43 | #define XPT_CONN 1 /* conn pending */ |
diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h index 92d4cc99c60d..060508ba358b 100644 --- a/include/linux/sunrpc/svcsock.h +++ b/include/linux/sunrpc/svcsock.h | |||
@@ -17,8 +17,6 @@ | |||
17 | */ | 17 | */ |
18 | struct svc_sock { | 18 | struct svc_sock { |
19 | struct svc_xprt sk_xprt; | 19 | struct svc_xprt sk_xprt; |
20 | struct list_head sk_ready; /* list of ready sockets */ | ||
21 | struct list_head sk_list; /* list of all sockets */ | ||
22 | struct socket * sk_sock; /* berkeley socket layer */ | 20 | struct socket * sk_sock; /* berkeley socket layer */ |
23 | struct sock * sk_sk; /* INET layer */ | 21 | struct sock * sk_sk; /* INET layer */ |
24 | 22 | ||
@@ -51,7 +49,7 @@ struct svc_sock { | |||
51 | /* | 49 | /* |
52 | * Function prototypes. | 50 | * Function prototypes. |
53 | */ | 51 | */ |
54 | void svc_force_close_socket(struct svc_sock *); | 52 | void svc_close_all(struct list_head *); |
55 | int svc_recv(struct svc_rqst *, long); | 53 | int svc_recv(struct svc_rqst *, long); |
56 | int svc_send(struct svc_rqst *); | 54 | int svc_send(struct svc_rqst *); |
57 | void svc_drop(struct svc_rqst *); | 55 | void svc_drop(struct svc_rqst *); |