lkml.org 
[lkml]   [2023]   [Mar]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 11/55] espintcp: Inline do_tcp_sendpages()
    Date
    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>
    cc: Steffen Klassert <steffen.klassert@secunet.com>
    cc: Herbert Xu <herbert@gondor.apana.org.au>
    cc: Eric Dumazet <edumazet@google.com>
    cc: "David S. Miller" <davem@davemloft.net>
    cc: Jakub Kicinski <kuba@kernel.org>
    cc: Paolo Abeni <pabeni@redhat.com>
    cc: Jens Axboe <axboe@kernel.dk>
    cc: Matthew Wilcox <willy@infradead.org>
    cc: netdev@vger.kernel.org
    ---
    net/xfrm/espintcp.c | 10 +++++++---
    1 file changed, 7 insertions(+), 3 deletions(-)

    diff --git a/net/xfrm/espintcp.c b/net/xfrm/espintcp.c
    index 872b80188e83..3504925babdb 100644
    --- a/net/xfrm/espintcp.c
    +++ b/net/xfrm/espintcp.c
    @@ -205,14 +205,16 @@ static int espintcp_sendskb_locked(struct sock *sk, struct espintcp_msg *emsg,
    static int espintcp_sendskmsg_locked(struct sock *sk,
    struct espintcp_msg *emsg, int flags)
    {
    + struct msghdr msghdr = { .msg_flags = flags | MSG_SPLICE_PAGES, };
    struct sk_msg *skmsg = &emsg->skmsg;
    struct scatterlist *sg;
    int done = 0;
    int ret;

    - flags |= MSG_SENDPAGE_NOTLAST;
    + msghdr.msg_flags |= MSG_SENDPAGE_NOTLAST;
    sg = &skmsg->sg.data[skmsg->sg.start];
    do {
    + struct bio_vec bvec;
    size_t size = sg->length - emsg->offset;
    int offset = sg->offset + emsg->offset;
    struct page *p;
    @@ -220,11 +222,13 @@ static int espintcp_sendskmsg_locked(struct sock *sk,
    emsg->offset = 0;

    if (sg_is_last(sg))
    - flags &= ~MSG_SENDPAGE_NOTLAST;
    + msghdr.msg_flags &= ~MSG_SENDPAGE_NOTLAST;

    p = sg_page(sg);
    retry:
    - ret = do_tcp_sendpages(sk, p, offset, size, flags);
    + bvec_set_page(&bvec, p, size, offset);
    + iov_iter_bvec(&msghdr.msg_iter, ITER_SOURCE, &bvec, 1, size);
    + ret = tcp_sendmsg_locked(sk, &msghdr, size);
    if (ret < 0) {
    emsg->offset = offset - sg->offset;
    skmsg->sg.start += done;
    \
     
     \ /
      Last update: 2023-03-31 18:13    [W:4.565 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site