Blame view

include/linux/sunrpc/xprt.h 11.8 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /*
55aa4f58a   Chuck Lever   [PATCH] RPC: clie...
2
   *  linux/include/linux/sunrpc/xprt.h
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
3
4
5
6
7
8
9
10
11
12
13
14
   *
   *  Declarations for the RPC transport interface.
   *
   *  Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
   */
  
  #ifndef _LINUX_SUNRPC_XPRT_H
  #define _LINUX_SUNRPC_XPRT_H
  
  #include <linux/uio.h>
  #include <linux/socket.h>
  #include <linux/in.h>
ff8399709   Chuck Lever   SUNRPC: Replace j...
15
  #include <linux/ktime.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
16
17
  #include <linux/sunrpc/sched.h>
  #include <linux/sunrpc/xdr.h>
7adae489f   Greg Banks   [PATCH] knfsd: Pr...
18
  #include <linux/sunrpc/msg_prot.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
19

96802a095   Frank van Maarseveen   SUNRPC: cleanup t...
20
  #ifdef __KERNEL__
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
22
23
  #define RPC_MIN_SLOT_TABLE	(2U)
  #define RPC_DEF_SLOT_TABLE	(16U)
  #define RPC_MAX_SLOT_TABLE	(128U)
d9ba131d8   Trond Myklebust   SUNRPC: Support d...
24
  #define RPC_MAX_SLOT_TABLE_LIMIT	(65536U)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
25

a246b0105   Chuck Lever   [PATCH] RPC: intr...
26
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
27
28
29
30
31
32
33
34
35
   * This describes a timeout strategy
   */
  struct rpc_timeout {
  	unsigned long		to_initval,		/* initial timeout */
  				to_maxval,		/* max timeout */
  				to_increment;		/* if !exponential */
  	unsigned int		to_retries;		/* max # of retries */
  	unsigned char		to_exponential;
  };
edb267a68   Chuck Lever   SUNRPC: add xprt ...
36
37
38
39
  enum rpc_display_format_t {
  	RPC_DISPLAY_ADDR = 0,
  	RPC_DISPLAY_PORT,
  	RPC_DISPLAY_PROTO,
fbfe3cc67   Chuck Lever   SUNRPC: Add hex-f...
40
41
  	RPC_DISPLAY_HEX_ADDR,
  	RPC_DISPLAY_HEX_PORT,
4417c8c41   \"Talpey, Thomas\   SUNRPC: export pe...
42
  	RPC_DISPLAY_NETID,
edb267a68   Chuck Lever   SUNRPC: add xprt ...
43
44
  	RPC_DISPLAY_MAX,
  };
529b33c6d   Chuck Lever   [PATCH] RPC: allo...
45
46
  struct rpc_task;
  struct rpc_xprt;
e99170ff3   Trond Myklebust   NFS,SUNRPC: Fix c...
47
  struct seq_file;
