--- ./net/sunrpc/xprtsock.c.xprt 2007-07-30 12:14:13.000000000 +0400 +++ ./net/sunrpc/xprtsock.c 2007-07-31 14:46:00.000000000 +0400 @@ -1049,8 +1049,8 @@ static void xs_udp_connect_worker(void * struct ve_struct *ve; ve = set_exec_env(xprt->owner_env); - down_read(&ve->op_sem); - if (!ve->is_running) + down_read(&xprt->owner_env->op_sem); + if (!xprt->owner_env->is_running) goto out; if (xprt->shutdown || xprt->addr.sin_port == 0) goto out; @@ -1098,7 +1098,7 @@ static void xs_udp_connect_worker(void * out: xprt_wake_pending_tasks(xprt, status); xprt_clear_connecting(xprt); - up_read(&ve->op_sem); + up_read(&xprt->owner_env->op_sem); (void)set_exec_env(ve); } @@ -1140,8 +1140,8 @@ static void xs_tcp_connect_worker(void * struct ve_struct *ve; ve = set_exec_env(xprt->owner_env); - down_read(&ve->op_sem); - if (!ve->is_running) + down_read(&xprt->owner_env->op_sem); + if (!xprt->owner_env->is_running) goto out; if (xprt->shutdown || xprt->addr.sin_port == 0) goto out; @@ -1219,7 +1219,7 @@ out: xprt_wake_pending_tasks(xprt, status); out_clear: xprt_clear_connecting(xprt); - up_read(&ve->op_sem); + up_read(&xprt->owner_env->op_sem); (void)set_exec_env(ve); }