diff options
author | David S. Miller <davem@davemloft.net> | 2008-06-17 04:06:01 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-06-17 04:06:01 -0400 |
commit | 22196d3648581b253f927186b30075fb005287b0 (patch) | |
tree | bf5f7477c02aaf6615e4ed18e62b516c1377455f /net/decnet | |
parent | 8ce9c6ede1504d29eead67862edc96c03dd4d0a2 (diff) |
decnet: Remove SOCK_SLEEP_{PRE,POST} usage.
Just expand the wait sequence. And as a nice side-effect
the timeout is respected now.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/decnet')
-rw-r--r-- | net/decnet/af_decnet.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c index fc2efe899e91..931bdf9cb756 100644 --- a/net/decnet/af_decnet.c +++ b/net/decnet/af_decnet.c | |||
@@ -1719,6 +1719,8 @@ static int dn_recvmsg(struct kiocb *iocb, struct socket *sock, | |||
1719 | * See if there is data ready to read, sleep if there isn't | 1719 | * See if there is data ready to read, sleep if there isn't |
1720 | */ | 1720 | */ |
1721 | for(;;) { | 1721 | for(;;) { |
1722 | DEFINE_WAIT(wait); | ||
1723 | |||
1722 | if (sk->sk_err) | 1724 | if (sk->sk_err) |
1723 | goto out; | 1725 | goto out; |
1724 | 1726 | ||
@@ -1748,14 +1750,11 @@ static int dn_recvmsg(struct kiocb *iocb, struct socket *sock, | |||
1748 | goto out; | 1750 | goto out; |
1749 | } | 1751 | } |
1750 | 1752 | ||
1751 | set_bit(SOCK_ASYNC_WAITDATA, &sock->flags); | 1753 | prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); |
1752 | SOCK_SLEEP_PRE(sk) | 1754 | set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); |
1753 | 1755 | sk_wait_event(sk, &timeo, dn_data_ready(sk, queue, flags, target)); | |
1754 | if (!dn_data_ready(sk, queue, flags, target)) | 1756 | clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); |
1755 | schedule(); | 1757 | finish_wait(sk->sk_sleep, &wait); |
1756 | |||
1757 | SOCK_SLEEP_POST(sk) | ||
1758 | clear_bit(SOCK_ASYNC_WAITDATA, &sock->flags); | ||
1759 | } | 1758 | } |
1760 | 1759 | ||
1761 | for(skb = queue->next; skb != (struct sk_buff *)queue; skb = nskb) { | 1760 | for(skb = queue->next; skb != (struct sk_buff *)queue; skb = nskb) { |
@@ -2002,18 +2001,19 @@ static int dn_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
2002 | * size. | 2001 | * size. |
2003 | */ | 2002 | */ |
2004 | if (dn_queue_too_long(scp, queue, flags)) { | 2003 | if (dn_queue_too_long(scp, queue, flags)) { |
2004 | DEFINE_WAIT(wait); | ||
2005 | |||
2005 | if (flags & MSG_DONTWAIT) { | 2006 | if (flags & MSG_DONTWAIT) { |
2006 | err = -EWOULDBLOCK; | 2007 | err = -EWOULDBLOCK; |
2007 | goto out; | 2008 | goto out; |
2008 | } | 2009 | } |
2009 | 2010 | ||
2010 | SOCK_SLEEP_PRE(sk) | 2011 | prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); |
2011 | 2012 | set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); | |
2012 | if (dn_queue_too_long(scp, queue, flags)) | 2013 | sk_wait_event(sk, &timeo, |
2013 | schedule(); | 2014 | !dn_queue_too_long(scp, queue, flags)); |
2014 | 2015 | clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); | |
2015 | SOCK_SLEEP_POST(sk) | 2016 | finish_wait(sk->sk_sleep, &wait); |
2016 | |||
2017 | continue; | 2017 | continue; |
2018 | } | 2018 | } |
2019 | 2019 | ||