From patchwork Wed Jan 3 08:41:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 13509730 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id D9350C47074 for ; Wed, 3 Jan 2024 08:42:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6DCE66B00D7; Wed, 3 Jan 2024 03:42:49 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 68E078D0035; Wed, 3 Jan 2024 03:42:49 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 52D266B00D9; Wed, 3 Jan 2024 03:42:49 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 419286B00D7 for ; Wed, 3 Jan 2024 03:42:49 -0500 (EST) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 241FDA1AA4 for ; Wed, 3 Jan 2024 08:42:49 +0000 (UTC) X-FDA: 81637359258.03.7547364 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf09.hostedemail.com (Postfix) with ESMTP id 8717814000B for ; Wed, 3 Jan 2024 08:42:47 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=xUQFbdpu; dmarc=none; spf=none (imf09.hostedemail.com: domain of BATV+f852f126c6d693376302+7437+infradead.org+hch@bombadil.srs.infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=BATV+f852f126c6d693376302+7437+infradead.org+hch@bombadil.srs.infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1704271367; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=a2KU587OgqnObeCrGx0UU79uRQUUDAR8Cm6RFnFUOy8=; b=aLC6LG1wnbxA5/rCbf6YKFfrY32NfRhCuUBHUKgt8+/CrNjeClx2MMhOKWNMuIVMIAFAwR 7g+vFMVSCbyj3Gkm5eodA8MF4xbhRXAOHiNrs52LCDskwl51R680UIxnmjeGio1KU3k7VI y+KYLearVpE9pmnAcLlZ4067bpeoFxA= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=xUQFbdpu; dmarc=none; spf=none (imf09.hostedemail.com: domain of BATV+f852f126c6d693376302+7437+infradead.org+hch@bombadil.srs.infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=BATV+f852f126c6d693376302+7437+infradead.org+hch@bombadil.srs.infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1704271367; a=rsa-sha256; cv=none; b=e4BCkgI+WveJ8H2rHnd/Dkqm4V4h51ROaCRjProAa1zXnHqIjzK8rBB9MjVuEAC8OHI+Mh vaJ38FEaVvtmBhUqB84X3qMqxaXD87Fxn2l+PVZ4iRbGY4kSIhjljwFDlxspmUUiybY9eg wCbIGOVaSuKPvKY4QcTfehATtIqVIvU= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description; bh=a2KU587OgqnObeCrGx0UU79uRQUUDAR8Cm6RFnFUOy8=; b=xUQFbdpubXfChe2Qx//ZD9lJ2P EeE0mcPqXp7XRhtFCs6ZAOL8/8PWfHGYYgHcgtGj+Fzgd7HuppaPAOICSanP3ICu3IBf8Gn46EDny vGtFDb4Jy5MWKnEPxQ5kfgpaNUvbPb4L/bHgjwkRmLkpTtVAPe7HS616Um4nVtGpQJdFYLmlUOkFD sbrY6co1D9btX06ldeHVaa0UyRZpOKdqP9J6HUa9NcP1TkCuYbPtpjOMShI8iUa3ET+CpxW8nxBKp nqXL4biGZR1oLOM2VZ3wLYrL0lr5RSL1190L0axmtIKXgaAQv0Gu83LaKNOR7W79v+U/uXOFXbGD/ MtlAnNtQ==; Received: from [89.144.222.185] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1rKwpl-00A6wM-1M; Wed, 03 Jan 2024 08:42:42 +0000 From: Christoph Hellwig To: Chandan Babu R , "Darrick J. Wong" , Hugh Dickins , Andrew Morton Cc: linux-xfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 13/15] xfs: don't unconditionally allocate a new page in xfile_get_page Date: Wed, 3 Jan 2024 08:41:24 +0000 Message-Id: <20240103084126.513354-14-hch@lst.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240103084126.513354-1-hch@lst.de> References: <20240103084126.513354-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html X-Rspam-User: X-Stat-Signature: 44zmzn6yi375doqwibjdm9p8permddm5 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 8717814000B X-HE-Tag: 1704271367-827747 X-HE-Meta: U2FsdGVkX19/lfw3Xf6XFfQw4lpWnRmsYFUa2zqavK3G4Pf+vIaGyyqB86+eWnk3fr+lPt5gS1QLZXamiXnCk/aK82TEyGgCPaUG1OyJ6sJNNPGJEl86Bie/r/GyJa0ISRVzcufuhLFHVEUAVKpIu08M+RlmOR6SI1muQPcQ4PSU4VmclzyrcoL4ZPD9quaMtAMTqLUUsDOkXezOnEhbjijFjY8HUKqiUuU9+wAbhTdLGRcVu/XGTjVZk3efGko0XWRPUUefJQrau+P/zTpa03G5Ysmo7G+gN9VStFa8orNWh/gzWFr7iRGzCTpWFyMIp2hCWvx/f+hX/OgZL1E1VJa8Jdwg5oG1YenH8NgfBNKuPHWB6QP0C8LuPXkd5Vm1PI5q+CjE2Ou0DHrr/PCUYK2Sxzq3iIG3Ip3AgTxTiqcGGnvj8ynYerVhS7y5SvWcE2HvTr/Pnu1ZyRMoju/xGCfnq+CNs06MARPHqlAXj7wtq1Iiupuh9CWTGDdsbRF8ZsM27nOtarXybyrscaBF4E2e8/Mp5pu17hAjdBopJFf3c/sQnYz8BgzvE29t0PsMzIbvI9ae9y2oxDWEDKIf0ITqCk7i+Doffw6OVi4eUi0vmdNMAGGD8vzuPr6FB8jz6guo2GZdSdfdikvutoEnswBEhHRqyeZDU57F7q5oVCdIephhLoLCKHYvZ5kOn7fdfh5kYUKZYnlQqjzMXeTvHkIebNhzQFtaZRcWlTAMBN6fFwCV/rEQfd2XpiQ9eZdaZvdxNnygTb92KbiYDAA2JX/KK41x9lkHsncP52ao4UX17Nx33N+lfiyf3RSA/GPy6FDxFhG5DNlao2DK/YJ0YnU1OCpfIllrBzyXFHX6WVtZXaO+aXOSZuHdXHI9nx6QJ59scs1hGUiKVnq6EhUe8/vuBe4wjFYR6pVd1f4Qzd6jy+TrHzrdi0UFAfPbcMQgnDCrZdyFkZ0PRmPwVW+ XS7cpTq8 onmfmfq3qcHFNHybJ5A5ZTPoNp74kD38kE8K1iCuUONbAadLUcs0L5PYkeB4QX7zrqQOD6M5pIPcsrsKWrX0B0zX8oePHDLQvuO3NSZsE8BDFdetW8s1t5xtc5VaQRXHjlpOiHpAtZjbAUnTB6wYO16zjDB/N/4CWDdFa/MZob+CQ44R7HRq/D9E4gfALYmwQLrUODv+bKt52ImXQXnazJCS4vqbfL8T3m/XN96GkIBDKs0TwVkogmSeTJwSnbD4lKQ5PPvVO3WJRHxNFHYhYWU/Xb9DZBuRVcrdsk+EQ1o/y5r6BJAtph6RyQXM4mNDP1K2xfDK+3d30Nq+zw9/zyUqwSXaTSfkazw7TE0aOU7A005TD5AEKz2+8SjJqn8s2ORhAbNL+6BNB+u0iR57WAJQKGEjXW3RxSDBH0MyK0dXFgMIrvxILd0Uusg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Pass a flags argument to xfile_get_page, and only allocate a new page if the XFILE_ALLOC flag is passed. This allows to also use xfile_get_page for pure readers that do not want to allocate a new page or dirty the existing one. Signed-off-by: Christoph Hellwig Reviewed-by: Darrick J. Wong --- fs/xfs/scrub/xfarray.c | 2 +- fs/xfs/scrub/xfile.c | 14 ++++++++++---- fs/xfs/scrub/xfile.h | 4 +++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/fs/xfs/scrub/xfarray.c b/fs/xfs/scrub/xfarray.c index 4f396462186793..8543067d46366d 100644 --- a/fs/xfs/scrub/xfarray.c +++ b/fs/xfs/scrub/xfarray.c @@ -572,7 +572,7 @@ xfarray_sort_get_page( { struct page *page; - page = xfile_get_page(si->array->xfile, pos, len); + page = xfile_get_page(si->array->xfile, pos, len, XFILE_ALLOC); if (IS_ERR(page)) return PTR_ERR(page); si->page = page; diff --git a/fs/xfs/scrub/xfile.c b/fs/xfs/scrub/xfile.c index 715c4d10b67c14..3ed7fb82a4497b 100644 --- a/fs/xfs/scrub/xfile.c +++ b/fs/xfs/scrub/xfile.c @@ -274,7 +274,8 @@ struct page * xfile_get_page( struct xfile *xf, loff_t pos, - unsigned int len) + unsigned int len, + unsigned int flags) { struct inode *inode = file_inode(xf->file); struct folio *folio = NULL; @@ -293,15 +294,19 @@ xfile_get_page( * Increase the file size first so that shmem_get_folio(..., SGP_CACHE), * actually allocates a folio instead of erroring out. */ - if (pos + len > i_size_read(inode)) + if ((flags & XFILE_ALLOC) && pos + len > i_size_read(inode)) i_size_write(inode, pos + len); pflags = memalloc_nofs_save(); - error = shmem_get_folio(inode, pos >> PAGE_SHIFT, &folio, SGP_CACHE); + error = shmem_get_folio(inode, pos >> PAGE_SHIFT, &folio, + (flags & XFILE_ALLOC) ? SGP_CACHE : SGP_READ); memalloc_nofs_restore(pflags); if (error) return ERR_PTR(error); + if (!folio) + return NULL; + page = folio_file_page(folio, pos >> PAGE_SHIFT); if (PageHWPoison(page)) { folio_put(folio); @@ -312,7 +317,8 @@ xfile_get_page( * Mark the page dirty so that it won't be reclaimed once we drop the * (potentially last) reference in xfile_put_page. */ - set_page_dirty(page); + if (flags & XFILE_ALLOC) + set_page_dirty(page); return page; } diff --git a/fs/xfs/scrub/xfile.h b/fs/xfs/scrub/xfile.h index 993368b37b4b7c..f0403ea869e4d0 100644 --- a/fs/xfs/scrub/xfile.h +++ b/fs/xfs/scrub/xfile.h @@ -19,7 +19,9 @@ int xfile_obj_store(struct xfile *xf, const void *buf, size_t count, loff_t xfile_seek_data(struct xfile *xf, loff_t pos); -struct page *xfile_get_page(struct xfile *xf, loff_t offset, unsigned int len); +#define XFILE_ALLOC (1 << 0) /* allocate page if not present */ +struct page *xfile_get_page(struct xfile *xf, loff_t offset, unsigned int len, + unsigned int flags); void xfile_put_page(struct xfile *xf, struct page *page); #endif /* __XFS_SCRUB_XFILE_H__ */