|
@@ -386,8 +386,6 @@ unsigned int tcp_poll(struct file *file, struct socket *sock, poll_table *wait)
|
|
*/
|
|
*/
|
|
|
|
|
|
mask = 0;
|
|
mask = 0;
|
|
- if (sk->sk_err)
|
|
|
|
- mask = POLLERR;
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
* POLLHUP is certainly not done right. But poll() doesn't
|
|
* POLLHUP is certainly not done right. But poll() doesn't
|
|
@@ -457,6 +455,11 @@ unsigned int tcp_poll(struct file *file, struct socket *sock, poll_table *wait)
|
|
if (tp->urg_data & TCP_URG_VALID)
|
|
if (tp->urg_data & TCP_URG_VALID)
|
|
mask |= POLLPRI;
|
|
mask |= POLLPRI;
|
|
}
|
|
}
|
|
|
|
+ /* This barrier is coupled with smp_wmb() in tcp_reset() */
|
|
|
|
+ smp_rmb();
|
|
|
|
+ if (sk->sk_err)
|
|
|
|
+ mask |= POLLERR;
|
|
|
|
+
|
|
return mask;
|
|
return mask;
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(tcp_poll);
|
|
EXPORT_SYMBOL(tcp_poll);
|