diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2012-05-07 12:31:20 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-05-15 17:28:02 -0400 |
commit | 4260c13ba9102d466f017139de990dfffaf4d997 (patch) | |
tree | 2ab48c5e1a2dcb242448e7b5883817ee68950de1 | |
parent | ff353d86a92ee709e18fa485423dbaa7a52af8f3 (diff) | |
download | op-kernel-dev-4260c13ba9102d466f017139de990dfffaf4d997.zip op-kernel-dev-4260c13ba9102d466f017139de990dfffaf4d997.tar.gz |
NFC: Update the LLCP poll mask
Fix the poll mask depending on the socket state. POLLOUT was missing
for example.
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | net/nfc/llcp/sock.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/net/nfc/llcp/sock.c b/net/nfc/llcp/sock.c index 99196d3..3f339b1 100644 --- a/net/nfc/llcp/sock.c +++ b/net/nfc/llcp/sock.c @@ -340,11 +340,24 @@ static unsigned int llcp_sock_poll(struct file *file, struct socket *sock, mask |= POLLERR; if (!skb_queue_empty(&sk->sk_receive_queue)) - mask |= POLLIN; + mask |= POLLIN | POLLRDNORM; if (sk->sk_state == LLCP_CLOSED) mask |= POLLHUP; + if (sk->sk_shutdown & RCV_SHUTDOWN) + mask |= POLLRDHUP | POLLIN | POLLRDNORM; + + if (sk->sk_shutdown == SHUTDOWN_MASK) + mask |= POLLHUP; + + if (sock_writeable(sk)) + mask |= POLLOUT | POLLWRNORM | POLLWRBAND; + else + set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags); + + pr_debug("mask 0x%x\n", mask); + return mask; } |