diff options
author | Chuck Lever <cel@netapp.com> | 2005-08-25 19:25:55 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2005-09-23 12:38:53 -0400 |
commit | 03bf4b707eee06706c9db343dd5c905b7ee47ed2 (patch) | |
tree | 54f89b578758e2bf2650b647ae1c7100c882a757 /include | |
parent | 3167e12c0c424f3c323944701615343022d86418 (diff) |
[PATCH] RPC: parametrize various transport connect timeouts
Each transport implementation can now set unique bind, connect,
reestablishment, and idle timeout values. These are variables,
allowing the values to be modified dynamically. This permits
exponential backoff of any of these values, for instance.
As an example, we implement exponential backoff for the connection
reestablishment timeout.
Test-plan:
Destructive testing (unplugging the network temporarily). Connectathon
with UDP and TCP.
Signed-off-by: Chuck Lever <cel@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/nfs_fs.h | 4 | ||||
-rw-r--r-- | include/linux/sunrpc/xprt.h | 29 |
2 files changed, 10 insertions, 23 deletions
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index 9a6047ff1b25..7bac2785c6e4 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -41,6 +41,10 @@ | |||
41 | #define NFS_MAX_FILE_IO_BUFFER_SIZE 32768 | 41 | #define NFS_MAX_FILE_IO_BUFFER_SIZE 32768 |
42 | #define NFS_DEF_FILE_IO_BUFFER_SIZE 4096 | 42 | #define NFS_DEF_FILE_IO_BUFFER_SIZE 4096 |
43 | 43 | ||
44 | /* Default timeout values */ | ||
45 | #define NFS_MAX_UDP_TIMEOUT (60*HZ) | ||
46 | #define NFS_MAX_TCP_TIMEOUT (600*HZ) | ||
47 | |||
44 | /* | 48 | /* |
45 | * superblock magic number for NFS | 49 | * superblock magic number for NFS |
46 | */ | 50 | */ |
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 9d9266cf8a36..2543adf18551 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
@@ -22,28 +22,6 @@ extern unsigned int xprt_tcp_slot_table_entries; | |||
22 | #define RPC_DEF_SLOT_TABLE (16U) | 22 | #define RPC_DEF_SLOT_TABLE (16U) |
23 | #define RPC_MAX_SLOT_TABLE (128U) | 23 | #define RPC_MAX_SLOT_TABLE (128U) |
24 | 24 | ||
25 | /* Default timeout values */ | ||
26 | #define RPC_MAX_UDP_TIMEOUT (60*HZ) | ||
27 | #define RPC_MAX_TCP_TIMEOUT (600*HZ) | ||
28 | |||
29 | /* | ||
30 | * Wait duration for an RPC TCP connection to be established. Solaris | ||
31 | * NFS over TCP uses 60 seconds, for example, which is in line with how | ||
32 | * long a server takes to reboot. | ||
33 | */ | ||
34 | #define RPC_CONNECT_TIMEOUT (60*HZ) | ||
35 | |||
36 | /* | ||
37 | * Delay an arbitrary number of seconds before attempting to reconnect | ||
38 | * after an error. | ||
39 | */ | ||
40 | #define RPC_REESTABLISH_TIMEOUT (15*HZ) | ||
41 | |||
42 | /* | ||
43 | * RPC transport idle timeout. | ||
44 | */ | ||
45 | #define RPC_IDLE_DISCONNECT_TIMEOUT (5*60*HZ) | ||
46 | |||
47 | /* | 25 | /* |
48 | * RPC call and reply header size as number of 32bit words (verifier | 26 | * RPC call and reply header size as number of 32bit words (verifier |
49 | * size computed separately) | 27 | * size computed separately) |
@@ -182,14 +160,19 @@ struct rpc_xprt { | |||
182 | /* | 160 | /* |
183 | * Connection of transports | 161 | * Connection of transports |
184 | */ | 162 | */ |
163 | unsigned long connect_timeout, | ||
164 | bind_timeout, | ||
165 | reestablish_timeout; | ||
185 | struct work_struct connect_worker; | 166 | struct work_struct connect_worker; |
186 | unsigned short port; | 167 | unsigned short port; |
168 | |||
187 | /* | 169 | /* |
188 | * Disconnection of idle transports | 170 | * Disconnection of idle transports |
189 | */ | 171 | */ |
190 | struct work_struct task_cleanup; | 172 | struct work_struct task_cleanup; |
191 | struct timer_list timer; | 173 | struct timer_list timer; |
192 | unsigned long last_used; | 174 | unsigned long last_used, |
175 | idle_timeout; | ||
193 | 176 | ||
194 | /* | 177 | /* |
195 | * Send stuff | 178 | * Send stuff |