mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
Merge branch 'work.sendmsg' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs sendmsg updates from Al Viro:
"More sendmsg work.
This is a fairly separate isolated stuff (there's a continuation
around lustre, but that one was too late to soak in -next), thus the
separate pull request"
* 'work.sendmsg' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
ncpfs: switch to sock_sendmsg()
ncpfs: don't mess with manually advancing iovec on send
ncpfs: sendmsg does *not* bugger iovec these days
ceph_tcp_sendpage(): use ITER_BVEC sendmsg
afs_send_pages(): use ITER_BVEC
rds: remove dead code
ceph: switch to sock_recvmsg()
usbip_recv(): switch to sock_recvmsg()
iscsi_target: deal with short writes on the tx side
[nbd] pass iov_iter to nbd_xmit()
[nbd] switch sock_xmit() to sock_{send,recv}msg()
[drbd] use sock_sendmsg()
This commit is contained in:
commit
69fd110eb6
9 changed files with 147 additions and 242 deletions
|
|
@ -260,8 +260,7 @@ void afs_flat_call_destructor(struct afs_call *call)
|
|||
/*
|
||||
* attach the data from a bunch of pages on an inode to a call
|
||||
*/
|
||||
static int afs_send_pages(struct afs_call *call, struct msghdr *msg,
|
||||
struct kvec *iov)
|
||||
static int afs_send_pages(struct afs_call *call, struct msghdr *msg)
|
||||
{
|
||||
struct page *pages[8];
|
||||
unsigned count, n, loop, offset, to;
|
||||
|
|
@ -284,20 +283,21 @@ static int afs_send_pages(struct afs_call *call, struct msghdr *msg,
|
|||
|
||||
loop = 0;
|
||||
do {
|
||||
struct bio_vec bvec = {.bv_page = pages[loop],
|
||||
.bv_offset = offset};
|
||||
msg->msg_flags = 0;
|
||||
to = PAGE_SIZE;
|
||||
if (first + loop >= last)
|
||||
to = call->last_to;
|
||||
else
|
||||
msg->msg_flags = MSG_MORE;
|
||||
iov->iov_base = kmap(pages[loop]) + offset;
|
||||
iov->iov_len = to - offset;
|
||||
bvec.bv_len = to - offset;
|
||||
offset = 0;
|
||||
|
||||
_debug("- range %u-%u%s",
|
||||
offset, to, msg->msg_flags ? " [more]" : "");
|
||||
iov_iter_kvec(&msg->msg_iter, WRITE | ITER_KVEC,
|
||||
iov, 1, to - offset);
|
||||
iov_iter_bvec(&msg->msg_iter, WRITE | ITER_BVEC,
|
||||
&bvec, 1, to - offset);
|
||||
|
||||
/* have to change the state *before* sending the last
|
||||
* packet as RxRPC might give us the reply before it
|
||||
|
|
@ -306,7 +306,6 @@ static int afs_send_pages(struct afs_call *call, struct msghdr *msg,
|
|||
call->state = AFS_CALL_AWAIT_REPLY;
|
||||
ret = rxrpc_kernel_send_data(afs_socket, call->rxcall,
|
||||
msg, to - offset);
|
||||
kunmap(pages[loop]);
|
||||
if (ret < 0)
|
||||
break;
|
||||
} while (++loop < count);
|
||||
|
|
@ -391,7 +390,7 @@ int afs_make_call(struct in_addr *addr, struct afs_call *call, gfp_t gfp,
|
|||
goto error_do_abort;
|
||||
|
||||
if (call->send_pages) {
|
||||
ret = afs_send_pages(call, &msg, iov);
|
||||
ret = afs_send_pages(call, &msg);
|
||||
if (ret < 0)
|
||||
goto error_do_abort;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue