| From: Alex Elder <elder@dreamhost.com> |
| Date: Wed, 7 Mar 2012 11:40:08 -0600 |
| Subject: libceph: only call kernel_sendpage() via helper |
| |
| commit e36b13cceb46136d849aeee06b4907ad3570ba78 upstream. |
| |
| Make ceph_tcp_sendpage() be the only place kernel_sendpage() is |
| used, by using this helper in write_partial_msg_pages(). |
| |
| Signed-off-by: Alex Elder <elder@dreamhost.com> |
| Reviewed-by: Sage Weil <sage@newdream.net> |
| [bwh: Backported to 3.2: |
| - Add ceph_tcp_sendpage(), from commit 31739139f3ed ('libceph: use |
| kernel_sendpage() for sending zeroes'), the rest of which is not |
| applicable |
| - Adjust context] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| net/ceph/messenger.c | 8 ++------ |
| 1 file changed, 2 insertions(+), 6 deletions(-) |
| |
| --- a/net/ceph/messenger.c |
| +++ b/net/ceph/messenger.c |
| @@ -284,6 +284,19 @@ static int ceph_tcp_sendmsg(struct socke |
| return r; |
| } |
| |
| +static int ceph_tcp_sendpage(struct socket *sock, struct page *page, |
| + int offset, size_t size, bool more) |
| +{ |
| + int flags = MSG_DONTWAIT | MSG_NOSIGNAL | (more ? MSG_MORE : MSG_EOR); |
| + int ret; |
| + |
| + ret = kernel_sendpage(sock, page, offset, size, flags); |
| + if (ret == -EAGAIN) |
| + ret = 0; |
| + |
| + return ret; |
| +} |
| + |
| |
| /* |
| * Shutdown/close the socket for the given connection. |
| @@ -851,18 +864,14 @@ static int write_partial_msg_pages(struc |
| cpu_to_le32(crc32c(tmpcrc, base, len)); |
| con->out_msg_pos.did_page_crc = 1; |
| } |
| - ret = kernel_sendpage(con->sock, page, |
| + ret = ceph_tcp_sendpage(con->sock, page, |
| con->out_msg_pos.page_pos + page_shift, |
| - len, |
| - MSG_DONTWAIT | MSG_NOSIGNAL | |
| - MSG_MORE); |
| + len, 1); |
| |
| if (crc && |
| (msg->pages || msg->pagelist || msg->bio || in_trail)) |
| kunmap(page); |
| |
| - if (ret == -EAGAIN) |
| - ret = 0; |
| if (ret <= 0) |
| goto out; |
| |