return rc;
}
-#ifndef HAVE_SK_SLEEP
-static inline wait_queue_head_t *sk_sleep(struct sock *sk)
-{
- return sk->sk_sleep;
-}
-#endif
-
int
lnet_sock_accept(struct socket **newsockp, struct socket *sock)
{
- wait_queue_entry_t wait;
struct socket *newsock;
int rc;
#else
rc = sock->ops->accept(sock, newsock, O_NONBLOCK);
#endif
- 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);
-#ifdef HAVE_KERN_SOCK_ACCEPT_FLAG_ARG
- rc = sock->ops->accept(sock, newsock, O_NONBLOCK, false);
-#else
- rc = sock->ops->accept(sock, newsock, O_NONBLOCK);
-#endif
- }
-
if (rc != 0)
goto failed;