Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp4385977pxb; Tue, 26 Jan 2021 21:52:52 -0800 (PST) X-Google-Smtp-Source: ABdhPJzu107JRpKguWWkiG5Vx00gID3V+8SWe091JfFHVD/nEprs2CROlL1utekv9EX7T61K9Gva X-Received: by 2002:a17:906:40ca:: with SMTP id a10mr5842073ejk.295.1611726772662; Tue, 26 Jan 2021 21:52:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611726772; cv=none; d=google.com; s=arc-20160816; b=BUBPHh4vI4AvtWSqQQxH7SDUaulfGIDgq9E/jQi7zN0nbxUl6EW2TC99ohf7D/mcC5 UgY0FRyyjqnFonE7i0BJVubwfjaCUePeNHxIATxnXL3lDPKjXv9Sdn48SQwIjkC5GeUz EFzPpjXaja1el/cB7jqJFKJpUIbZSMJYc/iRcnnUPl4ueAucOtfOWy7d4Vvn83cS6ulN 0/L9f+BdIb9xFOY7fTjyZvMhYKpJkuONzS8pm19CSOQ86EIe0UQTmO1/pF5aGnxeahi3 BEhWncN1Jy9qY2KL0HpUSoYytoTEAj5gmbZHYaDvO3HnDf+R+GRh7JJd6OjIf4YoiZ7p KXnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date; bh=gmWqVUqxzCdv6v5IrkT2zWUUDUXi0mv2L99hjEFEw8o=; b=zDx23N08ck5/yYjipYEObiyk2NtYZe9jwS9DKacerlryWR3fDmLhxrtf8ptSl5YgLx TfRD3JOdr2+LdxshjrrUHcewZGWnJzU/dOGFEtGsfzUzmYStSREW6c8pWdLTOwDdAQz4 z9LILJEr4NshKbMdtwW944ysBV6pdOjWXpDbacGSUYwEqj62gj+7KQBz6e9JZpaAhRg7 KZTwRSyHQ8naZYnhv8IXuT84+fCyGhfGOK16E8sREgDSFb7fdeVh3Jcaj89AqxgFwXLn LuCbxezrC3CAk50Gs8+Qokyipe1RoYzZNyvwSJFQQWieC/UR3EU6PuArYlJwnXzTCpMY 8EkQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a17si460028edv.282.2021.01.26.21.52.27; Tue, 26 Jan 2021 21:52:52 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389783AbhAZRP4 (ORCPT + 99 others); Tue, 26 Jan 2021 12:15:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50412 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727860AbhAZGK2 (ORCPT ); Tue, 26 Jan 2021 01:10:28 -0500 Received: from zeniv-ca.linux.org.uk (zeniv-ca.linux.org.uk [IPv6:2607:5300:60:148a::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5E86CC06178B for ; Mon, 25 Jan 2021 22:09:06 -0800 (PST) Received: from viro by zeniv-ca.linux.org.uk with local (Exim 4.94 #2 (Red Hat Linux)) id 1l4HXA-0068Cf-1R; Tue, 26 Jan 2021 06:09:00 +0000 Date: Tue, 26 Jan 2021 06:09:00 +0000 From: Al Viro To: Linus Torvalds Cc: Johannes Berg , Christoph Hellwig , Oliver Giles , Linux Kernel Mailing List , Greg Kroah-Hartman Subject: [PATCH 2/3] take the guts of file-to-pipe splice into a helper function Message-ID: <20210126060900.GB1461355@zeniv-ca.linux.org.uk> References: <20210118085311.GA2735@lst.de> <20210118194545.GB736435@zeniv-ca> <20210126060720.GJ740243@zeniv-ca> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210126060720.GJ740243@zeniv-ca> Sender: Al Viro Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Signed-off-by: Al Viro --- fs/splice.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/fs/splice.c b/fs/splice.c index c1ca2cc63b43..74f968c65a93 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -1002,6 +1002,23 @@ static int splice_pipe_to_pipe(struct pipe_inode_info *ipipe, struct pipe_inode_info *opipe, size_t len, unsigned int flags); +static long splice_file_to_pipe(struct file *in, + struct pipe_inode_info *opipe, + loff_t *offset, + size_t len, unsigned int flags) +{ + long ret; + + pipe_lock(opipe); + ret = wait_for_space(opipe, flags); + if (!ret) + ret = do_splice_to(in, offset, opipe, len, flags); + pipe_unlock(opipe); + if (ret > 0) + wakeup_pipe_readers(opipe); + return ret; +} + /* * Determine where to splice to/from. */ @@ -1081,13 +1098,7 @@ long do_splice(struct file *in, loff_t *off_in, struct file *out, if (out->f_flags & O_NONBLOCK) flags |= SPLICE_F_NONBLOCK; - pipe_lock(opipe); - ret = wait_for_space(opipe, flags); - if (!ret) - ret = do_splice_to(in, &offset, opipe, len, flags); - pipe_unlock(opipe); - if (ret > 0) - wakeup_pipe_readers(opipe); + ret = splice_file_to_pipe(in, opipe, &offset, len, flags); if (!off_in) in->f_pos = offset; else -- 2.11.0