diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2015-11-15 00:12:48 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2016-12-26 21:35:38 -0500 |
commit | 100803a84d3cb84bd3ee36e8ec4274019ad667ac (patch) | |
tree | 15adbad3b7fe658dd971babc1876153ecb5113c3 /net | |
parent | 3995d1610713c1a62af687872e460c3dca82d17c (diff) |
ceph: switch to sock_recvmsg()
... and use ITER_BVEC instead of playing with kmap()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'net')
-rw-r--r-- | net/ceph/messenger.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c index 770c52701efa..9e46db7e5968 100644 --- a/net/ceph/messenger.c +++ b/net/ceph/messenger.c | |||
@@ -520,7 +520,8 @@ static int ceph_tcp_recvmsg(struct socket *sock, void *buf, size_t len) | |||
520 | struct msghdr msg = { .msg_flags = MSG_DONTWAIT | MSG_NOSIGNAL }; | 520 | struct msghdr msg = { .msg_flags = MSG_DONTWAIT | MSG_NOSIGNAL }; |
521 | int r; | 521 | int r; |
522 | 522 | ||
523 | r = kernel_recvmsg(sock, &msg, &iov, 1, len, msg.msg_flags); | 523 | iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1, len); |
524 | r = sock_recvmsg(sock, &msg, msg.msg_flags); | ||
524 | if (r == -EAGAIN) | 525 | if (r == -EAGAIN) |
525 | r = 0; | 526 | r = 0; |
526 | return r; | 527 | return r; |
@@ -529,17 +530,20 @@ static int ceph_tcp_recvmsg(struct socket *sock, void *buf, size_t len) | |||
529 | static int ceph_tcp_recvpage(struct socket *sock, struct page *page, | 530 | static int ceph_tcp_recvpage(struct socket *sock, struct page *page, |
530 | int page_offset, size_t length) | 531 | int page_offset, size_t length) |
531 | { | 532 | { |
532 | void *kaddr; | 533 | struct bio_vec bvec = { |
533 | int ret; | 534 | .bv_page = page, |
535 | .bv_offset = page_offset, | ||
536 | .bv_len = length | ||
537 | }; | ||
538 | struct msghdr msg = { .msg_flags = MSG_DONTWAIT | MSG_NOSIGNAL }; | ||
539 | int r; | ||
534 | 540 | ||
535 | BUG_ON(page_offset + length > PAGE_SIZE); | 541 | BUG_ON(page_offset + length > PAGE_SIZE); |
536 | 542 | iov_iter_bvec(&msg.msg_iter, READ | ITER_BVEC, &bvec, 1, length); | |
537 | kaddr = kmap(page); | 543 | r = sock_recvmsg(sock, &msg, msg.msg_flags); |
538 | BUG_ON(!kaddr); | 544 | if (r == -EAGAIN) |
539 | ret = ceph_tcp_recvmsg(sock, kaddr + page_offset, length); | 545 | r = 0; |
540 | kunmap(page); | 546 | return r; |
541 | |||
542 | return ret; | ||
543 | } | 547 | } |
544 | 548 | ||
545 | /* | 549 | /* |