patch-2.4.20 linux-2.4.20/include/linux/sunrpc/xprt.h
Next file: linux-2.4.20/include/linux/swap.h
Previous file: linux-2.4.20/include/linux/sunrpc/xdr.h
Back to the patch index
Back to the overall index
- Lines: 142
- Date:
Thu Nov 28 15:53:15 2002
- Orig file:
linux-2.4.19/include/linux/sunrpc/xprt.h
- Orig date:
Fri Aug 2 17:39:46 2002
diff -urN linux-2.4.19/include/linux/sunrpc/xprt.h linux-2.4.20/include/linux/sunrpc/xprt.h
@@ -13,17 +13,13 @@
#include <linux/socket.h>
#include <linux/in.h>
#include <linux/sunrpc/sched.h>
-
-/*
- * Maximum number of iov's we use.
- */
-#define MAX_IOVEC 10
+#include <linux/sunrpc/xdr.h>
/*
* The transport code maintains an estimate on the maximum number of out-
* standing RPC requests, using a smoothed version of the congestion
* avoidance implemented in 44BSD. This is basically the Van Jacobson
- * slow start algorithm: If a retransmit occurs, the congestion window is
+ * congestion algorithm: If a retransmit occurs, the congestion window is
* halved; otherwise, it is incremented by 1/cwnd when
*
* - a reply is received and
@@ -36,15 +32,13 @@
* Note: on machines with low memory we should probably use a smaller
* MAXREQS value: At 32 outstanding reqs with 8 megs of RAM, fragment
* reassembly will frequently run out of memory.
- * Come Linux 2.3, we'll handle fragments directly.
*/
-#define RPC_MAXCONG 16
-#define RPC_MAXREQS (RPC_MAXCONG + 1)
-#define RPC_CWNDSCALE 256
+#define RPC_MAXCONG (16)
+#define RPC_MAXREQS RPC_MAXCONG
+#define RPC_CWNDSCALE (256)
#define RPC_MAXCWND (RPC_MAXCONG * RPC_CWNDSCALE)
#define RPC_INITCWND RPC_CWNDSCALE
-#define RPCXPRT_CONGESTED(xprt) \
- ((xprt)->cong >= (xprt)->cwnd)
+#define RPCXPRT_CONGESTED(xprt) ((xprt)->cong >= (xprt)->cwnd)
/* Default timeout values */
#define RPC_MAX_UDP_TIMEOUT (60*HZ)
@@ -70,15 +64,6 @@
};
/*
- * This is the RPC buffer
- */
-struct rpc_iov {
- struct iovec io_vec[MAX_IOVEC];
- unsigned int io_nr;
- unsigned int io_len;
-};
-
-/*
* This describes a complete RPC request
*/
struct rpc_rqst {
@@ -87,8 +72,8 @@
*/
struct rpc_xprt * rq_xprt; /* RPC client */
struct rpc_timeout rq_timeout; /* timeout parms */
- struct rpc_iov rq_snd_buf; /* send buffer */
- struct rpc_iov rq_rcv_buf; /* recv buffer */
+ struct xdr_buf rq_snd_buf; /* send buffer */
+ struct xdr_buf rq_rcv_buf; /* recv buffer */
/*
* This is the private part
@@ -96,7 +81,10 @@
struct rpc_task * rq_task; /* RPC task data */
__u32 rq_xid; /* request XID */
struct rpc_rqst * rq_next; /* free list */
- volatile unsigned char rq_received : 1;/* receive completed */
+ int rq_cong; /* has incremented xprt->cong */
+ int rq_received; /* receive completed */
+
+ struct list_head rq_list;
/*
* For authentication (e.g. auth_des)
@@ -109,16 +97,14 @@
u32 rq_bytes_sent; /* Bytes we have sent */
-#ifdef RPC_PROFILE
- unsigned long rq_xtime; /* when transmitted */
-#endif
+ long rq_xtime; /* when transmitted */
+ int rq_ntimeo;
+ int rq_nresend;
};
-#define rq_svec rq_snd_buf.io_vec
-#define rq_snr rq_snd_buf.io_nr
-#define rq_slen rq_snd_buf.io_len
-#define rq_rvec rq_rcv_buf.io_vec
-#define rq_rnr rq_rcv_buf.io_nr
-#define rq_rlen rq_rcv_buf.io_len
+#define rq_svec rq_snd_buf.head
+#define rq_slen rq_snd_buf.len
+#define rq_rvec rq_rcv_buf.head
+#define rq_rlen rq_rcv_buf.len
#define XPRT_LAST_FRAG (1 << 0)
#define XPRT_COPY_RECM (1 << 1)
@@ -135,9 +121,12 @@
unsigned long cong; /* current congestion */
unsigned long cwnd; /* congestion window */
- unsigned long congtime; /* hold cwnd until then */
+
+ unsigned int rcvsize, /* socket receive buffer size */
+ sndsize; /* socket send buffer size */
struct rpc_wait_queue sending; /* requests waiting to send */
+ struct rpc_wait_queue resend; /* requests waiting to resend */
struct rpc_wait_queue pending; /* requests in flight */
struct rpc_wait_queue backlog; /* waiting for slot */
struct rpc_rqst * free; /* free slots */
@@ -164,6 +153,8 @@
spinlock_t xprt_lock; /* lock xprt info */
struct rpc_task * snd_task; /* Task blocked in send */
+ struct list_head recv;
+
void (*old_data_ready)(struct sock *, int);
void (*old_state_change)(struct sock *);
@@ -189,13 +180,9 @@
void xprt_release(struct rpc_task *);
void xprt_reconnect(struct rpc_task *);
int xprt_clear_backlog(struct rpc_xprt *);
+void xprt_sock_setbufsize(struct rpc_xprt *);
-#define XPRT_WSPACE 0
-#define XPRT_CONNECT 1
-
-#define xprt_wspace(xp) (test_bit(XPRT_WSPACE, &(xp)->sockstate))
-#define xprt_test_and_set_wspace(xp) (test_and_set_bit(XPRT_WSPACE, &(xp)->sockstate))
-#define xprt_clear_wspace(xp) (clear_bit(XPRT_WSPACE, &(xp)->sockstate))
+#define XPRT_CONNECT 0
#define xprt_connected(xp) (!(xp)->stream || test_bit(XPRT_CONNECT, &(xp)->sockstate))
#define xprt_set_connected(xp) (set_bit(XPRT_CONNECT, &(xp)->sockstate))
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)