mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-27 15:36:48 +00:00
siw: Inline do_tcp_sendpages()
do_tcp_sendpages() is now just a small wrapper around tcp_sendmsg_locked(), so inline it, allowing do_tcp_sendpages() to be removed. This is part of replacing ->sendpage() with a call to sendmsg() with MSG_SPLICE_PAGES set. Signed-off-by: David Howells <dhowells@redhat.com> Reviewed-by: Bernard Metzler <bmt@zurich.ibm.com> Reviewed-by: Tom Talpey <tom@talpey.com> cc: Jason Gunthorpe <jgg@ziepe.ca> cc: Leon Romanovsky <leon@kernel.org> cc: Jens Axboe <axboe@kernel.dk> cc: Matthew Wilcox <willy@infradead.org> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
e117dcfd64
commit
c2ff29e99a
@ -312,7 +312,7 @@ static int siw_tx_ctrl(struct siw_iwarp_tx *c_tx, struct socket *s,
|
||||
}
|
||||
|
||||
/*
|
||||
* 0copy TCP transmit interface: Use do_tcp_sendpages.
|
||||
* 0copy TCP transmit interface: Use MSG_SPLICE_PAGES.
|
||||
*
|
||||
* Using sendpage to push page by page appears to be less efficient
|
||||
* than using sendmsg, even if data are copied.
|
||||
@ -323,20 +323,27 @@ static int siw_tx_ctrl(struct siw_iwarp_tx *c_tx, struct socket *s,
|
||||
static int siw_tcp_sendpages(struct socket *s, struct page **page, int offset,
|
||||
size_t size)
|
||||
{
|
||||
struct bio_vec bvec;
|
||||
struct msghdr msg = {
|
||||
.msg_flags = (MSG_MORE | MSG_DONTWAIT | MSG_SENDPAGE_NOTLAST |
|
||||
MSG_SPLICE_PAGES),
|
||||
};
|
||||
struct sock *sk = s->sk;
|
||||
int i = 0, rv = 0, sent = 0,
|
||||
flags = MSG_MORE | MSG_DONTWAIT | MSG_SENDPAGE_NOTLAST;
|
||||
int i = 0, rv = 0, sent = 0;
|
||||
|
||||
while (size) {
|
||||
size_t bytes = min_t(size_t, PAGE_SIZE - offset, size);
|
||||
|
||||
if (size + offset <= PAGE_SIZE)
|
||||
flags = MSG_MORE | MSG_DONTWAIT;
|
||||
msg.msg_flags &= ~MSG_SENDPAGE_NOTLAST;
|
||||
|
||||
tcp_rate_check_app_limited(sk);
|
||||
bvec_set_page(&bvec, page[i], bytes, offset);
|
||||
iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, &bvec, 1, size);
|
||||
|
||||
try_page_again:
|
||||
lock_sock(sk);
|
||||
rv = do_tcp_sendpages(sk, page[i], offset, bytes, flags);
|
||||
rv = tcp_sendmsg_locked(sk, &msg, size);
|
||||
release_sock(sk);
|
||||
|
||||
if (rv > 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user