patch-2.2.18 linux/include/linux/sunrpc/xprt.h
Next file: linux/include/linux/sysctl.h
Previous file: linux/include/linux/sunrpc/xdr.h
Back to the patch index
Back to the overall index
- Lines: 175
- Date:
Sat Nov 18 20:15:22 2000
- Orig file:
v2.2.17/include/linux/sunrpc/xprt.h
- Orig date:
Fri Apr 21 23:24:09 2000
diff -u --new-file --recursive --exclude-from /usr/src/exclude v2.2.17/include/linux/sunrpc/xprt.h linux/include/linux/sunrpc/xprt.h
@@ -9,15 +9,17 @@
#ifndef _LINUX_SUNRPC_XPRT_H
#define _LINUX_SUNRPC_XPRT_H
+#include <linux/timer.h>
#include <linux/uio.h>
#include <linux/socket.h>
#include <linux/in.h>
+#include <linux/list.h>
#include <linux/sunrpc/sched.h>
/*
* Maximum number of iov's we use.
*/
-#define MAX_IOVEC 8
+#define MAX_IOVEC 10
/*
* The transport code maintains an estimate on the maximum number of out-
@@ -44,10 +46,10 @@
#define RPC_MAXCWND (RPC_MAXCONG * RPC_CWNDSCALE)
#define RPC_INITCWND RPC_CWNDSCALE
#define RPCXPRT_CONGESTED(xprt) \
- ((xprt)->cong >= ((xprt)->nocong? RPC_MAXCWND : (xprt)->cwnd))
+ ((xprt)->cong >= (xprt)->cwnd)
/* Default timeout values */
-#define RPC_MAX_UDP_TIMEOUT (6*HZ)
+#define RPC_MAX_UDP_TIMEOUT (60*HZ)
#define RPC_MAX_TCP_TIMEOUT (600*HZ)
/* RPC call and reply header size as number of 32bit words (verifier
@@ -96,8 +98,7 @@
struct rpc_task * rq_task; /* RPC task data */
__u32 rq_xid; /* request XID */
struct rpc_rqst * rq_next; /* free list */
- unsigned char rq_gotit; /* reply received */
- unsigned char rq_damaged; /* being received */
+ volatile unsigned char rq_received : 1;/* receive completed */
/*
* For authentication (e.g. auth_des)
@@ -122,14 +123,6 @@
#define rq_rlen rq_rcv_buf.io_len
struct rpc_xprt {
- struct rpc_xprt * link; /* list of all clients */
- struct rpc_xprt * rx_pending; /* receive pending list */
- struct rpc_xprt * tx_pending; /* transmit pending list */
-
- int rx_pending_flag;/* are we on the rcv pending list ? */
- int tx_pending_flag;/* are we on the xmit pending list ? */
-
- struct file * file; /* VFS layer */
struct socket * sock; /* BSD socket layer */
struct sock * inet; /* INET layer */
@@ -147,61 +140,92 @@
struct rpc_wait_queue reconn; /* waiting for reconnect */
struct rpc_rqst * free; /* free slots */
struct rpc_rqst slot[RPC_MAXREQS];
- unsigned char connected; /* TCP: connected */
- unsigned char write_space; /* TCP: can send */
- unsigned int shutdown : 1, /* being shut down */
- nocong : 1, /* no congestion control */
- stream : 1, /* TCP */
- tcp_more : 1, /* more record fragments */
- connecting : 1; /* being reconnected */
+ volatile unsigned char connected : 1,/* TCP: connected */
+ write_space : 1;/* TCP: can send */
+ unsigned char nocong : 1,/* no congestion control */
+ stream : 1,/* TCP */
+ shutdown : 1,/* being shut down */
+ tcp_more : 1,/* more record fragments */
+ connecting : 1;/* being reconnected */
+
+ unsigned long tcp_timeout; /* TCP timeout window */
+ struct timer_list tcp_timer; /* TCP timeout */
/*
* State of TCP reply receive stuff
*/
- union { /* record marker & XID */
- u32 header[2];
- u8 data[8];
- } tcp_recm;
- struct rpc_rqst * tcp_rqstp;
- struct iovec tcp_iovec[MAX_IOVEC];
- u32 tcp_total; /* overall record length */
- u32 tcp_reclen; /* fragment length */
- u32 tcp_offset; /* fragment offset */
- u32 tcp_copied; /* copied to request */
+ u32 tcp_recm; /* Fragment header */
+ u32 tcp_xid; /* Current XID */
+ unsigned int tcp_reclen, /* fragment length */
+ tcp_offset, /* fragment offset */
+ tcp_copied; /* copied to request */
+ struct list_head rx_pending; /* receive pending list */
/*
- * TCP send stuff
+ * Send stuff
*/
- struct rpc_iov snd_buf; /* send buffer */
struct rpc_task * snd_task; /* Task blocked in send */
- u32 snd_sent; /* Bytes we have sent */
void (*old_data_ready)(struct sock *, int);
void (*old_state_change)(struct sock *);
void (*old_write_space)(struct sock *);
+
+ struct wait_queue * cong_wait;
};
-#define tcp_reclen tcp_recm.header[0]
-#define tcp_xid tcp_recm.header[1]
#ifdef __KERNEL__
-struct rpc_xprt * xprt_create(struct file *socket,
- struct sockaddr_in *addr,
- struct rpc_timeout *toparms);
struct rpc_xprt * xprt_create_proto(int proto, struct sockaddr_in *addr,
struct rpc_timeout *toparms);
int xprt_destroy(struct rpc_xprt *);
+void xprt_shutdown(struct rpc_xprt *);
void xprt_default_timeout(struct rpc_timeout *, int);
void xprt_set_timeout(struct rpc_timeout *, unsigned int,
unsigned long);
int xprt_reserve(struct rpc_task *);
+int xprt_down_transmit(struct rpc_task *);
void xprt_transmit(struct rpc_task *);
+void xprt_up_transmit(struct rpc_task *);
void xprt_receive(struct rpc_task *);
int xprt_adjust_timeout(struct rpc_timeout *);
void xprt_release(struct rpc_task *);
void xprt_reconnect(struct rpc_task *);
+void __rpciod_tcp_dispatcher(void);
+
+extern struct list_head rpc_xprt_pending;
+
+static inline
+int xprt_tcp_pending(void)
+{
+ return !list_empty(&rpc_xprt_pending);
+}
+
+static inline
+void rpciod_tcp_dispatcher(void)
+{
+ if (xprt_tcp_pending())
+ __rpciod_tcp_dispatcher();
+}
+
+static inline
+int xprt_connected(struct rpc_xprt *xprt)
+{
+ return xprt->connected;
+}
+
+static inline
+void xprt_set_connected(struct rpc_xprt *xprt)
+{
+ xprt->connected = 1;
+}
+
+static inline
+void xprt_clear_connected(struct rpc_xprt *xprt)
+{
+ xprt->connected = 0;
+}
#endif /* __KERNEL__*/
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)