diff options
Diffstat (limited to 'net/sunrpc')
-rw-r--r-- | net/sunrpc/xprt.c | 14 | ||||
-rw-r--r-- | net/sunrpc/xprtsock.c | 6 |
2 files changed, 9 insertions, 11 deletions
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index 9c45c522e3ef..57c5e77b155e 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c | |||
@@ -74,7 +74,7 @@ __xprt_lock_write(struct rpc_xprt *xprt, struct rpc_task *task) | |||
74 | { | 74 | { |
75 | struct rpc_rqst *req = task->tk_rqstp; | 75 | struct rpc_rqst *req = task->tk_rqstp; |
76 | 76 | ||
77 | if (test_and_set_bit(XPRT_LOCKED, &xprt->sockstate)) { | 77 | if (test_and_set_bit(XPRT_LOCKED, &xprt->state)) { |
78 | if (task == xprt->snd_task) | 78 | if (task == xprt->snd_task) |
79 | return 1; | 79 | return 1; |
80 | goto out_sleep; | 80 | goto out_sleep; |
@@ -88,7 +88,7 @@ __xprt_lock_write(struct rpc_xprt *xprt, struct rpc_task *task) | |||
88 | return 1; | 88 | return 1; |
89 | } | 89 | } |
90 | smp_mb__before_clear_bit(); | 90 | smp_mb__before_clear_bit(); |
91 | clear_bit(XPRT_LOCKED, &xprt->sockstate); | 91 | clear_bit(XPRT_LOCKED, &xprt->state); |
92 | smp_mb__after_clear_bit(); | 92 | smp_mb__after_clear_bit(); |
93 | out_sleep: | 93 | out_sleep: |
94 | dprintk("RPC: %4d failed to lock socket %p\n", task->tk_pid, xprt); | 94 | dprintk("RPC: %4d failed to lock socket %p\n", task->tk_pid, xprt); |
@@ -118,7 +118,7 @@ __xprt_lock_write_next(struct rpc_xprt *xprt) | |||
118 | { | 118 | { |
119 | struct rpc_task *task; | 119 | struct rpc_task *task; |
120 | 120 | ||
121 | if (test_and_set_bit(XPRT_LOCKED, &xprt->sockstate)) | 121 | if (test_and_set_bit(XPRT_LOCKED, &xprt->state)) |
122 | return; | 122 | return; |
123 | if (!xprt->nocong && RPCXPRT_CONGESTED(xprt)) | 123 | if (!xprt->nocong && RPCXPRT_CONGESTED(xprt)) |
124 | goto out_unlock; | 124 | goto out_unlock; |
@@ -139,7 +139,7 @@ __xprt_lock_write_next(struct rpc_xprt *xprt) | |||
139 | } | 139 | } |
140 | out_unlock: | 140 | out_unlock: |
141 | smp_mb__before_clear_bit(); | 141 | smp_mb__before_clear_bit(); |
142 | clear_bit(XPRT_LOCKED, &xprt->sockstate); | 142 | clear_bit(XPRT_LOCKED, &xprt->state); |
143 | smp_mb__after_clear_bit(); | 143 | smp_mb__after_clear_bit(); |
144 | } | 144 | } |
145 | 145 | ||
@@ -152,7 +152,7 @@ __xprt_release_write(struct rpc_xprt *xprt, struct rpc_task *task) | |||
152 | if (xprt->snd_task == task) { | 152 | if (xprt->snd_task == task) { |
153 | xprt->snd_task = NULL; | 153 | xprt->snd_task = NULL; |
154 | smp_mb__before_clear_bit(); | 154 | smp_mb__before_clear_bit(); |
155 | clear_bit(XPRT_LOCKED, &xprt->sockstate); | 155 | clear_bit(XPRT_LOCKED, &xprt->state); |
156 | smp_mb__after_clear_bit(); | 156 | smp_mb__after_clear_bit(); |
157 | __xprt_lock_write_next(xprt); | 157 | __xprt_lock_write_next(xprt); |
158 | } | 158 | } |
@@ -312,11 +312,11 @@ xprt_init_autodisconnect(unsigned long data) | |||
312 | spin_lock(&xprt->transport_lock); | 312 | spin_lock(&xprt->transport_lock); |
313 | if (!list_empty(&xprt->recv) || xprt->shutdown) | 313 | if (!list_empty(&xprt->recv) || xprt->shutdown) |
314 | goto out_abort; | 314 | goto out_abort; |
315 | if (test_and_set_bit(XPRT_LOCKED, &xprt->sockstate)) | 315 | if (test_and_set_bit(XPRT_LOCKED, &xprt->state)) |
316 | goto out_abort; | 316 | goto out_abort; |
317 | spin_unlock(&xprt->transport_lock); | 317 | spin_unlock(&xprt->transport_lock); |
318 | /* Let keventd close the socket */ | 318 | /* Let keventd close the socket */ |
319 | if (test_bit(XPRT_CONNECTING, &xprt->sockstate) != 0) | 319 | if (xprt_connecting(xprt)) |
320 | xprt_release_write(xprt, NULL); | 320 | xprt_release_write(xprt, NULL); |
321 | else | 321 | else |
322 | schedule_work(&xprt->task_cleanup); | 322 | schedule_work(&xprt->task_cleanup); |
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index bc90caab6088..76a33b54f436 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c | |||
@@ -925,9 +925,7 @@ out: | |||
925 | else | 925 | else |
926 | rpc_wake_up(&xprt->pending); | 926 | rpc_wake_up(&xprt->pending); |
927 | out_clear: | 927 | out_clear: |
928 | smp_mb__before_clear_bit(); | 928 | xprt_clear_connecting(xprt); |
929 | clear_bit(XPRT_CONNECTING, &xprt->sockstate); | ||
930 | smp_mb__after_clear_bit(); | ||
931 | } | 929 | } |
932 | 930 | ||
933 | /** | 931 | /** |
@@ -940,7 +938,7 @@ static void xs_connect(struct rpc_task *task) | |||
940 | { | 938 | { |
941 | struct rpc_xprt *xprt = task->tk_xprt; | 939 | struct rpc_xprt *xprt = task->tk_xprt; |
942 | 940 | ||
943 | if (!test_and_set_bit(XPRT_CONNECTING, &xprt->sockstate)) { | 941 | if (!xprt_test_and_set_connecting(xprt)) { |
944 | if (xprt->sock != NULL) { | 942 | if (xprt->sock != NULL) { |
945 | dprintk("RPC: xs_connect delayed xprt %p\n", xprt); | 943 | dprintk("RPC: xs_connect delayed xprt %p\n", xprt); |
946 | schedule_delayed_work(&xprt->sock_connect, | 944 | schedule_delayed_work(&xprt->sock_connect, |