From 9002fabc81f6cb1c467c5b89548161579fcd48f6 Mon Sep 17 00:00:00 2001 From: "John L. Hammond" Date: Mon, 30 Mar 2015 13:32:46 -0500 Subject: [PATCH] LU-6407 lnet: set task state before scheduling In 0b868add80281c085ce1b297d1cb078deaab802a when libcfs_sock_accept() was made into lnet_sock_accept() a call to set_current_state(TASK_INTERRUPTIBLE) got dropped. Restore it. Signed-off-by: John L. Hammond Change-Id: I132d6a611e5677ad52358178aa566ca805536e61 Reviewed-on: http://review.whamcloud.com/14265 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: James Simmons Reviewed-by: Amir Shehata Reviewed-by: Oleg Drokin --- lnet/lnet/lib-socket.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lnet/lnet/lib-socket.c b/lnet/lnet/lib-socket.c index 80ca9a7..0b6fc00 100644 --- a/lnet/lnet/lib-socket.c +++ b/lnet/lnet/lib-socket.c @@ -561,8 +561,6 @@ lnet_sock_accept(struct socket **newsockp, struct socket *sock) struct socket *newsock; int rc; - init_waitqueue_entry(&wait, current); - /* XXX this should add a ref to sock->ops->owner, if * TCP could be a module */ rc = sock_create_lite(PF_PACKET, sock->type, IPPROTO_TCP, &newsock); @@ -572,18 +570,18 @@ lnet_sock_accept(struct socket **newsockp, struct socket *sock) } newsock->ops = sock->ops; - add_wait_queue(sk_sleep(sock->sk), &wait); rc = sock->ops->accept(sock, newsock, O_NONBLOCK); if (rc == -EAGAIN) { /* Nothing ready, so wait for activity */ + init_waitqueue_entry(&wait, current); + add_wait_queue(sk_sleep(sock->sk), &wait); + set_current_state(TASK_INTERRUPTIBLE); schedule(); + remove_wait_queue(sk_sleep(sock->sk), &wait); rc = sock->ops->accept(sock, newsock, O_NONBLOCK); } - remove_wait_queue(sk_sleep(sock->sk), &wait); - set_current_state(TASK_RUNNING); - if (rc != 0) goto failed; -- 1.8.3.1