diff options
Diffstat (limited to 'net/rds/recv.c')
| -rw-r--r-- | net/rds/recv.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/rds/recv.c b/net/rds/recv.c index bd82522534fc..47d7b1029b33 100644 --- a/net/rds/recv.c +++ b/net/rds/recv.c | |||
| @@ -404,6 +404,7 @@ int rds_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, | |||
| 404 | int ret = 0, nonblock = msg_flags & MSG_DONTWAIT; | 404 | int ret = 0, nonblock = msg_flags & MSG_DONTWAIT; |
| 405 | DECLARE_SOCKADDR(struct sockaddr_in *, sin, msg->msg_name); | 405 | DECLARE_SOCKADDR(struct sockaddr_in *, sin, msg->msg_name); |
| 406 | struct rds_incoming *inc = NULL; | 406 | struct rds_incoming *inc = NULL; |
| 407 | struct iov_iter to; | ||
| 407 | 408 | ||
| 408 | /* udp_recvmsg()->sock_recvtimeo() gets away without locking too.. */ | 409 | /* udp_recvmsg()->sock_recvtimeo() gets away without locking too.. */ |
| 409 | timeo = sock_rcvtimeo(sk, nonblock); | 410 | timeo = sock_rcvtimeo(sk, nonblock); |
| @@ -449,8 +450,8 @@ int rds_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, | |||
| 449 | rdsdebug("copying inc %p from %pI4:%u to user\n", inc, | 450 | rdsdebug("copying inc %p from %pI4:%u to user\n", inc, |
| 450 | &inc->i_conn->c_faddr, | 451 | &inc->i_conn->c_faddr, |
| 451 | ntohs(inc->i_hdr.h_sport)); | 452 | ntohs(inc->i_hdr.h_sport)); |
| 452 | ret = inc->i_conn->c_trans->inc_copy_to_user(inc, msg->msg_iov, | 453 | iov_iter_init(&to, READ, msg->msg_iov, msg->msg_iovlen, size); |
| 453 | size); | 454 | ret = inc->i_conn->c_trans->inc_copy_to_user(inc, &to); |
| 454 | if (ret < 0) | 455 | if (ret < 0) |
| 455 | break; | 456 | break; |
| 456 | 457 | ||
