RDS: Fix completion notifications on blocking sockets
Completion or congestion notifications were not being checked if the socket went to sleep. This patch fixes that. Signed-off-by: Andy Grover <andy.grover@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fdf6e6b4af
commit
edacaeae52
1 changed files with 14 additions and 12 deletions
|
@ -409,18 +409,18 @@ int rds_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
|
||||||
if (msg_flags & MSG_OOB)
|
if (msg_flags & MSG_OOB)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
/* If there are pending notifications, do those - and nothing else */
|
|
||||||
if (!list_empty(&rs->rs_notify_queue)) {
|
|
||||||
ret = rds_notify_queue_get(rs, msg);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rs->rs_cong_notify) {
|
|
||||||
ret = rds_notify_cong(rs, msg);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
/* If there are pending notifications, do those - and nothing else */
|
||||||
|
if (!list_empty(&rs->rs_notify_queue)) {
|
||||||
|
ret = rds_notify_queue_get(rs, msg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rs->rs_cong_notify) {
|
||||||
|
ret = rds_notify_cong(rs, msg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (!rds_next_incoming(rs, &inc)) {
|
if (!rds_next_incoming(rs, &inc)) {
|
||||||
if (nonblock) {
|
if (nonblock) {
|
||||||
ret = -EAGAIN;
|
ret = -EAGAIN;
|
||||||
|
@ -428,7 +428,9 @@ int rds_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
|
||||||
}
|
}
|
||||||
|
|
||||||
timeo = wait_event_interruptible_timeout(*sk->sk_sleep,
|
timeo = wait_event_interruptible_timeout(*sk->sk_sleep,
|
||||||
rds_next_incoming(rs, &inc),
|
(!list_empty(&rs->rs_notify_queue)
|
||||||
|
|| rs->rs_cong_notify
|
||||||
|
|| rds_next_incoming(rs, &inc)),
|
||||||
timeo);
|
timeo);
|
||||||
rdsdebug("recvmsg woke inc %p timeo %ld\n", inc,
|
rdsdebug("recvmsg woke inc %p timeo %ld\n", inc,
|
||||||
timeo);
|
timeo);
|
||||||
|
|
Loading…
Add table
Reference in a new issue