529b33c6d   Chuck Lever   [PATCH] RPC: allo...
48

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
  /*
   * This describes a complete RPC request
   */
  struct rpc_rqst {
  	/*
  	 * This is the user-visible part
  	 */
  	struct rpc_xprt *	rq_xprt;		/* RPC client */
  	struct xdr_buf		rq_snd_buf;		/* send buffer */
  	struct xdr_buf		rq_rcv_buf;		/* recv buffer */
  
  	/*
  	 * This is the private part
  	 */
  	struct rpc_task *	rq_task;	/* RPC task data */
a17c2153d   Trond Myklebust   SUNRPC: Move the ...
64
  	struct rpc_cred *	rq_cred;	/* Bound cred */
d8ed029d6   Alexey Dobriyan   [SUNRPC]: trivial...
65
  	__be32			rq_xid;		/* request XID */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
66
  	int			rq_cong;	/* has incremented xprt->cong */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
67
  	u32			rq_seqno;	/* gss seq no. used on req. */
ead5e1c26   J. Bruce Fields   SUNRPC: Provide a...
68
69
70
71
  	int			rq_enc_pages_num;
  	struct page		**rq_enc_pages;	/* scratch pages for use by
  						   gss privacy code */
  	void (*rq_release_snd_buf)(struct rpc_rqst *); /* release rq_enc_pages */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
72
  	struct list_head	rq_list;
021071483   Chuck Lever   SUNRPC: switchabl...
73
  	__u32 *			rq_buffer;	/* XDR encode buffer */
c977a2ef4   Benny Halevy   sunrpc: get rid o...
74
  	size_t			rq_callsize,
2bea90d43   Chuck Lever   SUNRPC: RPC buffe...
75
  				rq_rcvsize;
d60dbb20a   Trond Myklebust   SUNRPC: Move the ...
76
77
78
  	size_t			rq_xmit_bytes_sent;	/* total bytes sent */
  	size_t			rq_reply_bytes_recvd;	/* total reply bytes */
  							/* received */
021071483   Chuck Lever   SUNRPC: switchabl...
79

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
80
81
82
83
84
  	struct xdr_buf		rq_private_buf;		/* The receive buffer
  							 * used in the softirq.
  							 */
  	unsigned long		rq_majortimeo;	/* major timeout alarm */
  	unsigned long		rq_timeout;	/* Current timeout value */
d60dbb20a   Trond Myklebust   SUNRPC: Move the ...
85
  	ktime_t			rq_rtt;		/* round-trip time */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
86
  	unsigned int		rq_retries;	/* # of retries */
7c1d71cf5   Trond Myklebust   SUNRPC: Don't dis...
87
88
89
90
  	unsigned int		rq_connect_cookie;
  						/* A cookie used to track the
  						   state of the transport
  						   connection */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
91
92
93
94
  	
  	/*
  	 * Partial send handling
  	 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
95
  	u32			rq_bytes_sent;	/* Bytes we have sent */
ff8399709   Chuck Lever   SUNRPC: Replace j...
96
  	ktime_t			rq_xtime;	/* transmit time stamp */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
97
  	int			rq_ntrans;
56632b5bf   Ricardo Labiaga   nfs41: client cal...
98

9e00abc3c   Trond Myklebust   SUNRPC: sunrpc sh...
99
  #if defined(CONFIG_SUNRPC_BACKCHANNEL)
56632b5bf   Ricardo Labiaga   nfs41: client cal...
100
101
102
  	struct list_head	rq_bc_list;	/* Callback service list */
  	unsigned long		rq_bc_pa_state;	/* Backchannel prealloc state */
  	struct list_head	rq_bc_pa_list;	/* Backchannel prealloc list */
9e00abc3c   Trond Myklebust   SUNRPC: sunrpc sh...
103
  #endif /* CONFIG_SUNRPC_BACKCHANEL */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
104
105
106
  };
  #define rq_svec			rq_snd_buf.head
  #define rq_slen			rq_snd_buf.len
