aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2015-11-15 00:12:48 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2016-12-26 21:35:38 -0500
commit100803a84d3cb84bd3ee36e8ec4274019ad667ac (patch)
tree15adbad3b7fe658dd971babc1876153ecb5113c3 /net
parent3995d1610713c1a62af687872e460c3dca82d17c (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.c24
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)
529static int ceph_tcp_recvpage(struct socket *sock, struct page *page, 530static 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/*