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 3B836C3DA6E for ; Thu, 4 Jan 2024 00:20:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C800B6B03A3; Wed, 3 Jan 2024 19:20:27 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id C2FA36B03A4; Wed, 3 Jan 2024 19:20:27 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B1F1B6B03A5; Wed, 3 Jan 2024 19:20:27 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id A3A116B03A3 for ; Wed, 3 Jan 2024 19:20:27 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 7576D12065B for ; Thu, 4 Jan 2024 00:20:27 +0000 (UTC) X-FDA: 81639722094.28.524E768 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf19.hostedemail.com (Postfix) with ESMTP id A10641A0018 for ; Thu, 4 Jan 2024 00:20:25 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=ZE07rd22; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf19.hostedemail.com: domain of djwong@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=djwong@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1704327625; 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=Fg22BqmWjjgAllE64UmsFb1iC2WrUbXadgE8AQS0ZZ8=; b=eCdDeZazbFrYVMBao+/oS5erJq4DsRBAGr8Nf1BfZkWYQ+emM9upD+oxLMMmNNLOClCb+W 2NfDjR20nR3JoV2AzZc3ciHtgtchtoHpuTlB6QKrwFHw/omDzKfKkfR87TOcNPS4qI0qdB semDyrSQ2Vrr9WdNXe0t0eqchmK8/iw= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=ZE07rd22; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf19.hostedemail.com: domain of djwong@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=djwong@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1704327625; a=rsa-sha256; cv=none; b=OgVSww24jbfuRUlZoyoOd0sRI8vmMlp3f+qHxOX2fRYla7FBbUf5LBtnioflo9sgK/VpNq oEFMBOp8uagyq1veN0v4zMmi5438CWbT1JLWZlKXOP/22lXKWL3dxBW0NiKHorHNzzDJSi lNgzKQVEQODNVDa8NPW3T7qR1d26Si8= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id D7E9E61615; Thu, 4 Jan 2024 00:20:24 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7FAF5C433C8; Thu, 4 Jan 2024 00:20:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1704327624; bh=pEgOItruu30RUfKNsh5vfgUOuP+fmt6+FLYwopw18u8=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=ZE07rd22woPVAj7VMF+LZQe9KAFFr2As/kdHka8LkIMBISspIPtvmgacvu5DuE46L 9Qn5LtJlCwvGacm5+tJefpxUiB7NvLXI2NqtuPC0QZIz6C3FJFtJyt9aI25B6+Cxnx c8Mimw56MrN2iFJpNC496KRUyy5zpgXMNKtSFiWKDoI03mycIfUvbIFPiZoZi/MYZL VbG9D6TEIcoupg32gpumP2NYRflDP8jcF1UTmgwmBYfgifY7s2ICLMobQTmJ/hi3qR gazmYLGuqXrD3/9CB52Rma6Hpvlt3ZYKctduUeB56YvUQNmrXy21FkmecM4l0Gx0Vt Dzw18JiolGxsA== Date: Wed, 3 Jan 2024 16:20:24 -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 14/15] xfs: use xfile_get_page and xfile_put_page in xfile_obj_store Message-ID: <20240104002024.GH361584@frogsfrogsfrogs> References: <20240103084126.513354-1-hch@lst.de> <20240103084126.513354-15-hch@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240103084126.513354-15-hch@lst.de> X-Rspamd-Queue-Id: A10641A0018 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: 7oz1ux1p7wgdd8tyqsjr5mxq7m5icsno X-HE-Tag: 1704327625-771834 X-HE-Meta: U2FsdGVkX1/9PfB2jE/3gUM+EWj1xBbuFtlKDk/iyH8Ze5RCDLaVQKikN2xPSQLV9RInD5nTObDms2m8q4CA9wFsgm4T9ax51OHxOiAZkhXY6INNoQrJIk+BKNdQWmUOAPSoiNuovRi07Lz0X1k6xfZ/Mc2OSrQIvsnTIG92UBn3hSBCWeKuwBvfQYZhaeJZq7ui40WCeC8t9JBT+s0AGYma4iyDI+GLI+2NMvPJK9TCNYAqdxWMERvdz1kATpwUIqyxGP3pxEE/6vQn83zlRIFItFA0MMMuX7ri2sjQvI1mzC5Gk9aQWrD/SnXIBzCIeEgCoJYtD7hpp9ma99g2kvUd3YYYlgmK1N0X01EYXlkaYoKBvnFhaO9N1yKGDCMkWoz+X7LSLp3+q9soySqOY3tWMO1asPz11PoSt7z53Nr7HxXQS20BNeduDViuDDVIpcmPozXC7I8/RAY9hAoLk3UHDPwK8V9AirOj7HfobPoQ2PLfST4hmwvv80M3MzVTkVJmmZJjTuvQWINsbCGUr9H/LxK22vsh6XD+Mla7xK0Qzr/IFCspOkKRNG7afB24WZi81TCX+agXtGqOWDZE9bFKuXCcjrrCk1wbYTUasSOtz8YbL0lNXvKg5PGHoVYyI3YZExr17cHXro+3JX7YNoBiocWQ+eXJhSVcDOJEUA4AAxCZ65ZBbOpdI972jZ2kV0afhUVrln+WcDJkJkJYpw/LIl36DgGqtCnQHJpMtdl/yqbZoQQyM/2lzpOp7VzQ973zB2Esbx1vf/PZ1o7I9ugR2hECUsDpyJnsLCF+c5RFiGUhi4Gk6sXreEiiEQbaZTXNF+XsWCdWVsQ7hcFyC/WxWZmsIUJX0AW70NwaTp6blsM15AKw1z8hnh4HnNQDbSl2CxfrUiHZMEz9dwrm1q8XCpO7M/BJb6YftAkROOM5UA3xhkSMpPr+EjbPhLnwbJug1mxJSJiSpMQzrjv 524qCDAP QYYyRecsDFlLGfw6X1DsqxIg/qSSWy70jJ7aP6WnZmlNXBxFhCA07i/n1ML/U3KG6Qzo5eNbkIenz9LVVIqNwrrRM9a+kFiUEkWvxDv8KvHpDvuDxs4x7UbGdjyOqarrwVUKRwMMGiqmKXtqPAHFlseN65qjeOuI2koonKWa6Ee0zxJqoQAPsyCnpRlJ3yEcvy1odkGBwPuS9/ZryFtqCfRF/vjFxI1dDZddjdaEITmv/TUTn6TyXD/kvHyYlUDHiCpXeK5qOElYeQAwv2qBfoSqOHPrNhIxgRtadXbZCw2BpLRV1uhAhTJAH+wgQG9nxmtnw 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:25AM +0000, Christoph Hellwig wrote: > Rewrite xfile_obj_store to use xfile_get_page and xfile_put_page to > access the data in the shmem page cache instead of abusing the > shmem write_begin and write_end aops. > > Signed-off-by: Christoph Hellwig Much simpler, though I wonder if willy is going to have something to say about xfile.c continuing to pass pages around instead of folios. I /think/ that's ok since we actually need the physical base page for doing IO, right? Reviewed-by: Darrick J. Wong --D > --- > fs/xfs/scrub/xfile.c | 66 ++++++++------------------------------------ > 1 file changed, 11 insertions(+), 55 deletions(-) > > diff --git a/fs/xfs/scrub/xfile.c b/fs/xfs/scrub/xfile.c > index 3ed7fb82a4497b..987b03df241b02 100644 > --- a/fs/xfs/scrub/xfile.c > +++ b/fs/xfs/scrub/xfile.c > @@ -182,74 +182,30 @@ xfile_obj_store( > size_t count, > loff_t pos) > { > - struct inode *inode = file_inode(xf->file); > - struct address_space *mapping = inode->i_mapping; > - const struct address_space_operations *aops = mapping->a_ops; > - struct page *page = NULL; > - unsigned int pflags; > - int error = 0; > - > if (count > MAX_RW_COUNT) > return -ENOMEM; > - if (inode->i_sb->s_maxbytes - pos < count) > + if (file_inode(xf->file)->i_sb->s_maxbytes - pos < count) > return -ENOMEM; > > trace_xfile_obj_store(xf, pos, count); > > - pflags = memalloc_nofs_save(); > while (count > 0) { > - void *fsdata = NULL; > - void *p, *kaddr; > + struct page *page; > unsigned int len; > - int ret; > > len = min_t(ssize_t, count, PAGE_SIZE - offset_in_page(pos)); > + page = xfile_get_page(xf, pos, len, XFILE_ALLOC); > + if (IS_ERR(page)) > + return -ENOMEM; > + memcpy(page_address(page) + offset_in_page(pos), buf, len); > + xfile_put_page(xf, page); > > - /* > - * We call write_begin directly here to avoid all the freezer > - * protection lock-taking that happens in the normal path. > - * shmem doesn't support fs freeze, but lockdep doesn't know > - * that and will trip over that. > - */ > - error = aops->write_begin(NULL, mapping, pos, len, &page, > - &fsdata); > - if (error) { > - error = -ENOMEM; > - break; > - } > - > - /* > - * xfile pages must never be mapped into userspace, so we skip > - * the dcache flush. If the page is not uptodate, zero it > - * before writing data. > - */ > - kaddr = page_address(page); > - if (!PageUptodate(page)) { > - memset(kaddr, 0, PAGE_SIZE); > - SetPageUptodate(page); > - } > - p = kaddr + offset_in_page(pos); > - memcpy(p, buf, len); > - > - ret = aops->write_end(NULL, mapping, pos, len, len, page, > - fsdata); > - if (ret < 0) { > - error = -ENOMEM; > - break; > - } > - > - if (ret != len) { > - error = -ENOMEM; > - break; > - } > - > - count -= ret; > - pos += ret; > - buf += ret; > + count -= len; > + pos += len; > + buf += len; > } > - memalloc_nofs_restore(pflags); > > - return error; > + return 0; > } > > /* Find the next written area in the xfile data for a given offset. */ > -- > 2.39.2 > >