From mboxrd@z Thu Jan 1 00:00:00 1970 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 AF44CC3DA6E for ; Thu, 4 Jan 2024 00:19:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EC8EC6B02E1; Wed, 3 Jan 2024 19:18:59 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E79636B02E2; Wed, 3 Jan 2024 19:18:59 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D191B6B02E3; Wed, 3 Jan 2024 19:18:59 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id C212F6B02E1 for ; Wed, 3 Jan 2024 19:18:59 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 9249D40447 for ; Thu, 4 Jan 2024 00:18:59 +0000 (UTC) X-FDA: 81639718398.24.CB76567 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf30.hostedemail.com (Postfix) with ESMTP id E839780012 for ; Thu, 4 Jan 2024 00:18:57 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=UztC+bEo; spf=pass (imf30.hostedemail.com: domain of djwong@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=djwong@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1704327538; a=rsa-sha256; cv=none; b=ss3SvVZ0lWEs7HaZOAkGXdWi/DoxoFxi6H02EbjXFTUWw70jneCMy0nLcwESHEkjZdfgQl bOvOK2Fvf86dLbT1Xh7128mF0cCHoygAuvC0blQ6FsMujCX1Qr0q2G1DPS+sfSBj8/7Cew 7S4ZWuECeEVehHokdS0fElFD8LPv1Tw= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=UztC+bEo; spf=pass (imf30.hostedemail.com: domain of djwong@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=djwong@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1704327538; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=FByYfmIwAPRg+ASr3GzIJwOHX7pMyZEvYrSbu4f6tY8=; b=Uu6mHxS40AUjGKyhaUBlHIZenE/StHfZkbTttgaQSQsbIqgy0rj+OaFIg+wt2jLE3lx2UI XmKzvml428ICZ8MjHWVwVEEi4Ew36pGRoY+8mxstkywcMD1rWdfIOnGy8ZOq2TcutOfM3z ZXOZ5gvQpLnOVHKVwVcXshuJCTbKdtE= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 04C3760C0D; Thu, 4 Jan 2024 00:18:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9C78FC433C8; Thu, 4 Jan 2024 00:18:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1704327536; bh=T5mvxqVxG0/Fh+i329OnR6A1dG2fuRhpvMkzMGMxwZE=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=UztC+bEo2HFk5a6wyw5IuTma2KX1B8fCBjF/J5vAnzARfrNN9gTWGvDXxxTBgDp+g s9og//g863OwX+3RXuPz4AT/TMK75OyJV13u0yZXoSGG+c2M2nAMJUfnbPmQQJDurA JDJVYvCzdlrVoX3y160EPuOXrKYwOMIOonDaPIFoVgch95OidB/lWLaXgAp25EFpCw SzIlmW8TJzOv/ihe7ghQK4cEOqFPSDKNrUnBfn/A0fusiza2PsSkqE4caNwi20blp5 q3XV9X+4FGQm/QPV97co0GKoMt8U4UGUr/n0jUZHvq/LNhgliBvOgQhsqCq3CkDnm2 mZfAefA917RyA== Date: Wed, 3 Jan 2024 16:18:56 -0800 From: "Darrick J. Wong" To: Christoph Hellwig Cc: Chandan Babu R , Hugh Dickins , Andrew Morton , linux-xfs@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH 13/15] xfs: don't unconditionally allocate a new page in xfile_get_page Message-ID: <20240104001856.GG361584@frogsfrogsfrogs> References: <20240103084126.513354-1-hch@lst.de> <20240103084126.513354-14-hch@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240103084126.513354-14-hch@lst.de> X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: E839780012 X-Stat-Signature: t5sun5gu8soqe4zc9bp67aznm7c6ufcn X-Rspam-User: X-HE-Tag: 1704327537-468383 X-HE-Meta: U2FsdGVkX18cLCtRhbAaWmsaI9YsX982Q0WIWoYVY7ThfCWOQzeeZzoBZGtJ0TBjTpiJR+1ybfQEIoJBezSKOjpJ7R9RAfFIGgJic0fkw4FVXaK+7TVlJ9SnWlb/I3DZ6Vsb3/HDYLb/VlRsJC4hhnt0cAkVDolHrnG5qvBAoDlXoIj+aXOojdzJdZ4AJCxnnrxh4gjKZVVaGQsCxYSnY81myIG4eD1w3VdhuLOeBwkZAe/3buM6SBlFU7UckHc6gKWvj7V1MuijeLRWWfCTDiCHCamiLAk3zxEgLe+w6SH1OVSa9zdLFsPMHuVOo0EQdH1ehh1TcBTBPtkuvdyleBc2D0fzC800hTsuUbSXT5CIiHseqNg8oLoFb1HoNhduEFYx8S7vdUkBlMZ7gYVA4562uBHsatxlAd6cxWaTiG7tARMWpBXL4lUCauigbS1x3Jiw7bf4w8S7LYhjLkEU86ViKUU4TF6PDmHQ4bPGIfzQWy/o5m0fQNmrGhUVJubOrT4ieEVUbl4fZT/sah+q9gibKm3c9oK65yS+NRkHvY4QzqssGPibJoW0RS5EwQUw/vwGQHeQBMrG7/DnpDeGXX15dPHGgiiLh4IrJsJvR/ulwr5qaHnx/78+6v945nYXHzuSbKNFJ9FWGIbHKKb7WEZ6ZNv7QvsNAkyG8sqZ4KjOdsr71l4edu+JBQOjt4i/cH5C18oSPd+R1HjKzfEq5ugMr6QetWWo3is35YkdAbN6ftRgPKQTwNbpVesqo7WA0TzYlp3V84LJU2HckkmXb+azJwm6TnQmdAY0pkYexaRoGrgtETR+dlcK31JPZLfnV3NeCh/AoNshfYGgooIvpHAwfVV5lKIC7PSs8eecJYWOcOXcMAKUw0IHZ/TGvwg81eswg8XMLc2HZmwjHG/0cuBvkOMYowySrKB/BoO4Ok1zAxqlbqsw4j2qzciNWoAnuFnmcX9+qjucNMXxd7s zU+PHxVt DFd9BsPE3ZzEloi1ASOUNlkZzO97xeinKcqcPegTWWzo5vRje+563dF81AhYKeAzMN77rAPztOqw8kvGBOUULjjamkGBR8uuDaDllfttxvixEBH/Pn8zMOyleA8JjirPuKX3CW7brcWhKkWmtiiFFVG4btoZGSYRFpmDYtQDIqi2aM/ZQJnLA5E2nQ9O5gDrcA6KtVhCsOLcRfnuS9n5JMBvzaqVUaqUsy/nnCq48vTY0eAny2pRpUGJEK/s/HPmlvVqGDwuxS3ngSy7JSVpRuoN5NysGhrg9sxqS 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: On Wed, Jan 03, 2024 at 08:41:24AM +0000, Christoph Hellwig wrote: > 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 Looks correct to me, Reviewed-by: Darrick J. Wong --D > --- > 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__ */ > -- > 2.39.2 > >