diff options
| author | Chuck Lever <cel@citi.umich.edu> | 2005-08-11 16:25:23 -0400 |
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2005-09-23 12:38:12 -0400 |
| commit | a246b0105bbd9a70a698f69baae2042996f2a0e9 (patch) | |
| tree | 6c8831d8579a7fdc5201d3e9c20270cb1420eeda /include/linux | |
| parent | 094bb20b9fcab3a1652a77741caba6b78097d622 (diff) | |
[PATCH] RPC: introduce client-side transport switch
Move the bulk of client-side socket-specific code into a separate source
file, net/sunrpc/xprtsock.c.
Test-plan:
Millions of fsx operations. Performance characterization such as "sio" or
"iozone". Destructive testing (unplugging the network temporarily, server
reboots). Connectathon with v2, v3, and v4.
Version: Thu, 11 Aug 2005 16:03:38 -0400
Signed-off-by: Chuck Lever <cel@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/sunrpc/xdr.h | 5 | ||||
| -rw-r--r-- | include/linux/sunrpc/xprt.h | 38 |
2 files changed, 31 insertions, 12 deletions
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index d8b7656bca41..5da968729cf8 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h | |||
| @@ -165,11 +165,6 @@ extern int csum_partial_copy_to_xdr(struct xdr_buf *, struct sk_buff *); | |||
| 165 | extern ssize_t xdr_partial_copy_from_skb(struct xdr_buf *, unsigned int, | 165 | extern ssize_t xdr_partial_copy_from_skb(struct xdr_buf *, unsigned int, |
| 166 | skb_reader_t *, skb_read_actor_t); | 166 | skb_reader_t *, skb_read_actor_t); |
| 167 | 167 | ||
| 168 | struct socket; | ||
| 169 | struct sockaddr; | ||
| 170 | extern int xdr_sendpages(struct socket *, struct sockaddr *, int, | ||
| 171 | struct xdr_buf *, unsigned int, int); | ||
| 172 | |||
| 173 | extern int xdr_encode_word(struct xdr_buf *, int, u32); | 168 | extern int xdr_encode_word(struct xdr_buf *, int, u32); |
| 174 | extern int xdr_decode_word(struct xdr_buf *, int, u32 *); | 169 | extern int xdr_decode_word(struct xdr_buf *, int, u32 *); |
| 175 | 170 | ||
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index e618c1649814..d82b47ab73cb 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
| @@ -59,7 +59,13 @@ extern unsigned int xprt_tcp_slot_table_entries; | |||
| 59 | */ | 59 | */ |
| 60 | #define RPC_REESTABLISH_TIMEOUT (15*HZ) | 60 | #define RPC_REESTABLISH_TIMEOUT (15*HZ) |
| 61 | 61 | ||
| 62 | /* RPC call and reply header size as number of 32bit words (verifier | 62 | /* |
| 63 | * RPC transport idle timeout. | ||
| 64 | */ | ||
| 65 | #define RPC_IDLE_DISCONNECT_TIMEOUT (5*60*HZ) | ||
| 66 | |||
| 67 | /* | ||
| 68 | * RPC call and reply header size as number of 32bit words (verifier | ||
| 63 | * size computed separately) | 69 | * size computed separately) |
| 64 | */ | 70 | */ |
| 65 | #define RPC_CALLHDRSIZE 6 | 71 | #define RPC_CALLHDRSIZE 6 |
| @@ -121,12 +127,19 @@ struct rpc_rqst { | |||
| 121 | #define rq_svec rq_snd_buf.head | 127 | #define rq_svec rq_snd_buf.head |
| 122 | #define rq_slen rq_snd_buf.len | 128 | #define rq_slen rq_snd_buf.len |
| 123 | 129 | ||
| 124 | #define XPRT_LAST_FRAG (1 << 0) | 130 | struct rpc_task; |
| 125 | #define XPRT_COPY_RECM (1 << 1) | 131 | struct rpc_xprt; |
| 126 | #define XPRT_COPY_XID (1 << 2) | 132 | |
| 127 | #define XPRT_COPY_DATA (1 << 3) | 133 | struct rpc_xprt_ops { |
| 134 | void (*set_buffer_size)(struct rpc_xprt *xprt); | ||
| 135 | void (*connect)(struct rpc_task *task); | ||
| 136 | int (*send_request)(struct rpc_task *task); | ||
| 137 | void (*close)(struct rpc_xprt *xprt); | ||
| 138 | void (*destroy)(struct rpc_xprt *xprt); | ||
| 139 | }; | ||
| 128 | 140 | ||
| 129 | struct rpc_xprt { | 141 | struct rpc_xprt { |
| 142 | struct rpc_xprt_ops * ops; /* transport methods */ | ||
| 130 | struct socket * sock; /* BSD socket layer */ | 143 | struct socket * sock; /* BSD socket layer */ |
| 131 | struct sock * inet; /* INET layer */ | 144 | struct sock * inet; /* INET layer */ |
| 132 | 145 | ||
| @@ -199,14 +212,22 @@ struct rpc_xprt { | |||
| 199 | wait_queue_head_t cong_wait; | 212 | wait_queue_head_t cong_wait; |
| 200 | }; | 213 | }; |
| 201 | 214 | ||
| 215 | #define XPRT_LAST_FRAG (1 << 0) | ||
| 216 | #define XPRT_COPY_RECM (1 << 1) | ||
| 217 | #define XPRT_COPY_XID (1 << 2) | ||
| 218 | #define XPRT_COPY_DATA (1 << 3) | ||
| 219 | |||
| 202 | #ifdef __KERNEL__ | 220 | #ifdef __KERNEL__ |
| 203 | 221 | ||
| 204 | struct rpc_xprt * xprt_create_proto(int proto, struct sockaddr_in *addr, | 222 | struct rpc_xprt * xprt_create_proto(int proto, struct sockaddr_in *addr, |
| 205 | struct rpc_timeout *toparms); | 223 | struct rpc_timeout *toparms); |
| 224 | void xprt_disconnect(struct rpc_xprt *); | ||
| 206 | int xprt_destroy(struct rpc_xprt *); | 225 | int xprt_destroy(struct rpc_xprt *); |
| 207 | void xprt_set_timeout(struct rpc_timeout *, unsigned int, | 226 | void xprt_set_timeout(struct rpc_timeout *, unsigned int, |
| 208 | unsigned long); | 227 | unsigned long); |
| 209 | 228 | struct rpc_rqst * xprt_lookup_rqst(struct rpc_xprt *, u32); | |
| 229 | void xprt_complete_rqst(struct rpc_xprt *, | ||
| 230 | struct rpc_rqst *, int); | ||
| 210 | void xprt_reserve(struct rpc_task *); | 231 | void xprt_reserve(struct rpc_task *); |
| 211 | int xprt_prepare_transmit(struct rpc_task *); | 232 | int xprt_prepare_transmit(struct rpc_task *); |
| 212 | void xprt_transmit(struct rpc_task *); | 233 | void xprt_transmit(struct rpc_task *); |
| @@ -214,7 +235,10 @@ void xprt_receive(struct rpc_task *); | |||
| 214 | int xprt_adjust_timeout(struct rpc_rqst *req); | 235 | int xprt_adjust_timeout(struct rpc_rqst *req); |
| 215 | void xprt_release(struct rpc_task *); | 236 | void xprt_release(struct rpc_task *); |
| 216 | void xprt_connect(struct rpc_task *); | 237 | void xprt_connect(struct rpc_task *); |
| 217 | void xprt_sock_setbufsize(struct rpc_xprt *); | 238 | int xs_setup_udp(struct rpc_xprt *, |
| 239 | struct rpc_timeout *); | ||
| 240 | int xs_setup_tcp(struct rpc_xprt *, | ||
| 241 | struct rpc_timeout *); | ||
| 218 | 242 | ||
| 219 | #define XPRT_LOCKED 0 | 243 | #define XPRT_LOCKED 0 |
| 220 | #define XPRT_CONNECT 1 | 244 | #define XPRT_CONNECT 1 |
