From: Trond Myklebust <trond.myklebust@fys.uio.no>

--=-fcOvt38R9ystABNRBhOE
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

RPC,NFS: remove instances of tests for waitqueue_active(). Those can be
racy.

RPC: remove unnecessary support for sk->sk_sleep on those sockets that
are owned by the RPC client.

Cheers,
  Trond

--=-fcOvt38R9ystABNRBhOE
Content-Disposition: attachment; filename=linux-2.6.4-05-unrace.dif
Content-Transfer-Encoding: base64
Content-Type: text/plain; name=linux-2.6.4-05-unrace.dif; charset=ISO-8859-1

IGluY2x1ZGUvbGludXgvbmZzX3BhZ2UuaCB8ICAgIDMgKy0tDQogbmV0L3N1bnJwYy9zY2hlZC5j
ICAgICAgIHwgICAgOSArKystLS0tLS0NCiBuZXQvc3VucnBjL3hwcnQuYyAgICAgICAgfCAgIDEy
ICsrLS0tLS0tLS0tLQ0KIDMgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxOCBkZWxl
dGlvbnMoLSkNCg0KZGlmZiAtdSAtLXJlY3Vyc2l2ZSAtLW5ldy1maWxlIC0tc2hvdy1jLWZ1bmN0
aW9uIGxpbnV4LTIuNi4zLTIyLWNvbmdlc3Rpb24vaW5jbHVkZS9saW51eC9uZnNfcGFnZS5oIGxp
bnV4LTIuNi4zLTIzLXVucmFjZS9pbmNsdWRlL2xpbnV4L25mc19wYWdlLmgNCi0tLSBsaW51eC0y
LjYuMy0yMi1jb25nZXN0aW9uL2luY2x1ZGUvbGludXgvbmZzX3BhZ2UuaAkyMDA0LTAyLTI5IDEz
OjM1OjM0LjAwMDAwMDAwMCAtMDgwMA0KKysrIGxpbnV4LTIuNi4zLTIzLXVucmFjZS9pbmNsdWRl
L2xpbnV4L25mc19wYWdlLmgJMjAwNC0wMy0wMSAxNDo0ODo0NC4wMDAwMDAwMDAgLTA4MDANCkBA
IC0xMDAsOCArMTAwLDcgQEAgbmZzX3VubG9ja19yZXF1ZXN0KHN0cnVjdCBuZnNfcGFnZSAqcmVx
KQ0KIAlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsNCiAJY2xlYXJfYml0KFBHX0JVU1ksICZy
ZXEtPndiX2ZsYWdzKTsNCiAJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsNCi0JaWYgKHdhaXRx
dWV1ZV9hY3RpdmUoJnJlcS0+d2Jfd2FpdCkpDQotCQl3YWtlX3VwX2FsbCgmcmVxLT53Yl93YWl0
KTsNCisJd2FrZV91cF9hbGwoJnJlcS0+d2Jfd2FpdCk7DQogCW5mc19yZWxlYXNlX3JlcXVlc3Qo
cmVxKTsNCiB9DQogDQpkaWZmIC11IC0tcmVjdXJzaXZlIC0tbmV3LWZpbGUgLS1zaG93LWMtZnVu
Y3Rpb24gbGludXgtMi42LjMtMjItY29uZ2VzdGlvbi9uZXQvc3VucnBjL3NjaGVkLmMgbGludXgt
Mi42LjMtMjMtdW5yYWNlL25ldC9zdW5ycGMvc2NoZWQuYw0KLS0tIGxpbnV4LTIuNi4zLTIyLWNv
bmdlc3Rpb24vbmV0L3N1bnJwYy9zY2hlZC5jCTIwMDQtMDItMjkgMTM6MzM6NTUuMDAwMDAwMDAw
IC0wODAwDQorKysgbGludXgtMi42LjMtMjMtdW5yYWNlL25ldC9zdW5ycGMvc2NoZWQuYwkyMDA0
LTAzLTAxIDE0OjQ5OjUyLjAwMDAwMDAwMCAtMDgwMA0KQEAgLTI1NSwxMyArMjU1LDExIEBAIHJw
Y19tYWtlX3J1bm5hYmxlKHN0cnVjdCBycGNfdGFzayAqdGFzaykNCiAJCQkJcmV0dXJuOw0KIAkJ
CX0NCiAJCQlycGNfY2xlYXJfc2xlZXBpbmcodGFzayk7DQotCQkJaWYgKHdhaXRxdWV1ZV9hY3Rp
dmUoJnJwY2lvZF9pZGxlKSkNCi0JCQkJd2FrZV91cCgmcnBjaW9kX2lkbGUpOw0KKwkJCXdha2Vf
dXAoJnJwY2lvZF9pZGxlKTsNCiAJCX0NCiAJfSBlbHNlIHsNCiAJCXJwY19jbGVhcl9zbGVlcGlu
Zyh0YXNrKTsNCi0JCWlmICh3YWl0cXVldWVfYWN0aXZlKCZ0YXNrLT50a193YWl0KSkNCi0JCQl3
YWtlX3VwKCZ0YXNrLT50a193YWl0KTsNCisJCXdha2VfdXAoJnRhc2stPnRrX3dhaXQpOw0KIAl9
DQogfQ0KIA0KQEAgLTI4Nyw4ICsyODUsNyBAQCB2b2lkIHJwY2lvZF93YWtlX3VwKHZvaWQpDQog
ew0KIAlpZihycGNpb2RfcGlkPT0wKQ0KIAkJcHJpbnRrKEtFUk5fRVJSICJycGNpb2Q6IHdvdCBu
byBkYWVtb24/XG4iKTsNCi0JaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnJwY2lvZF9pZGxlKSkNCi0J
CXdha2VfdXAoJnJwY2lvZF9pZGxlKTsNCisJd2FrZV91cCgmcnBjaW9kX2lkbGUpOw0KIH0NCiAN
CiAvKg0KZGlmZiAtdSAtLXJlY3Vyc2l2ZSAtLW5ldy1maWxlIC0tc2hvdy1jLWZ1bmN0aW9uIGxp
bnV4LTIuNi4zLTIyLWNvbmdlc3Rpb24vbmV0L3N1bnJwYy94cHJ0LmMgbGludXgtMi42LjMtMjMt
dW5yYWNlL25ldC9zdW5ycGMveHBydC5jDQotLS0gbGludXgtMi42LjMtMjItY29uZ2VzdGlvbi9u
ZXQvc3VucnBjL3hwcnQuYwkyMDA0LTAyLTI5IDEzOjM1OjA5LjAwMDAwMDAwMCAtMDgwMA0KKysr
IGxpbnV4LTIuNi4zLTIzLXVucmFjZS9uZXQvc3VucnBjL3hwcnQuYwkyMDA0LTAzLTAxIDE0OjUw
OjI3LjAwMDAwMDAwMCAtMDgwMA0KQEAgLTc4NCw4ICs3ODQsNiBAQCB1ZHBfZGF0YV9yZWFkeShz
dHJ1Y3Qgc29jayAqc2ssIGludCBsZW4pDQogIGRyb3BpdDoNCiAJc2tiX2ZyZWVfZGF0YWdyYW0o
c2ssIHNrYik7DQogIG91dDoNCi0JaWYgKHNrLT5za19zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZl
KHNrLT5za19zbGVlcCkpDQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoc2stPnNrX3NsZWVwKTsN
CiAJcmVhZF91bmxvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsNCiB9DQogDQpAQCAtMTA0NSw4
ICsxMDQzLDYgQEAgdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spDQogCQlicmVhazsN
CiAJfQ0KICBvdXQ6DQotCWlmIChzay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzay0+
c2tfc2xlZXApKQ0KLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbChzay0+c2tfc2xlZXApOw0K
IAlyZWFkX3VubG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOw0KIH0NCiANCkBAIC0xMDg2LDgg
KzEwODIsNiBAQCB4cHJ0X3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaykNCiAJaWYgKHhwcnQt
PnNuZF90YXNrICYmIHhwcnQtPnNuZF90YXNrLT50a19ycGN3YWl0ID09ICZ4cHJ0LT5wZW5kaW5n
KQ0KIAkJcnBjX3dha2VfdXBfdGFzayh4cHJ0LT5zbmRfdGFzayk7DQogCXNwaW5fdW5sb2NrX2Jo
KCZ4cHJ0LT5zb2NrX2xvY2spOw0KLQlpZiAoc2stPnNrX3NsZWVwICYmIHdhaXRxdWV1ZV9hY3Rp
dmUoc2stPnNrX3NsZWVwKSkNCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShzay0+c2tfc2xlZXAp
Ow0KIG91dDoNCiAJcmVhZF91bmxvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsNCiB9DQpAQCAt
MTYzMCw4ICsxNjI0LDcgQEAgeHBydF9zaHV0ZG93bihzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpDQog
CXJwY193YWtlX3VwKCZ4cHJ0LT5yZXNlbmQpOw0KIAlycGNfd2FrZV91cCgmeHBydC0+cGVuZGlu
Zyk7DQogCXJwY193YWtlX3VwKCZ4cHJ0LT5iYWNrbG9nKTsNCi0JaWYgKHdhaXRxdWV1ZV9hY3Rp
dmUoJnhwcnQtPmNvbmdfd2FpdCkpDQotCQl3YWtlX3VwKCZ4cHJ0LT5jb25nX3dhaXQpOw0KKwl3
YWtlX3VwKCZ4cHJ0LT5jb25nX3dhaXQpOw0KIAlkZWxfdGltZXJfc3luYygmeHBydC0+dGltZXIp
Ow0KIH0NCiANCkBAIC0xNjQxLDggKzE2MzQsNyBAQCB4cHJ0X3NodXRkb3duKHN0cnVjdCBycGNf
eHBydCAqeHBydCkNCiBpbnQNCiB4cHJ0X2NsZWFyX2JhY2tsb2coc3RydWN0IHJwY194cHJ0ICp4
cHJ0KSB7DQogCXJwY193YWtlX3VwX25leHQoJnhwcnQtPmJhY2tsb2cpOw0KLQlpZiAod2FpdHF1
ZXVlX2FjdGl2ZSgmeHBydC0+Y29uZ193YWl0KSkNCi0JCXdha2VfdXAoJnhwcnQtPmNvbmdfd2Fp
dCk7DQorCXdha2VfdXAoJnhwcnQtPmNvbmdfd2FpdCk7DQogCXJldHVybiAxOw0KIH0NCiANCg==

