From: Trond Myklebust --=-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; } _