From patchwork Mon Nov 25 06:36:28 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shawn Landden X-Patchwork-Id: 293826 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 5156B2C008F for ; Mon, 25 Nov 2013 17:37:25 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751779Ab3KYGhB (ORCPT ); Mon, 25 Nov 2013 01:37:01 -0500 Received: from mail-pb0-f46.google.com ([209.85.160.46]:48589 "EHLO mail-pb0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750793Ab3KYGg6 (ORCPT ); Mon, 25 Nov 2013 01:36:58 -0500 Received: by mail-pb0-f46.google.com with SMTP id md12so5064560pbc.33 for ; Sun, 24 Nov 2013 22:36:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=RXn9ARfsVwQsWadhaqGytmYzhpNACbxBDqoTOzejqCU=; b=1DJRLETeAa3654IvuZiVW/LrYkDdtgIj//43v6m9oiWDuUMGtQnQKkx8xd+88m/jRx BN13rkRaTFhr+3p14hcWEdkwnvndWy4QU2T+6MlRPtuVsdRJaZhEWx+WFCcR5fLi2l/q YLLvEIVfaXX/A1+8KdOplIhGshKvj4Zg6091lV7WVFnpGSPEiREQKq4QCQlibVoJ/UO5 w/7d+wCgYZOrmQi259Ckyo6vieJPuDsG79cCnvyRT8Y/p6oQNVE2fqy4ZeIFUHZ5GvCm f1+Wjuc4TUnR8oZBR7hpctF0sn/XgXyIF8846CjQoNSAzm3ltmXe4ALo8dUAWPbEKYWY +TaQ== X-Received: by 10.66.136.176 with SMTP id qb16mr1533357pab.131.1385361416916; Sun, 24 Nov 2013 22:36:56 -0800 (PST) Received: from debian-T61.churchofgit.com (mcfl-cm.marinorg.net. [199.88.72.16]) by mx.google.com with ESMTPSA id iu7sm70726058pbc.45.2013.11.24.22.36.55 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 24 Nov 2013 22:36:56 -0800 (PST) From: Shawn Landden To: Hannes Frederic Sowa Cc: Eric Dumazet , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk, linux-crypto@vger.kernel.org, netdev@vger.kernel.org, Herbert Xu , Tom Herbert , "David S. Miller" , stable@vger.kernel.org, Shawn Landden Subject: [PATCH] update consumers of MSG_MORE to recognize MSG_SENDPAGE_NOTLAST Date: Sun, 24 Nov 2013 22:36:28 -0800 Message-Id: <1385361388-2175-1-git-send-email-shawn@churchofgit.com> X-Mailer: git-send-email 1.8.4.4 In-Reply-To: <20131125042633.GA4156@order.stressinduktion.org> References: <20131125042633.GA4156@order.stressinduktion.org> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Commit 35f9c09fe (tcp: tcp_sendpages() should call tcp_push() once) added an internal flag MSG_SENDPAGE_NOTLAST, similar to MSG_MORE. algif_hash, algif_skcipher, and udp used MSG_MORE from tcp_sendpages() and need to see the new flag as identical to MSG_MORE. This fixes sendfile() on AF_ALG. v3: also fix udp Cc: Tom Herbert Cc: Eric Dumazet Cc: David S. Miller Cc: # 3.4.x + 3.2.x Reported-and-tested-by: Shawn Landden Original-patch: Richard Weinberger Signed-off-by: Shawn Landden --- crypto/algif_hash.c | 3 +++ crypto/algif_skcipher.c | 3 +++ net/ipv4/udp.c | 3 +++ 3 files changed, 9 insertions(+) diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c index ef5356c..8502462 100644 --- a/crypto/algif_hash.c +++ b/crypto/algif_hash.c @@ -114,6 +114,9 @@ static ssize_t hash_sendpage(struct socket *sock, struct page *page, struct hash_ctx *ctx = ask->private; int err; + if (flags & MSG_SENDPAGE_NOTLAST) + flags |= MSG_MORE; + lock_sock(sk); sg_init_table(ctx->sgl.sg, 1); sg_set_page(ctx->sgl.sg, page, size, offset); diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c index 6a6dfc0..a19c027 100644 --- a/crypto/algif_skcipher.c +++ b/crypto/algif_skcipher.c @@ -378,6 +378,9 @@ static ssize_t skcipher_sendpage(struct socket *sock, struct page *page, struct skcipher_sg_list *sgl; int err = -EINVAL; + if (flags & MSG_SENDPAGE_NOTLAST) + flags |= MSG_MORE; + lock_sock(sk); if (!ctx->more && ctx->used) goto unlock; diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 5944d7d..8bd04df 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -1098,6 +1098,9 @@ int udp_sendpage(struct sock *sk, struct page *page, int offset, struct udp_sock *up = udp_sk(sk); int ret; + if (flags & MSG_SENDPAGE_NOTLAST) + flags |= MSG_MORE; + if (!up->pending) { struct msghdr msg = { .msg_flags = flags|MSG_MORE };