--=-fcOvt38R9ystABNRBhOE--



---

 25-akpm/include/linux/nfs_page.h |    3 +--
 25-akpm/net/sunrpc/sched.c       |    9 +++------
 25-akpm/net/sunrpc/xprt.c        |   12 ++----------
 3 files changed, 6 insertions(+), 18 deletions(-)

diff -puN include/linux/nfs_page.h~nfs-05-unrace include/linux/nfs_page.h
--- 25/include/linux/nfs_page.h~nfs-05-unrace	2004-03-14 15:12:36.569171112 -0800
+++ 25-akpm/include/linux/nfs_page.h	2004-03-14 15:12:36.574170352 -0800
@@ -100,8 +100,7 @@ nfs_unlock_request(struct nfs_page *req)
 	smp_mb__before_clear_bit();
 	clear_bit(PG_BUSY, &req->wb_flags);
 	smp_mb__after_clear_bit();
-	if (waitqueue_active(&req->wb_wait))
-		wake_up_all(&req->wb_wait);
+	wake_up_all(&req->wb_wait);
 	nfs_release_request(req);
 }
 
diff -puN net/sunrpc/sched.c~nfs-05-unrace net/sunrpc/sched.c
--- 25/net/sunrpc/sched.c~nfs-05-unrace	2004-03-14 15:12:36.571170808 -0800
+++ 25-akpm/net/sunrpc/sched.c	2004-03-14 15:12:36.576170048 -0800
@@ -255,13 +255,11 @@ rpc_make_runnable(struct rpc_task *task)
 				return;
 			}
 			rpc_clear_sleeping(task);
