diff options
author | Sowmini Varadhan <sowmini.varadhan@oracle.com> | 2015-02-05 22:41:43 (GMT) |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-02-08 06:41:56 (GMT) |
commit | d0a47d32724bf0765b8768086ef1a7a6d074a7a0 (patch) | |
tree | 3cec5e71a1bcfd083dd7218a822eed300e62c857 | |
parent | 11ac11999bae3c353f86b6e7dd0e43d4a0eada12 (diff) | |
download | linux-d0a47d32724bf0765b8768086ef1a7a6d074a7a0.tar.xz |
rds: Make rds_message_copy_from_user() return 0 on success.
Commit 083735f4b01b ("rds: switch rds_message_copy_from_user() to iov_iter")
breaks rds_message_copy_from_user() semantics on success, and causes it
to return nbytes copied, when it should return 0. This commit fixes that bug.
Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/rds/message.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/net/rds/message.c b/net/rds/message.c index 5a21e6f..756c737 100644 --- a/net/rds/message.c +++ b/net/rds/message.c @@ -266,7 +266,7 @@ struct rds_message *rds_message_map_pages(unsigned long *page_addrs, unsigned in int rds_message_copy_from_user(struct rds_message *rm, struct iov_iter *from) { - unsigned long to_copy; + unsigned long to_copy, nbytes; unsigned long sg_off; struct scatterlist *sg; int ret = 0; @@ -293,9 +293,9 @@ int rds_message_copy_from_user(struct rds_message *rm, struct iov_iter *from) sg->length - sg_off); rds_stats_add(s_copy_from_user, to_copy); - ret = copy_page_from_iter(sg_page(sg), sg->offset + sg_off, - to_copy, from); - if (ret != to_copy) + nbytes = copy_page_from_iter(sg_page(sg), sg->offset + sg_off, + to_copy, from); + if (nbytes != to_copy) return -EFAULT; sg_off += to_copy; |