a246b0105   Chuck Lever   [PATCH] RPC: intr...
107
  struct rpc_xprt_ops {
470056c28   Chuck Lever   [PATCH] RPC: rati...
108
  	void		(*set_buffer_size)(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize);
43cedbf0e   Trond Myklebust   SUNRPC: Ensure th...
109
  	int		(*reserve_xprt)(struct rpc_xprt *xprt, struct rpc_task *task);
49e9a8908   Chuck Lever   [PATCH] RPC: expo...
110
  	void		(*release_xprt)(struct rpc_xprt *xprt, struct rpc_task *task);
bbf7c1dd2   Chuck Lever   SUNRPC: Introduce...
111
  	void		(*rpcbind)(struct rpc_task *task);
922004120   Chuck Lever   SUNRPC: transport...
112
  	void		(*set_port)(struct rpc_xprt *xprt, unsigned short port);
a246b0105   Chuck Lever   [PATCH] RPC: intr...
113
  	void		(*connect)(struct rpc_task *task);
021071483   Chuck Lever   SUNRPC: switchabl...
114
  	void *		(*buf_alloc)(struct rpc_task *task, size_t size);
c5a4dd8b7   Chuck Lever   SUNRPC: Eliminate...
115
  	void		(*buf_free)(void *buffer);
a246b0105   Chuck Lever   [PATCH] RPC: intr...
116
  	int		(*send_request)(struct rpc_task *task);
fe3aca290   Chuck Lever   [PATCH] RPC: add ...
117
  	void		(*set_retrans_timeout)(struct rpc_task *task);
46c0ee8bc   Chuck Lever   [PATCH] RPC: sepa...
118
  	void		(*timer)(struct rpc_task *task);
a58dd398f   Chuck Lever   [PATCH] RPC: add ...
119
  	void		(*release_request)(struct rpc_task *task);
a246b0105   Chuck Lever   [PATCH] RPC: intr...
120
121
  	void		(*close)(struct rpc_xprt *xprt);
  	void		(*destroy)(struct rpc_xprt *xprt);
262ca07de   Chuck Lever   SUNRPC: add a han...
122
  	void		(*print_stats)(struct rpc_xprt *xprt, struct seq_file *seq);
a246b0105   Chuck Lever   [PATCH] RPC: intr...
123
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
124

f300baba5   Alexandros Batsakis   nfsd41: sunrpc: a...
125
126
127
128
129
130
131
132
133
134
135
136
137
138
  /*
   * RPC transport identifiers
   *
   * To preserve compatibility with the historical use of raw IP protocol
   * id's for transport selection, UDP and TCP identifiers are specified
   * with the previous values. No such restriction exists for new transports,
   * except that they may not collide with these values (17 and 6,
   * respectively).
   */
  #define XPRT_TRANSPORT_BC       (1 << 31)
  enum xprt_transports {
  	XPRT_TRANSPORT_UDP	= IPPROTO_UDP,
  	XPRT_TRANSPORT_TCP	= IPPROTO_TCP,
  	XPRT_TRANSPORT_BC_TCP	= IPPROTO_TCP | XPRT_TRANSPORT_BC,
176e21ee2   Chuck Lever   SUNRPC: Support f...
139
140
  	XPRT_TRANSPORT_RDMA	= 256,
  	XPRT_TRANSPORT_LOCAL	= 257,
f300baba5   Alexandros Batsakis   nfsd41: sunrpc: a...
141
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
142
  struct rpc_xprt {
a8de240a9   Trond Myklebust   SUNRPC: Convert s...
143
  	atomic_t		count;		/* Reference count */
a246b0105   Chuck Lever   [PATCH] RPC: intr...
144
  	struct rpc_xprt_ops *	ops;		/* transport methods */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
145

ba7392bb3   Trond Myklebust   SUNRPC: Add suppo...
146
  	const struct rpc_timeout *timeout;	/* timeout parms */
c4efcb1d3   Chuck Lever   SUNRPC: Use "sock...
147
148
  	struct sockaddr_storage	addr;		/* server address */
  	size_t			addrlen;	/* size of server address */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
149
150
151
152
  	int			prot;		/* IP protocol */
  
  	unsigned long		cong;		/* current congestion */
  	unsigned long		cwnd;		/* congestion window */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
153
154
  	size_t			max_payload;	/* largest RPC payload size,
  						   in bytes */
808012fbb   Chuck Lever   [PATCH] RPC: skip...
155
156
  	unsigned int		tsh_size;	/* size of transport specific
  						   header */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
157

4a68179d3   Chuck Lever   SUNRPC: Make RPC ...
158
  	struct rpc_wait_queue	binding;	/* requests waiting on rpcbind */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
159
  	struct rpc_wait_queue	sending;	/* requests waiting to send */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
160
161
162
  	struct rpc_wait_queue	pending;	/* requests in flight */
  	struct rpc_wait_queue	backlog;	/* waiting for slot */
  	struct list_head	free;		/* free slots */
d9ba131d8   Trond Myklebust   SUNRPC: Support d...
163
164
165
  	unsigned int		max_reqs;	/* max number of slots */
  	unsigned int		min_reqs;	/* min number of slots */
  	atomic_t		num_reqs;	/* total slots */
2226feb6b   Chuck Lever   [PATCH] RPC: rena...
166
  	unsigned long		state;		/* transport state */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
167
  	unsigned char		shutdown   : 1,	/* being shut down */
43118c29d   Chuck Lever   [PATCH] RPC: get ...
168
  				resvport   : 1; /* use a reserved port */
a509050bd   Chuck Lever   SUNRPC: introduce...
169
  	unsigned int		bind_index;	/* bind function index */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
170
171
  
  	/*
55aa4f58a   Chuck Lever   [PATCH] RPC: clie...
172
  	 * Connection of transports
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
173
  	 */
a8ce4a8f3   Trond Myklebust   SUNRPC: Fail over...
174
  	unsigned long		bind_timeout,
03bf4b707   Chuck Lever   [PATCH] RPC: para...
175
  				reestablish_timeout;
7c1d71cf5   Trond Myklebust   SUNRPC: Don't dis...
176
177
178
  	unsigned int		connect_cookie;	/* A cookie that gets bumped
  						   every time the transport
  						   is reconnected */
03bf4b707   Chuck Lever   [PATCH] RPC: para...
179

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
180
  	/*
55aa4f58a   Chuck Lever   [PATCH] RPC: clie...
181
  	 * Disconnection of idle transports
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
182
183
184
  	 */
  	struct work_struct	task_cleanup;
  	struct timer_list	timer;
03bf4b707   Chuck Lever   [PATCH] RPC: para...
185
186
  	unsigned long		last_used,
  				idle_timeout;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
187
188
189
190
  
  	/*
  	 * Send stuff
  	 */
4a0f8c04f   Chuck Lever   [PATCH] RPC: Rena...
191
  	spinlock_t		transport_lock;	/* lock transport info */
5dc07727f   Chuck Lever   [PATCH] RPC: Rena...
192
  	spinlock_t		reserve_lock;	/* lock slot table */
e744cf2e3   Chuck Lever   SUNRPC: minor opt...
193
  	u32			xid;		/* Next XID value to use */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
194
  	struct rpc_task *	snd_task;	/* Task blocked in send */
4cfc7e601   Rahul Iyer   nfsd41: sunrpc: A...
195
  	struct svc_xprt		*bc_xprt;	/* NFSv4.1 backchannel */
9e00abc3c   Trond Myklebust   SUNRPC: sunrpc sh...
196
  #if defined(CONFIG_SUNRPC_BACKCHANNEL)
56632b5bf   Ricardo Labiaga   nfs41: client cal...
197
198
  	struct svc_serv		*bc_serv;       /* The RPC service which will */
  						/* process the callback */
fb7a0b9ad   Ricardo Labiaga   nfs41: New backch...
199
  	unsigned int		bc_alloc_count;	/* Total number of preallocs */
56632b5bf   Ricardo Labiaga   nfs41: client cal...
200
201
202
203
  	spinlock_t		bc_pa_lock;	/* Protects the preallocated
  						 * items */
  	struct list_head	bc_pa_list;	/* List of preallocated
  						 * backchannel rpc_rqst's */
9e00abc3c   Trond Myklebust   SUNRPC: sunrpc sh...
204
  #endif /* CONFIG_SUNRPC_BACKCHANNEL */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
205
  	struct list_head	recv;
262ca07de   Chuck Lever   SUNRPC: add a han...
206
207
208
209
210
211
212
213
214
215
216
217
  	struct {
  		unsigned long		bind_count,	/* total number of binds */
  					connect_count,	/* total number of connects */
  					connect_start,	/* connect start timestamp */
  					connect_time,	/* jiffies waiting for connect */
  					sends,		/* how many complete requests */
  					recvs,		/* how many complete requests */
  					bad_xids;	/* lookup_rqst didn't find XID */
  
  		unsigned long long	req_u,		/* average requests on the wire */
  					bklog_u;	/* backlog queue utilization */
  	} stat;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
218

37aa21337   Pavel Emelyanov   sunrpc: Tag rpc_x...
219
  	struct net		*xprt_net;
b454ae906   Chuck Lever   SUNRPC: fewer con...
220
  	const char		*address_strings[RPC_DISPLAY_MAX];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
221
  };
9e00abc3c   Trond Myklebust   SUNRPC: sunrpc sh...
222
  #if defined(CONFIG_SUNRPC_BACKCHANNEL)
56632b5bf   Ricardo Labiaga   nfs41: client cal...
223
224
225
226
227
  /*
   * Backchannel flags
   */
  #define	RPC_BC_PA_IN_USE	0x0001		/* Preallocated backchannel */
  						/* buffer in use */
9e00abc3c   Trond Myklebust   SUNRPC: sunrpc sh...
228
  #endif /* CONFIG_SUNRPC_BACKCHANNEL */
56632b5bf   Ricardo Labiaga   nfs41: client cal...
229

9e00abc3c   Trond Myklebust   SUNRPC: sunrpc sh...
230
  #if defined(CONFIG_SUNRPC_BACKCHANNEL)
55ae1aabf   Ricardo Labiaga   nfs41: Add backch...
231
232
233
234
235
236
237
238
239
  static inline int bc_prealloc(struct rpc_rqst *req)
  {
  	return test_bit(RPC_BC_PA_IN_USE, &req->rq_bc_pa_state);
  }
  #else
  static inline int bc_prealloc(struct rpc_rqst *req)
  {
  	return 0;
  }
9e00abc3c   Trond Myklebust   SUNRPC: sunrpc sh...
240
  #endif /* CONFIG_SUNRPC_BACKCHANNEL */
55ae1aabf   Ricardo Labiaga   nfs41: Add backch...
241

3c341b0b9   \"Talpey, Thomas\   SUNRPC: rename th...
242
  struct xprt_create {
4fa016eb2   \"Talpey, Thomas\   NFS/SUNRPC: suppo...
243
  	int			ident;		/* XPRT_TRANSPORT identifier */
9a23e332e   Pavel Emelyanov   sunrpc: Add net t...
244
  	struct net *		net;
d3bc9a1de   Frank van Maarseveen   SUNRPC client: ad...
245
  	struct sockaddr *	srcaddr;	/* optional local address */
96802a095   Frank van Maarseveen   SUNRPC: cleanup t...
246
247
  	struct sockaddr *	dstaddr;	/* remote peer address */
  	size_t			addrlen;
f300baba5   Alexandros Batsakis   nfsd41: sunrpc: a...
248
  	struct svc_xprt		*bc_xprt;	/* NFSv4.1 backchannel */
96802a095   Frank van Maarseveen   SUNRPC: cleanup t...
249
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
250

81c098af3   \"Talpey, Thomas\   SUNRPC: Provide a...
251
252
  struct xprt_class {
  	struct list_head	list;
4fa016eb2   \"Talpey, Thomas\   NFS/SUNRPC: suppo...
253
  	int			ident;		/* XPRT_TRANSPORT identifier */
3c341b0b9   \"Talpey, Thomas\   SUNRPC: rename th...
254
  	struct rpc_xprt *	(*setup)(struct xprt_create *);
81c098af3   \"Talpey, Thomas\   SUNRPC: Provide a...
255
256
257
  	struct module		*owner;
  	char			name[32];
  };
55aa4f58a   Chuck Lever   [PATCH] RPC: clie...
258
  /*
55aa4f58a   Chuck Lever   [PATCH] RPC: clie...
259
260
   * Generic internal transport functions
   */
3c341b0b9   \"Talpey, Thomas\   SUNRPC: rename th...
261
  struct rpc_xprt		*xprt_create_transport(struct xprt_create *args);
55aa4f58a   Chuck Lever   [PATCH] RPC: clie...
262
263
  void			xprt_connect(struct rpc_task *task);
  void			xprt_reserve(struct rpc_task *task);
43cedbf0e   Trond Myklebust   SUNRPC: Ensure th...
264
265
  int			xprt_reserve_xprt(struct rpc_xprt *xprt, struct rpc_task *task);
  int			xprt_reserve_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task);
55aa4f58a   Chuck Lever   [PATCH] RPC: clie...
266
267
  int			xprt_prepare_transmit(struct rpc_task *task);
  void			xprt_transmit(struct rpc_task *task);
e0ab53dea   Trond Myklebust   RPC: Ensure that ...
268
  void			xprt_end_transmit(struct rpc_task *task);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
269
  int			xprt_adjust_timeout(struct rpc_rqst *req);
49e9a8908   Chuck Lever   [PATCH] RPC: expo...
270
271
  void			xprt_release_xprt(struct rpc_xprt *xprt, struct rpc_task *task);
  void			xprt_release_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task);
55aa4f58a   Chuck Lever   [PATCH] RPC: clie...
272
  void			xprt_release(struct rpc_task *task);
6b6ca86b7   Trond Myklebust   SUNRPC: Add refco...
273
274
  struct rpc_xprt *	xprt_get(struct rpc_xprt *xprt);
  void			xprt_put(struct rpc_xprt *xprt);
d9ba131d8   Trond Myklebust   SUNRPC: Support d...
275
276
277
  struct rpc_xprt *	xprt_alloc(struct net *net, size_t size,
  				unsigned int num_prealloc,
  				unsigned int max_req);
e204e621b   Pavel Emelyanov   sunrpc: Factor ou...
278
  void			xprt_free(struct rpc_xprt *);
55aa4f58a   Chuck Lever   [PATCH] RPC: clie...
279

d8ed029d6   Alexey Dobriyan   [SUNRPC]: trivial...
280
  static inline __be32 *xprt_skip_transport_header(struct rpc_xprt *xprt, __be32 *p)
808012fbb   Chuck Lever   [PATCH] RPC: skip...
281
282
283
  {
  	return p + xprt->tsh_size;
  }
55aa4f58a   Chuck Lever   [PATCH] RPC: clie...
284
285
286
  /*
   * Transport switch helper functions
   */
81c098af3   \"Talpey, Thomas\   SUNRPC: Provide a...
287
288
  int			xprt_register_transport(struct xprt_class *type);
  int			xprt_unregister_transport(struct xprt_class *type);
441e3e242   Tom Talpey   SUNRPC: dynamical...
289
  int			xprt_load_transport(const char *);
fe3aca290   Chuck Lever   [PATCH] RPC: add ...
290
291
  void			xprt_set_retrans_timeout_def(struct rpc_task *task);
  void			xprt_set_retrans_timeout_rtt(struct rpc_task *task);
55aa4f58a   Chuck Lever   [PATCH] RPC: clie...
292
  void			xprt_wake_pending_tasks(struct rpc_xprt *xprt, int status);
b6ddf64ff   Trond Myklebust   SUNRPC: Fix up xp...
293
  void			xprt_wait_for_buffer_space(struct rpc_task *task, rpc_action action);
c7b2cae8a   Chuck Lever   [PATCH] RPC: sepa...
294
  void			xprt_write_space(struct rpc_xprt *xprt);
46c0ee8bc   Chuck Lever   [PATCH] RPC: sepa...
295
  void			xprt_adjust_cwnd(struct rpc_task *task, int result);
d8ed029d6   Alexey Dobriyan   [SUNRPC]: trivial...
296
  struct rpc_rqst *	xprt_lookup_rqst(struct rpc_xprt *xprt, __be32 xid);
1570c1e41   Chuck Lever   [PATCH] RPC: add ...
297
  void			xprt_complete_rqst(struct rpc_task *task, int copied);
a58dd398f   Chuck Lever   [PATCH] RPC: add ...
298
  void			xprt_release_rqst_cong(struct rpc_task *task);
62da3b248   Trond Myklebust   SUNRPC: Rename xp...
299
  void			xprt_disconnect_done(struct rpc_xprt *xprt);
66af1e558   Trond Myklebust   SUNRPC: Fix a rac...
300
  void			xprt_force_disconnect(struct rpc_xprt *xprt);
7c1d71cf5   Trond Myklebust   SUNRPC: Don't dis...
301
  void			xprt_conditional_disconnect(struct rpc_xprt *xprt, unsigned int cookie);
55aa4f58a   Chuck Lever   [PATCH] RPC: clie...
302
303
  
  /*
2226feb6b   Chuck Lever   [PATCH] RPC: rena...
304
305
306
307
308
   * Reserved bit positions in xprt->state
   */
  #define XPRT_LOCKED		(0)
  #define XPRT_CONNECTED		(1)
  #define XPRT_CONNECTING		(2)
632e3bdc5   Trond Myklebust   SUNRPC: Ensure cl...
309
  #define XPRT_CLOSE_WAIT		(3)
ec739ef03   Chuck Lever   SUNRPC: Create a ...
310
  #define XPRT_BOUND		(4)
4a68179d3   Chuck Lever   SUNRPC: Make RPC ...
311
  #define XPRT_BINDING		(5)
3b948ae5b   Trond Myklebust   SUNRPC: Allow the...
312
  #define XPRT_CLOSING		(6)
7d1e8255c   Trond Myklebust   SUNRPC: Add the e...
313
  #define XPRT_CONNECTION_ABORT	(7)
f75e6745a   Trond Myklebust   SUNRPC: Fix the p...
314
  #define XPRT_CONNECTION_CLOSE	(8)
2226feb6b   Chuck Lever   [PATCH] RPC: rena...
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
  
  static inline void xprt_set_connected(struct rpc_xprt *xprt)
  {
  	set_bit(XPRT_CONNECTED, &xprt->state);
  }
  
  static inline void xprt_clear_connected(struct rpc_xprt *xprt)
  {
  	clear_bit(XPRT_CONNECTED, &xprt->state);
  }
  
  static inline int xprt_connected(struct rpc_xprt *xprt)
  {
  	return test_bit(XPRT_CONNECTED, &xprt->state);
  }
  
  static inline int xprt_test_and_set_connected(struct rpc_xprt *xprt)
  {
  	return test_and_set_bit(XPRT_CONNECTED, &xprt->state);
  }
  
  static inline int xprt_test_and_clear_connected(struct rpc_xprt *xprt)
  {
  	return test_and_clear_bit(XPRT_CONNECTED, &xprt->state);
  }
  
  static inline void xprt_clear_connecting(struct rpc_xprt *xprt)
  {
  	smp_mb__before_clear_bit();
  	clear_bit(XPRT_CONNECTING, &xprt->state);
  	smp_mb__after_clear_bit();
  }
  
  static inline int xprt_connecting(struct rpc_xprt *xprt)
  {
  	return test_bit(XPRT_CONNECTING, &xprt->state);
  }
  
  static inline int xprt_test_and_set_connecting(struct rpc_xprt *xprt)
  {
  	return test_and_set_bit(XPRT_CONNECTING, &xprt->state);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
357

ec739ef03   Chuck Lever   SUNRPC: Create a ...
358
359
360
361
362
363
364
365
366
367
368
369
370
371
  static inline void xprt_set_bound(struct rpc_xprt *xprt)
  {
  	test_and_set_bit(XPRT_BOUND, &xprt->state);
  }
  
  static inline int xprt_bound(struct rpc_xprt *xprt)
  {
  	return test_bit(XPRT_BOUND, &xprt->state);
  }
  
  static inline void xprt_clear_bound(struct rpc_xprt *xprt)
  {
  	clear_bit(XPRT_BOUND, &xprt->state);
  }
4a68179d3   Chuck Lever   SUNRPC: Make RPC ...
372
373
374
375
376
377
378
379
380
381
382
  static inline void xprt_clear_binding(struct rpc_xprt *xprt)
  {
  	smp_mb__before_clear_bit();
  	clear_bit(XPRT_BINDING, &xprt->state);
  	smp_mb__after_clear_bit();
  }
  
  static inline int xprt_test_and_set_binding(struct rpc_xprt *xprt)
  {
  	return test_and_set_bit(XPRT_BINDING, &xprt->state);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
383
384
385
  #endif /* __KERNEL__*/
  
  #endif /* _LINUX_SUNRPC_XPRT_H */