diff options
-rw-r--r-- | net/unix/af_unix.c | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 68bb70a62afe..1a9cdad4ab82 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
@@ -638,9 +638,8 @@ static int unix_stream_connect(struct socket *, struct sockaddr *, | |||
638 | static int unix_socketpair(struct socket *, struct socket *); | 638 | static int unix_socketpair(struct socket *, struct socket *); |
639 | static int unix_accept(struct socket *, struct socket *, int, bool); | 639 | static int unix_accept(struct socket *, struct socket *, int, bool); |
640 | static int unix_getname(struct socket *, struct sockaddr *, int); | 640 | static int unix_getname(struct socket *, struct sockaddr *, int); |
641 | static __poll_t unix_poll(struct file *, struct socket *, poll_table *); | 641 | static __poll_t unix_poll_mask(struct socket *, __poll_t); |
642 | static __poll_t unix_dgram_poll(struct file *, struct socket *, | 642 | static __poll_t unix_dgram_poll_mask(struct socket *, __poll_t); |
643 | poll_table *); | ||
644 | static int unix_ioctl(struct socket *, unsigned int, unsigned long); | 643 | static int unix_ioctl(struct socket *, unsigned int, unsigned long); |
645 | static int unix_shutdown(struct socket *, int); | 644 | static int unix_shutdown(struct socket *, int); |
646 | static int unix_stream_sendmsg(struct socket *, struct msghdr *, size_t); | 645 | static int unix_stream_sendmsg(struct socket *, struct msghdr *, size_t); |
@@ -681,7 +680,7 @@ static const struct proto_ops unix_stream_ops = { | |||
681 | .socketpair = unix_socketpair, | 680 | .socketpair = unix_socketpair, |
682 | .accept = unix_accept, | 681 | .accept = unix_accept, |
683 | .getname = unix_getname, | 682 | .getname = unix_getname, |
684 | .poll = unix_poll, | 683 | .poll_mask = unix_poll_mask, |
685 | .ioctl = unix_ioctl, | 684 | .ioctl = unix_ioctl, |
686 | .listen = unix_listen, | 685 | .listen = unix_listen, |
687 | .shutdown = unix_shutdown, | 686 | .shutdown = unix_shutdown, |
@@ -704,7 +703,7 @@ static const struct proto_ops unix_dgram_ops = { | |||
704 | .socketpair = unix_socketpair, | 703 | .socketpair = unix_socketpair, |
705 | .accept = sock_no_accept, | 704 | .accept = sock_no_accept, |
706 | .getname = unix_getname, | 705 | .getname = unix_getname, |
707 | .poll = unix_dgram_poll, | 706 | .poll_mask = unix_dgram_poll_mask, |
708 | .ioctl = unix_ioctl, | 707 | .ioctl = unix_ioctl, |
709 | .listen = sock_no_listen, | 708 | .listen = sock_no_listen, |
710 | .shutdown = unix_shutdown, | 709 | .shutdown = unix_shutdown, |
@@ -726,7 +725,7 @@ static const struct proto_ops unix_seqpacket_ops = { | |||
726 | .socketpair = unix_socketpair, | 725 | .socketpair = unix_socketpair, |
727 | .accept = unix_accept, | 726 | .accept = unix_accept, |
728 | .getname = unix_getname, | 727 | .getname = unix_getname, |
729 | .poll = unix_dgram_poll, | 728 | .poll_mask = unix_dgram_poll_mask, |
730 | .ioctl = unix_ioctl, | 729 | .ioctl = unix_ioctl, |
731 | .listen = unix_listen, | 730 | .listen = unix_listen, |
732 | .shutdown = unix_shutdown, | 731 | .shutdown = unix_shutdown, |
@@ -2630,13 +2629,10 @@ static int unix_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | |||
2630 | return err; | 2629 | return err; |
2631 | } | 2630 | } |
2632 | 2631 | ||
2633 | static __poll_t unix_poll(struct file *file, struct socket *sock, poll_table *wait) | 2632 | static __poll_t unix_poll_mask(struct socket *sock, __poll_t events) |
2634 | { | 2633 | { |
2635 | struct sock *sk = sock->sk; | 2634 | struct sock *sk = sock->sk; |
2636 | __poll_t mask; | 2635 | __poll_t mask = 0; |
2637 | |||
2638 | sock_poll_wait(file, sk_sleep(sk), wait); | ||
2639 | mask = 0; | ||
2640 | 2636 | ||
2641 | /* exceptional events? */ | 2637 | /* exceptional events? */ |
2642 | if (sk->sk_err) | 2638 | if (sk->sk_err) |
@@ -2665,15 +2661,11 @@ static __poll_t unix_poll(struct file *file, struct socket *sock, poll_table *wa | |||
2665 | return mask; | 2661 | return mask; |
2666 | } | 2662 | } |
2667 | 2663 | ||
2668 | static __poll_t unix_dgram_poll(struct file *file, struct socket *sock, | 2664 | static __poll_t unix_dgram_poll_mask(struct socket *sock, __poll_t events) |
2669 | poll_table *wait) | ||
2670 | { | 2665 | { |
2671 | struct sock *sk = sock->sk, *other; | 2666 | struct sock *sk = sock->sk, *other; |
2672 | unsigned int writable; | 2667 | int writable; |
2673 | __poll_t mask; | 2668 | __poll_t mask = 0; |
2674 | |||
2675 | sock_poll_wait(file, sk_sleep(sk), wait); | ||
2676 | mask = 0; | ||
2677 | 2669 | ||
2678 | /* exceptional events? */ | 2670 | /* exceptional events? */ |
2679 | if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue)) | 2671 | if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue)) |
@@ -2699,7 +2691,7 @@ static __poll_t unix_dgram_poll(struct file *file, struct socket *sock, | |||
2699 | } | 2691 | } |
2700 | 2692 | ||
2701 | /* No write status requested, avoid expensive OUT tests. */ | 2693 | /* No write status requested, avoid expensive OUT tests. */ |
2702 | if (!(poll_requested_events(wait) & (EPOLLWRBAND|EPOLLWRNORM|EPOLLOUT))) | 2694 | if (!(events & (EPOLLWRBAND|EPOLLWRNORM|EPOLLOUT))) |
2703 | return mask; | 2695 | return mask; |
2704 | 2696 | ||
2705 | writable = unix_writable(sk); | 2697 | writable = unix_writable(sk); |