Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp3211113pxv; Mon, 12 Jul 2021 11:59:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxPoLZkifdLG9Jga4+Htsv+cCGgtrnoozf9ySt0UBkKSBakMq+5NigHsbOF1WkgI42l1SCP X-Received: by 2002:a17:906:6d8e:: with SMTP id h14mr624337ejt.128.1626116351391; Mon, 12 Jul 2021 11:59:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626116351; cv=none; d=google.com; s=arc-20160816; b=pFSp3kCN2lJYG/coLkfchLIg/eW5ys5HeF6tT+p0JMMN3CHBwZ1MhcFJnRPB3d65Qu w3rgk5CXlEd+hliejQryWzpXGaKu5DyBsqu0iWyiMmMUCuyvQD+6ZBRse0OwyODA7UEd xotgIZDcsRWPf9yIU+SozDKviGvhPB8Fh+AlJNoykjnkQwrbYdUyaI9eQX1ADtY652m5 2oOFcQveStJXsqC2lbtNBGozDWidCSmV+B77vAHT5VNPB/4NADaVQTrH9UZbGoADvgBS JFOSFMxW4sFtkMcYKEp13ahekgvIprIOxCtFiKGfTzOErDN1uygqVuOO3ZMyHMEgxUsh Ss6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:cc:to:from :subject; bh=+kQ4EHol8lWg+tQS9cD9MWwlQY1HwxB9/4wO0crtBN0=; b=03374kkwVA7Oig9sQ1EK4Zz5eRfqOJP8AsUhNTY1M/URmeg01+GFJ/g1aEzk4DKoDE 8SXb5bmxXPKvvI/4yUHTYlFXrrKdsPZiJlZAUvKteKhQn4gNhsk7EtqZzX3bWxu611KO D4sTqxPrwscjcf/VImDCOQe1j+XSJBoLE4lwx0Ih9f5hKnK8ivbZ+3IWKEaDDTJmaTM+ t4RW8jh/m0sW67h4yXiNfRtDPSOOnXCtNZxkCgrxK3Y+WIOdnTecmTId2URk3U6o+L7W Yhybr9pVVsZTY3uJ+CIMI/jb1NKFzN/6Pmf7b6qrSk3AOFI5gwg8v5DqIBrK1dDflJEf LS/g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=oracle.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g13si18187454edb.532.2021.07.12.11.58.48; Mon, 12 Jul 2021 11:59:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-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-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235539AbhGLTAy (ORCPT + 99 others); Mon, 12 Jul 2021 15:00:54 -0400 Received: from mail.kernel.org ([198.145.29.99]:54562 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230409AbhGLTAy (ORCPT ); Mon, 12 Jul 2021 15:00:54 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 49844611AD; Mon, 12 Jul 2021 18:58:05 +0000 (UTC) Subject: [PATCH v4 3/3] NFSD: Batch release pages during splice read From: Chuck Lever To: linux-nfs@vger.kernel.org, linux-mm@kvack.org Cc: neilb@suse.de Date: Mon, 12 Jul 2021 14:58:04 -0400 Message-ID: <162611628458.1416.5951210328076512466.stgit@klimt.1015granger.net> In-Reply-To: <162611520339.1416.14646909890289253420.stgit@klimt.1015granger.net> References: <162611520339.1416.14646909890289253420.stgit@klimt.1015granger.net> User-Agent: StGit/1.1 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Large splice reads call put_page() repeatedly. put_page() is relatively expensive to call, so replace it with the new svc_rqst_replace_page() helper to help amortize that cost. Signed-off-by: Chuck Lever Reviewed-by: NeilBrown --- fs/nfsd/vfs.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 46a6d9fce3d2..7732a384f949 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -849,15 +849,10 @@ nfsd_splice_actor(struct pipe_inode_info *pipe, struct pipe_buffer *buf, struct page *page = buf->page; if (rqstp->rq_res.page_len == 0) { - get_page(page); - put_page(*rqstp->rq_next_page); - *(rqstp->rq_next_page++) = page; + svc_rqst_replace_page(rqstp, page); rqstp->rq_res.page_base = buf->offset; } else if (page != pp[-1]) { - get_page(page); - if (*rqstp->rq_next_page) - put_page(*rqstp->rq_next_page); - *(rqstp->rq_next_page++) = page; + svc_rqst_replace_page(rqstp, page); } rqstp->rq_res.page_len += sd->len;