-			if (waitqueue_active(&rpciod_idle))
-				wake_up(&rpciod_idle);
+			wake_up(&rpciod_idle);
 		}
 	} else {
 		rpc_clear_sleeping(task);
-		if (waitqueue_active(&task->tk_wait))
-			wake_up(&task->tk_wait);
+		wake_up(&task->tk_wait);
 	}
 }
 
@@ -287,8 +285,7 @@ void rpciod_wake_up(void)
 {
 	if(rpciod_pid==0)
 		printk(KERN_ERR "rpciod: wot no daemon?\n");
-	if (waitqueue_active(&rpciod_idle))
-		wake_up(&rpciod_idle);
+	wake_up(&rpciod_idle);
 }
 
 /*
diff -puN net/sunrpc/xprt.c~nfs-05-unrace net/sunrpc/xprt.c
--- 25/net/sunrpc/xprt.c~nfs-05-unrace	2004-03-14 15:12:36.572170656 -0800
+++ 25-akpm/net/sunrpc/xprt.c	2004-03-14 15:12:36.578169744 -0800
@@ -782,8 +782,6 @@ udp_data_ready(struct sock *sk, int len)
  dropit:
 	skb_free_datagram(sk, skb);
  out:
-	if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
-		wake_up_interruptible(sk->sk_sleep);
 	read_unlock(&sk->sk_callback_lock);
 }
 
@@ -1043,8 +1041,6 @@ tcp_state_change(struct sock *sk)
 		break;
 	}
  out:
-	if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
-		wake_up_interruptible_all(sk->sk_sleep);
 	read_unlock(&sk->sk_callback_lock);
 }
 
@@ -1084,8 +1080,6 @@ xprt_write_space(struct sock *sk)
 	if (xprt->snd_task && xprt->snd_task->tk_rpcwait == &xprt->pending)
 		rpc_wake_up_task(xprt->snd_task);
 	spin_unlock_bh(&xprt->sock_lock);
-	if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
-		wake_up_interruptible(sk->sk_sleep);
 out:
 	read_unlock(&sk->sk_callback_lock);
 }
@@ -1626,8 +1620,7 @@ xprt_shutdown(struct rpc_xprt *xprt)
 	rpc_wake_up(&xprt->resend);
 	rpc_wake_up(&xprt->pending);
 	rpc_wake_up(&xprt->backlog);
-	if (waitqueue_active(&xprt->cong_wait))
-		wake_up(&xprt->cong_wait);
+	wake_up(&xprt->cong_wait);
 	del_timer_sync(&xprt->timer);
 }
 
@@ -1637,8 +1630,7 @@ xprt_shutdown(struct rpc_xprt *xprt)
 int
 xprt_clear_backlog(struct rpc_xprt *xprt) {
 	rpc_wake_up_next(&xprt->backlog);
-	if (waitqueue_active(&xprt->cong_wait))
-		wake_up(&xprt->cong_wait);
+	wake_up(&xprt->cong_wait);
 	return 1;
 }
 

_