aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/linux/namei.h8
-rw-r--r--include/linux/nfs_fs.h4
-rw-r--r--include/linux/nfs_xdr.h36
-rw-r--r--include/linux/sunrpc/debug.h3
-rw-r--r--include/linux/sunrpc/msg_prot.h25
-rw-r--r--include/linux/sunrpc/xdr.h6
-rw-r--r--include/linux/sunrpc/xprt.h222
7 files changed, 198 insertions, 106 deletions
diff --git a/include/linux/namei.h b/include/linux/namei.h
index 7db67b008cac..1c975d0d9e94 100644
--- a/include/linux/namei.h
+++ b/include/linux/namei.h
@@ -8,6 +8,7 @@ struct vfsmount;
8struct open_intent { 8struct open_intent {
9 int flags; 9 int flags;
10 int create_mode; 10 int create_mode;
11 struct file *file;
11}; 12};
12 13
13enum { MAX_NESTED_LINKS = 5 }; 14enum { MAX_NESTED_LINKS = 5 };
@@ -65,6 +66,13 @@ extern int FASTCALL(link_path_walk(const char *, struct nameidata *));
65extern void path_release(struct nameidata *); 66extern void path_release(struct nameidata *);
66extern void path_release_on_umount(struct nameidata *); 67extern void path_release_on_umount(struct nameidata *);
67 68
69extern int __user_path_lookup_open(const char __user *, unsigned lookup_flags, struct nameidata *nd, int open_flags);
70extern int path_lookup_open(const char *, unsigned lookup_flags, struct nameidata *, int open_flags);
71extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
72 int (*open)(struct inode *, struct file *));
73extern struct file *nameidata_to_filp(struct nameidata *nd, int flags);
74extern void release_open_intent(struct nameidata *);
75
68extern struct dentry * lookup_one_len(const char *, struct dentry *, int); 76extern struct dentry * lookup_one_len(const char *, struct dentry *, int);
69extern struct dentry * lookup_hash(struct qstr *, struct dentry *); 77extern struct dentry * lookup_hash(struct qstr *, struct dentry *);
70 78
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/nfs_xdr.h b/include/linux/nfs_xdr.h
index a2bf6914ff1b..60086dac11d5 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -96,12 +96,13 @@ struct nfs4_change_info {
96 u64 after; 96 u64 after;
97}; 97};
98 98
99struct nfs_seqid;
99/* 100/*
100 * Arguments to the open call. 101 * Arguments to the open call.
101 */ 102 */
102struct nfs_openargs { 103struct nfs_openargs {
103 const struct nfs_fh * fh; 104 const struct nfs_fh * fh;
104 __u32 seqid; 105 struct nfs_seqid * seqid;
105 int open_flags; 106 int open_flags;
106 __u64 clientid; 107 __u64 clientid;
107 __u32 id; 108 __u32 id;
@@ -136,7 +137,7 @@ struct nfs_openres {
136struct nfs_open_confirmargs { 137struct nfs_open_confirmargs {
137 const struct nfs_fh * fh; 138 const struct nfs_fh * fh;
138 nfs4_stateid stateid; 139 nfs4_stateid stateid;
139 __u32 seqid; 140 struct nfs_seqid * seqid;
140}; 141};
141 142
142struct nfs_open_confirmres { 143struct nfs_open_confirmres {
@@ -148,8 +149,8 @@ struct nfs_open_confirmres {
148 */ 149 */
149struct nfs_closeargs { 150struct nfs_closeargs {
150 struct nfs_fh * fh; 151 struct nfs_fh * fh;
151 nfs4_stateid stateid; 152 nfs4_stateid * stateid;
152 __u32 seqid; 153 struct nfs_seqid * seqid;
153 int open_flags; 154 int open_flags;
154}; 155};
155 156
@@ -164,30 +165,19 @@ struct nfs_lowner {
164 u32 id; 165 u32 id;
165}; 166};
166 167
167struct nfs_open_to_lock {
168 __u32 open_seqid;
169 nfs4_stateid open_stateid;
170 __u32 lock_seqid;
171 struct nfs_lowner lock_owner;
172};
173
174struct nfs_exist_lock {
175 nfs4_stateid stateid;
176 __u32 seqid;
177};
178
179struct nfs_lock_opargs { 168struct nfs_lock_opargs {
169 struct nfs_seqid * lock_seqid;
170 nfs4_stateid * lock_stateid;
171 struct nfs_seqid * open_seqid;
172 nfs4_stateid * open_stateid;
173 struct nfs_lowner lock_owner;
180 __u32 reclaim; 174 __u32 reclaim;
181 __u32 new_lock_owner; 175 __u32 new_lock_owner;
182 union {
183 struct nfs_open_to_lock *open_lock;
184 struct nfs_exist_lock *exist_lock;
185 } u;
186}; 176};
187 177
188struct nfs_locku_opargs { 178struct nfs_locku_opargs {
189 __u32 seqid; 179 struct nfs_seqid * seqid;
190 nfs4_stateid stateid; 180 nfs4_stateid * stateid;
191}; 181};
192 182
193struct nfs_lockargs { 183struct nfs_lockargs {
@@ -722,7 +712,7 @@ struct nfs_rpc_ops {
722 int (*write) (struct nfs_write_data *); 712 int (*write) (struct nfs_write_data *);
723 int (*commit) (struct nfs_write_data *); 713 int (*commit) (struct nfs_write_data *);
724 int (*create) (struct inode *, struct dentry *, 714 int (*create) (struct inode *, struct dentry *,
725 struct iattr *, int); 715 struct iattr *, int, struct nameidata *);
726 int (*remove) (struct inode *, struct qstr *); 716 int (*remove) (struct inode *, struct qstr *);
727 int (*unlink_setup) (struct rpc_message *, 717 int (*unlink_setup) (struct rpc_message *,
728 struct dentry *, struct qstr *); 718 struct dentry *, struct qstr *);
diff --git a/include/linux/sunrpc/debug.h b/include/linux/sunrpc/debug.h
index eadb31e3c198..1a42d902bc11 100644
--- a/include/linux/sunrpc/debug.h
+++ b/include/linux/sunrpc/debug.h
@@ -32,6 +32,7 @@
32#define RPCDBG_AUTH 0x0010 32#define RPCDBG_AUTH 0x0010
33#define RPCDBG_PMAP 0x0020 33#define RPCDBG_PMAP 0x0020
34#define RPCDBG_SCHED 0x0040 34#define RPCDBG_SCHED 0x0040
35#define RPCDBG_TRANS 0x0080
35#define RPCDBG_SVCSOCK 0x0100 36#define RPCDBG_SVCSOCK 0x0100
36#define RPCDBG_SVCDSP 0x0200 37#define RPCDBG_SVCDSP 0x0200
37#define RPCDBG_MISC 0x0400 38#define RPCDBG_MISC 0x0400
@@ -94,6 +95,8 @@ enum {
94 CTL_NLMDEBUG, 95 CTL_NLMDEBUG,
95 CTL_SLOTTABLE_UDP, 96 CTL_SLOTTABLE_UDP,
96 CTL_SLOTTABLE_TCP, 97 CTL_SLOTTABLE_TCP,
98 CTL_MIN_RESVPORT,
99 CTL_MAX_RESVPORT,
97}; 100};
98 101
99#endif /* _LINUX_SUNRPC_DEBUG_H_ */ 102#endif /* _LINUX_SUNRPC_DEBUG_H_ */
diff --git a/include/linux/sunrpc/msg_prot.h b/include/linux/sunrpc/msg_prot.h
index 15f115332389..f43f237360ae 100644
--- a/include/linux/sunrpc/msg_prot.h
+++ b/include/linux/sunrpc/msg_prot.h
@@ -76,5 +76,30 @@ enum rpc_auth_stat {
76 76
77#define RPC_MAXNETNAMELEN 256 77#define RPC_MAXNETNAMELEN 256
78 78
79/*
80 * From RFC 1831:
81 *
82 * "A record is composed of one or more record fragments. A record
83 * fragment is a four-byte header followed by 0 to (2**31) - 1 bytes of
84 * fragment data. The bytes encode an unsigned binary number; as with
85 * XDR integers, the byte order is from highest to lowest. The number
86 * encodes two values -- a boolean which indicates whether the fragment
87 * is the last fragment of the record (bit value 1 implies the fragment
88 * is the last fragment) and a 31-bit unsigned binary value which is the
89 * length in bytes of the fragment's data. The boolean value is the
90 * highest-order bit of the header; the length is the 31 low-order bits.
91 * (Note that this record specification is NOT in XDR standard form!)"
92 *
93 * The Linux RPC client always sends its requests in a single record
94 * fragment, limiting the maximum payload size for stream transports to
95 * 2GB.
96 */
97
98typedef u32 rpc_fraghdr;
99
100#define RPC_LAST_STREAM_FRAGMENT (1U << 31)
101#define RPC_FRAGMENT_SIZE_MASK (~RPC_LAST_STREAM_FRAGMENT)
102#define RPC_MAX_FRAGMENT_SIZE ((1U << 31) - 1)
103
79#endif /* __KERNEL__ */ 104#endif /* __KERNEL__ */
80#endif /* _LINUX_SUNRPC_MSGPROT_H_ */ 105#endif /* _LINUX_SUNRPC_MSGPROT_H_ */
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h
index 23448d0fb5bc..5da968729cf8 100644
--- a/include/linux/sunrpc/xdr.h
+++ b/include/linux/sunrpc/xdr.h
@@ -161,14 +161,10 @@ typedef struct {
161 161
162typedef size_t (*skb_read_actor_t)(skb_reader_t *desc, void *to, size_t len); 162typedef size_t (*skb_read_actor_t)(skb_reader_t *desc, void *to, size_t len);
163 163
164extern int csum_partial_copy_to_xdr(struct xdr_buf *, struct sk_buff *);
164extern ssize_t xdr_partial_copy_from_skb(struct xdr_buf *, unsigned int, 165extern ssize_t xdr_partial_copy_from_skb(struct xdr_buf *, unsigned int,
165 skb_reader_t *, skb_read_actor_t); 166 skb_reader_t *, skb_read_actor_t);
166 167
167struct socket;
168struct sockaddr;
169extern int xdr_sendpages(struct socket *, struct sockaddr *, int,
170 struct xdr_buf *, unsigned int, int);
171
172extern int xdr_encode_word(struct xdr_buf *, int, u32); 168extern int xdr_encode_word(struct xdr_buf *, int, u32);
173extern int xdr_decode_word(struct xdr_buf *, int, u32 *); 169extern int xdr_decode_word(struct xdr_buf *, int, u32 *);
174 170
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h
index e618c1649814..068e1fb0868b 100644
--- a/include/linux/sunrpc/xprt.h
+++ b/include/linux/sunrpc/xprt.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * linux/include/linux/sunrpc/clnt_xprt.h 2 * linux/include/linux/sunrpc/xprt.h
3 * 3 *
4 * Declarations for the RPC transport interface. 4 * Declarations for the RPC transport interface.
5 * 5 *
@@ -15,20 +15,6 @@
15#include <linux/sunrpc/sched.h> 15#include <linux/sunrpc/sched.h>
16#include <linux/sunrpc/xdr.h> 16#include <linux/sunrpc/xdr.h>
17 17
18/*
19 * The transport code maintains an estimate on the maximum number of out-
20 * standing RPC requests, using a smoothed version of the congestion
21 * avoidance implemented in 44BSD. This is basically the Van Jacobson
22 * congestion algorithm: If a retransmit occurs, the congestion window is
23 * halved; otherwise, it is incremented by 1/cwnd when
24 *
25 * - a reply is received and
26 * - a full number of requests are outstanding and
27 * - the congestion window hasn't been updated recently.
28 *
29 * Upper procedures may check whether a request would block waiting for
30 * a free RPC slot by using the RPC_CONGESTED() macro.
31 */
32extern unsigned int xprt_udp_slot_table_entries; 18extern unsigned int xprt_udp_slot_table_entries;
33extern unsigned int xprt_tcp_slot_table_entries; 19extern unsigned int xprt_tcp_slot_table_entries;
34 20
@@ -36,34 +22,23 @@ extern unsigned int xprt_tcp_slot_table_entries;
36#define RPC_DEF_SLOT_TABLE (16U) 22#define RPC_DEF_SLOT_TABLE (16U)
37#define RPC_MAX_SLOT_TABLE (128U) 23#define RPC_MAX_SLOT_TABLE (128U)
38 24
39#define RPC_CWNDSHIFT (8U)
40#define RPC_CWNDSCALE (1U << RPC_CWNDSHIFT)
41#define RPC_INITCWND RPC_CWNDSCALE
42#define RPC_MAXCWND(xprt) ((xprt)->max_reqs << RPC_CWNDSHIFT)
43#define RPCXPRT_CONGESTED(xprt) ((xprt)->cong >= (xprt)->cwnd)
44
45/* Default timeout values */
46#define RPC_MAX_UDP_TIMEOUT (60*HZ)
47#define RPC_MAX_TCP_TIMEOUT (600*HZ)
48
49/* 25/*
50 * Wait duration for an RPC TCP connection to be established. Solaris 26 * RPC call and reply header size as number of 32bit words (verifier
51 * NFS over TCP uses 60 seconds, for example, which is in line with how 27 * size computed separately)
52 * long a server takes to reboot.
53 */ 28 */
54#define RPC_CONNECT_TIMEOUT (60*HZ) 29#define RPC_CALLHDRSIZE 6
30#define RPC_REPHDRSIZE 4
55 31
56/* 32/*
57 * Delay an arbitrary number of seconds before attempting to reconnect 33 * Parameters for choosing a free port
58 * after an error.
59 */ 34 */
60#define RPC_REESTABLISH_TIMEOUT (15*HZ) 35extern unsigned int xprt_min_resvport;
36extern unsigned int xprt_max_resvport;
61 37
62/* RPC call and reply header size as number of 32bit words (verifier 38#define RPC_MIN_RESVPORT (1U)
63 * size computed separately) 39#define RPC_MAX_RESVPORT (65535U)
64 */ 40#define RPC_DEF_MIN_RESVPORT (650U)
65#define RPC_CALLHDRSIZE 6 41#define RPC_DEF_MAX_RESVPORT (1023U)
66#define RPC_REPHDRSIZE 4
67 42
68/* 43/*
69 * This describes a timeout strategy 44 * This describes a timeout strategy
@@ -76,6 +51,9 @@ struct rpc_timeout {
76 unsigned char to_exponential; 51 unsigned char to_exponential;
77}; 52};
78 53
54struct rpc_task;
55struct rpc_xprt;
56
79/* 57/*
80 * This describes a complete RPC request 58 * This describes a complete RPC request
81 */ 59 */
@@ -121,12 +99,21 @@ struct rpc_rqst {
121#define rq_svec rq_snd_buf.head 99#define rq_svec rq_snd_buf.head
122#define rq_slen rq_snd_buf.len 100#define rq_slen rq_snd_buf.len
123 101
124#define XPRT_LAST_FRAG (1 << 0) 102struct rpc_xprt_ops {
125#define XPRT_COPY_RECM (1 << 1) 103 void (*set_buffer_size)(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize);
126#define XPRT_COPY_XID (1 << 2) 104 int (*reserve_xprt)(struct rpc_task *task);
127#define XPRT_COPY_DATA (1 << 3) 105 void (*release_xprt)(struct rpc_xprt *xprt, struct rpc_task *task);
106 void (*connect)(struct rpc_task *task);
107 int (*send_request)(struct rpc_task *task);
108 void (*set_retrans_timeout)(struct rpc_task *task);
109 void (*timer)(struct rpc_task *task);
110 void (*release_request)(struct rpc_task *task);
111 void (*close)(struct rpc_xprt *xprt);
112 void (*destroy)(struct rpc_xprt *xprt);
113};
128 114
129struct rpc_xprt { 115struct rpc_xprt {
116 struct rpc_xprt_ops * ops; /* transport methods */
130 struct socket * sock; /* BSD socket layer */ 117 struct socket * sock; /* BSD socket layer */
131 struct sock * inet; /* INET layer */ 118 struct sock * inet; /* INET layer */
132 119
@@ -137,11 +124,13 @@ struct rpc_xprt {
137 unsigned long cong; /* current congestion */ 124 unsigned long cong; /* current congestion */
138 unsigned long cwnd; /* congestion window */ 125 unsigned long cwnd; /* congestion window */
139 126
140 unsigned int rcvsize, /* socket receive buffer size */ 127 size_t rcvsize, /* transport rcv buffer size */
141 sndsize; /* socket send buffer size */ 128 sndsize; /* transport send buffer size */
142 129
143 size_t max_payload; /* largest RPC payload size, 130 size_t max_payload; /* largest RPC payload size,
144 in bytes */ 131 in bytes */
132 unsigned int tsh_size; /* size of transport specific
133 header */
145 134
146 struct rpc_wait_queue sending; /* requests waiting to send */ 135 struct rpc_wait_queue sending; /* requests waiting to send */
147 struct rpc_wait_queue resend; /* requests waiting to resend */ 136 struct rpc_wait_queue resend; /* requests waiting to resend */
@@ -150,11 +139,9 @@ struct rpc_xprt {
150 struct list_head free; /* free slots */ 139 struct list_head free; /* free slots */
151 struct rpc_rqst * slot; /* slot table storage */ 140 struct rpc_rqst * slot; /* slot table storage */
152 unsigned int max_reqs; /* total slots */ 141 unsigned int max_reqs; /* total slots */
153 unsigned long sockstate; /* Socket state */ 142 unsigned long state; /* transport state */
154 unsigned char shutdown : 1, /* being shut down */ 143 unsigned char shutdown : 1, /* being shut down */
155 nocong : 1, /* no congestion control */ 144 resvport : 1; /* use a reserved port */
156 resvport : 1, /* use a reserved port */
157 stream : 1; /* TCP */
158 145
159 /* 146 /*
160 * XID 147 * XID
@@ -171,22 +158,27 @@ struct rpc_xprt {
171 unsigned long tcp_copied, /* copied to request */ 158 unsigned long tcp_copied, /* copied to request */
172 tcp_flags; 159 tcp_flags;
173 /* 160 /*
174 * Connection of sockets 161 * Connection of transports
175 */ 162 */
176 struct work_struct sock_connect; 163 unsigned long connect_timeout,
164 bind_timeout,
165 reestablish_timeout;
166 struct work_struct connect_worker;
177 unsigned short port; 167 unsigned short port;
168
178 /* 169 /*
179 * Disconnection of idle sockets 170 * Disconnection of idle transports
180 */ 171 */
181 struct work_struct task_cleanup; 172 struct work_struct task_cleanup;
182 struct timer_list timer; 173 struct timer_list timer;
183 unsigned long last_used; 174 unsigned long last_used,
175 idle_timeout;
184 176
185 /* 177 /*
186 * Send stuff 178 * Send stuff
187 */ 179 */
188 spinlock_t sock_lock; /* lock socket info */ 180 spinlock_t transport_lock; /* lock transport info */
189 spinlock_t xprt_lock; /* lock xprt info */ 181 spinlock_t reserve_lock; /* lock slot table */
190 struct rpc_task * snd_task; /* Task blocked in send */ 182 struct rpc_task * snd_task; /* Task blocked in send */
191 183
192 struct list_head recv; 184 struct list_head recv;
@@ -195,37 +187,111 @@ struct rpc_xprt {
195 void (*old_data_ready)(struct sock *, int); 187 void (*old_data_ready)(struct sock *, int);
196 void (*old_state_change)(struct sock *); 188 void (*old_state_change)(struct sock *);
197 void (*old_write_space)(struct sock *); 189 void (*old_write_space)(struct sock *);
198
199 wait_queue_head_t cong_wait;
200}; 190};
201 191
192#define XPRT_LAST_FRAG (1 << 0)
193#define XPRT_COPY_RECM (1 << 1)
194#define XPRT_COPY_XID (1 << 2)
195#define XPRT_COPY_DATA (1 << 3)
196
202#ifdef __KERNEL__ 197#ifdef __KERNEL__
203 198
204struct rpc_xprt * xprt_create_proto(int proto, struct sockaddr_in *addr, 199/*
205 struct rpc_timeout *toparms); 200 * Transport operations used by ULPs
206int xprt_destroy(struct rpc_xprt *); 201 */
207void xprt_set_timeout(struct rpc_timeout *, unsigned int, 202struct rpc_xprt * xprt_create_proto(int proto, struct sockaddr_in *addr, struct rpc_timeout *to);
208 unsigned long); 203void xprt_set_timeout(struct rpc_timeout *to, unsigned int retr, unsigned long incr);
209 204
210void xprt_reserve(struct rpc_task *); 205/*
211int xprt_prepare_transmit(struct rpc_task *); 206 * Generic internal transport functions
212void xprt_transmit(struct rpc_task *); 207 */
213void xprt_receive(struct rpc_task *); 208void xprt_connect(struct rpc_task *task);
209void xprt_reserve(struct rpc_task *task);
210int xprt_reserve_xprt(struct rpc_task *task);
211int xprt_reserve_xprt_cong(struct rpc_task *task);
212int xprt_prepare_transmit(struct rpc_task *task);
213void xprt_transmit(struct rpc_task *task);
214void xprt_abort_transmit(struct rpc_task *task);
214int xprt_adjust_timeout(struct rpc_rqst *req); 215int xprt_adjust_timeout(struct rpc_rqst *req);
215void xprt_release(struct rpc_task *); 216void xprt_release_xprt(struct rpc_xprt *xprt, struct rpc_task *task);
216void xprt_connect(struct rpc_task *); 217void xprt_release_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task);
217void xprt_sock_setbufsize(struct rpc_xprt *); 218void xprt_release(struct rpc_task *task);
218 219int xprt_destroy(struct rpc_xprt *xprt);
219#define XPRT_LOCKED 0 220
220#define XPRT_CONNECT 1 221static inline u32 *xprt_skip_transport_header(struct rpc_xprt *xprt, u32 *p)
221#define XPRT_CONNECTING 2 222{
222 223 return p + xprt->tsh_size;
223#define xprt_connected(xp) (test_bit(XPRT_CONNECT, &(xp)->sockstate)) 224}
224#define xprt_set_connected(xp) (set_bit(XPRT_CONNECT, &(xp)->sockstate)) 225
225#define xprt_test_and_set_connected(xp) (test_and_set_bit(XPRT_CONNECT, &(xp)->sockstate)) 226/*
226#define xprt_test_and_clear_connected(xp) \ 227 * Transport switch helper functions
227 (test_and_clear_bit(XPRT_CONNECT, &(xp)->sockstate)) 228 */
228#define xprt_clear_connected(xp) (clear_bit(XPRT_CONNECT, &(xp)->sockstate)) 229void xprt_set_retrans_timeout_def(struct rpc_task *task);
230void xprt_set_retrans_timeout_rtt(struct rpc_task *task);
231void xprt_wake_pending_tasks(struct rpc_xprt *xprt, int status);
232void xprt_wait_for_buffer_space(struct rpc_task *task);
233void xprt_write_space(struct rpc_xprt *xprt);
234void xprt_update_rtt(struct rpc_task *task);
235void xprt_adjust_cwnd(struct rpc_task *task, int result);
236struct rpc_rqst * xprt_lookup_rqst(struct rpc_xprt *xprt, u32 xid);
237void xprt_complete_rqst(struct rpc_task *task, int copied);
238void xprt_release_rqst_cong(struct rpc_task *task);
239void xprt_disconnect(struct rpc_xprt *xprt);
240
241/*
242 * Socket transport setup operations
243 */
244int xs_setup_udp(struct rpc_xprt *xprt, struct rpc_timeout *to);
245int xs_setup_tcp(struct rpc_xprt *xprt, struct rpc_timeout *to);
246
247/*
248 * Reserved bit positions in xprt->state
249 */
250#define XPRT_LOCKED (0)
251#define XPRT_CONNECTED (1)
252#define XPRT_CONNECTING (2)
253
254static inline void xprt_set_connected(struct rpc_xprt *xprt)
255{
256 set_bit(XPRT_CONNECTED, &xprt->state);
257}
258
259static inline void xprt_clear_connected(struct rpc_xprt *xprt)
260{
261 clear_bit(XPRT_CONNECTED, &xprt->state);
262}
263
264static inline int xprt_connected(struct rpc_xprt *xprt)
265{
266 return test_bit(XPRT_CONNECTED, &xprt->state);
267}
268
269static inline int xprt_test_and_set_connected(struct rpc_xprt *xprt)
270{
271 return test_and_set_bit(XPRT_CONNECTED, &xprt->state);
272}
273
274static inline int xprt_test_and_clear_connected(struct rpc_xprt *xprt)
275{
276 return test_and_clear_bit(XPRT_CONNECTED, &xprt->state);
277}
278
279static inline void xprt_clear_connecting(struct rpc_xprt *xprt)
280{
281 smp_mb__before_clear_bit();
282 clear_bit(XPRT_CONNECTING, &xprt->state);
283 smp_mb__after_clear_bit();
284}
285
286static inline int xprt_connecting(struct rpc_xprt *xprt)
287{
288 return test_bit(XPRT_CONNECTING, &xprt->state);
289}
290
291static inline int xprt_test_and_set_connecting(struct rpc_xprt *xprt)
292{
293 return test_and_set_bit(XPRT_CONNECTING, &xprt->state);
294}
229 295
230#endif /* __KERNEL__*/ 296#endif /* __KERNEL__*/
231 297