From patchwork Mon Jan 2 20:20:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Soheil Hassas Yeganeh X-Patchwork-Id: 710273 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3tspQ66n7Nz9sDG for ; Tue, 3 Jan 2017 07:21:50 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="uD3+XU1C"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756213AbdABUV0 (ORCPT ); Mon, 2 Jan 2017 15:21:26 -0500 Received: from mail-qk0-f194.google.com ([209.85.220.194]:34728 "EHLO mail-qk0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751900AbdABUVI (ORCPT ); Mon, 2 Jan 2017 15:21:08 -0500 Received: by mail-qk0-f194.google.com with SMTP id t184so48031168qkd.1 for ; Mon, 02 Jan 2017 12:21:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=zM7yw2qeesWdSKiQVtZlTOS5SUxF+910xHiAGaoDBVU=; b=uD3+XU1CkdqRNpLUj5eWUH6jMFO/uRTMEixBEBSBjbZStckQwJ5BJ7ijLBt87U52Uq /CkRVpQ9OOWdnJal48MGcawNFYQUqqXR1LDFg6pNPc994R+cdFN+M09khFMs/0AkcK64 uocXUKLcr9VOmkZvTrgCSTuGPiX+eG38/LTvLQu1ADId/DzhiCyk7eeIqyFINfCmBCru CsfvgDLI2L6kF/dpKkfmIrbPbvuPRH4FG+E3u6hm57ib67ATQ3LMG1U77Fag6UH9hLmA vFM8MMbvGbXJsWZoog3N9VRbVagaKgEm8a+pqyY4QDWjeRxih4qOlc237zNXDwmxl6JH wRnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=zM7yw2qeesWdSKiQVtZlTOS5SUxF+910xHiAGaoDBVU=; b=Rd+KZRC19OkgXLNYvEp/Cz38R+ugODdV9iuPQ+zCp7V2/rb0GYnYWf7UlWklqocN8I FSYEHQBSR1agsHhWTg+hlQYeR78PCbenju6TVVdZRlzZWB1sW4DcCg6Bx1XcwWLUBPOU ARk+ZbQ9NuLhR+gU9UUrbxuYpF9cA/zWw5UKdzMdYLpA8+cGrMpkgwOnWUeF+2ZBinbp gg8DMziyI8EGDNszfqOP0Je51pwhRHugjWK36yY3l6W1iVMAz8Jy39dyPJH56GbriAMo jieioDlFH80mz0Tp6Jdp/6BeNf13cBeDiMnRUtPmz7ZOAQdrfzZIy1n1hkYmwCb+ET2N +BzQ== X-Gm-Message-State: AIkVDXLYGaqml0HkOh3qeBmzMtmnY1uSrfo90yOqghET4JgC4evKJzApymqYSerqnfi1JQ== X-Received: by 10.55.110.6 with SMTP id j6mr57236064qkc.151.1483388467620; Mon, 02 Jan 2017 12:21:07 -0800 (PST) Received: from soheil.nyc.corp.google.com ([100.101.231.22]) by smtp.gmail.com with ESMTPSA id d83sm15140627qke.13.2017.01.02.12.21.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 02 Jan 2017 12:21:07 -0800 (PST) From: Soheil Hassas Yeganeh To: davem@davemloft.net, netdev@vger.kernel.org Cc: Soheil Hassas Yeganeh , Willem de Bruijn , Yuchung Cheng , Eric Dumazet , Neal Cardwell , Martin KaFai Lau Subject: [PATCH] tcp: provide tx timestamps for partial writes Date: Mon, 2 Jan 2017 15:20:57 -0500 Message-Id: <1483388457-4041-1-git-send-email-soheil.kdev@gmail.com> X-Mailer: git-send-email 2.8.0.rc3.226.g39d4020 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Soheil Hassas Yeganeh For TCP sockets, tx timestamps are only captured when the user data is successfully and fully written to the socket. In many cases, however, TCP writes can be partial for which no timestamp is collected. Collect timestamps when the user data is partially copied into the socket. Signed-off-by: Soheil Hassas Yeganeh Cc: Willem de Bruijn Cc: Yuchung Cheng Cc: Eric Dumazet Cc: Neal Cardwell Cc: Martin KaFai Lau Acked-by: Yuchung Cheng --- net/ipv4/tcp.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 2e3807d..c207b16 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -992,8 +992,10 @@ static ssize_t do_tcp_sendpages(struct sock *sk, struct page *page, int offset, return copied; do_error: - if (copied) + if (copied) { + tcp_tx_timestamp(sk, sk->sk_tsflags, tcp_write_queue_tail(sk)); goto out; + } out_err: /* make sure we wake any epoll edge trigger waiter */ if (unlikely(skb_queue_len(&sk->sk_write_queue) == 0 && @@ -1329,8 +1331,10 @@ int tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) } do_error: - if (copied + copied_syn) + if (copied + copied_syn) { + tcp_tx_timestamp(sk, sk->sk_tsflags, tcp_write_queue_tail(sk)); goto out; + } out_err: err = sk_stream_error(sk, flags, err); /* make sure we wake any epoll edge trigger waiter */