From: John L. Hammond Date: Mon, 30 Mar 2015 18:32:46 +0000 (-0500) Subject: LU-6407 lnet: set task state before scheduling X-Git-Tag: 2.7.53~41 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=refs%2Fchanges%2F65%2F14265%2F3;p=fs%2Flustre-release.git 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 --- 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;