|
@@ -1117,24 +1117,11 @@ EXPORT_SYMBOL(sock_create_lite);
|
|
/* No kernel lock held - perfect */
|
|
/* No kernel lock held - perfect */
|
|
static __poll_t sock_poll(struct file *file, poll_table *wait)
|
|
static __poll_t sock_poll(struct file *file, poll_table *wait)
|
|
{
|
|
{
|
|
- __poll_t busy_flag = 0;
|
|
|
|
- struct socket *sock;
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * We can't return errors to poll, so it's either yes or no.
|
|
|
|
- */
|
|
|
|
- sock = file->private_data;
|
|
|
|
-
|
|
|
|
- if (sk_can_busy_loop(sock->sk)) {
|
|
|
|
- /* this socket can poll_ll so tell the system call */
|
|
|
|
- busy_flag = POLL_BUSY_LOOP;
|
|
|
|
-
|
|
|
|
- /* once, only if requested by syscall */
|
|
|
|
- if (wait && (wait->_key & POLL_BUSY_LOOP))
|
|
|
|
- sk_busy_loop(sock->sk, 1);
|
|
|
|
- }
|
|
|
|
|
|
+ struct socket *sock = file->private_data;
|
|
|
|
+ __poll_t events = poll_requested_events(wait);
|
|
|
|
|
|
- return busy_flag | sock->ops->poll(file, sock, wait);
|
|
|
|
|
|
+ sock_poll_busy_loop(sock, events);
|
|
|
|
+ return sock->ops->poll(file, sock, wait) | sock_poll_busy_flag(sock);
|
|
}
|
|
}
|
|
|
|
|
|
static int sock_mmap(struct file *file, struct vm_area_struct *vma)
|
|
static int sock_mmap(struct file *file, struct vm_area_struct *vma)
|