diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/sunrpc/xprt.h | 60 |
1 files changed, 49 insertions, 11 deletions
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 41ce296dded1..009a3bb4f997 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
| @@ -163,7 +163,7 @@ struct rpc_xprt { | |||
| 163 | struct list_head free; /* free slots */ | 163 | struct list_head free; /* free slots */ |
| 164 | struct rpc_rqst * slot; /* slot table storage */ | 164 | struct rpc_rqst * slot; /* slot table storage */ |
| 165 | unsigned int max_reqs; /* total slots */ | 165 | unsigned int max_reqs; /* total slots */ |
| 166 | unsigned long sockstate; /* Socket state */ | 166 | unsigned long state; /* transport state */ |
| 167 | unsigned char shutdown : 1, /* being shut down */ | 167 | unsigned char shutdown : 1, /* being shut down */ |
| 168 | nocong : 1, /* no congestion control */ | 168 | nocong : 1, /* no congestion control */ |
| 169 | resvport : 1, /* use a reserved port */ | 169 | resvport : 1, /* use a reserved port */ |
| @@ -240,16 +240,54 @@ int xs_setup_udp(struct rpc_xprt *, | |||
| 240 | int xs_setup_tcp(struct rpc_xprt *, | 240 | int xs_setup_tcp(struct rpc_xprt *, |
| 241 | struct rpc_timeout *); | 241 | struct rpc_timeout *); |
| 242 | 242 | ||
| 243 | #define XPRT_LOCKED 0 | 243 | /* |
| 244 | #define XPRT_CONNECT 1 | 244 | * Reserved bit positions in xprt->state |
| 245 | #define XPRT_CONNECTING 2 | 245 | */ |
| 246 | 246 | #define XPRT_LOCKED (0) | |
| 247 | #define xprt_connected(xp) (test_bit(XPRT_CONNECT, &(xp)->sockstate)) | 247 | #define XPRT_CONNECTED (1) |
| 248 | #define xprt_set_connected(xp) (set_bit(XPRT_CONNECT, &(xp)->sockstate)) | 248 | #define XPRT_CONNECTING (2) |
| 249 | #define xprt_test_and_set_connected(xp) (test_and_set_bit(XPRT_CONNECT, &(xp)->sockstate)) | 249 | |
| 250 | #define xprt_test_and_clear_connected(xp) \ | 250 | static inline void xprt_set_connected(struct rpc_xprt *xprt) |
| 251 | (test_and_clear_bit(XPRT_CONNECT, &(xp)->sockstate)) | 251 | { |
| 252 | #define xprt_clear_connected(xp) (clear_bit(XPRT_CONNECT, &(xp)->sockstate)) | 252 | set_bit(XPRT_CONNECTED, &xprt->state); |
| 253 | } | ||
| 254 | |||
| 255 | static inline void xprt_clear_connected(struct rpc_xprt *xprt) | ||
| 256 | { | ||
| 257 | clear_bit(XPRT_CONNECTED, &xprt->state); | ||
| 258 | } | ||
| 259 | |||
| 260 | static inline int xprt_connected(struct rpc_xprt *xprt) | ||
| 261 | { | ||
| 262 | return test_bit(XPRT_CONNECTED, &xprt->state); | ||
| 263 | } | ||
| 264 | |||
| 265 | static inline int xprt_test_and_set_connected(struct rpc_xprt *xprt) | ||
| 266 | { | ||
| 267 | return test_and_set_bit(XPRT_CONNECTED, &xprt->state); | ||
| 268 | } | ||
| 269 | |||
| 270 | static inline int xprt_test_and_clear_connected(struct rpc_xprt *xprt) | ||
| 271 | { | ||
| 272 | return test_and_clear_bit(XPRT_CONNECTED, &xprt->state); | ||
| 273 | } | ||
| 274 | |||
| 275 | static inline void xprt_clear_connecting(struct rpc_xprt *xprt) | ||
| 276 | { | ||
| 277 | smp_mb__before_clear_bit(); | ||
| 278 | clear_bit(XPRT_CONNECTING, &xprt->state); | ||
| 279 | smp_mb__after_clear_bit(); | ||
| 280 | } | ||
| 281 | |||
| 282 | static inline int xprt_connecting(struct rpc_xprt *xprt) | ||
| 283 | { | ||
| 284 | return test_bit(XPRT_CONNECTING, &xprt->state); | ||
| 285 | } | ||
| 286 | |||
| 287 | static inline int xprt_test_and_set_connecting(struct rpc_xprt *xprt) | ||
| 288 | { | ||
| 289 | return test_and_set_bit(XPRT_CONNECTING, &xprt->state); | ||
| 290 | } | ||
| 253 | 291 | ||
| 254 | #endif /* __KERNEL__*/ | 292 | #endif /* __KERNEL__*/ |
| 255 | 293 | ||
