Phonet: do not set POLLOUT in case of send buffer overflow
[linux-2.6.git] / net / phonet / socket.c
index 69c8b82..7c91f73 100644 (file)
@@ -23,6 +23,7 @@
  * 02110-1301 USA
  */
 
+#include <linux/gfp.h>
 #include <linux/kernel.h>
 #include <linux/net.h>
 #include <linux/poll.h>
@@ -264,7 +265,7 @@ static unsigned int pn_socket_poll(struct file *file, struct socket *sock,
        struct pep_sock *pn = pep_sk(sk);
        unsigned int mask = 0;
 
-       poll_wait(file, &sock->wait, wait);
+       poll_wait(file, sk_sleep(sk), wait);
 
        switch (sk->sk_state) {
        case TCP_LISTEN:
@@ -280,7 +281,9 @@ static unsigned int pn_socket_poll(struct file *file, struct socket *sock,
        if (!mask && sk->sk_state == TCP_CLOSE_WAIT)
                return POLLHUP;
 
-       if (sk->sk_state == TCP_ESTABLISHED && atomic_read(&pn->tx_credits))
+       if (sk->sk_state == TCP_ESTABLISHED &&
+               atomic_read(&sk->sk_wmem_alloc) < sk->sk_sndbuf &&
+               atomic_read(&pn->tx_credits))
                mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
 
        return mask;