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 E8C57C02183 for ; Tue, 14 Jan 2025 21:09:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7E03C280004; Tue, 14 Jan 2025 16:09:06 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 78EEA280003; Tue, 14 Jan 2025 16:09:06 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 657AD280004; Tue, 14 Jan 2025 16:09:06 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 44442280003 for ; Tue, 14 Jan 2025 16:09:06 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 06749A0D9F for ; Tue, 14 Jan 2025 21:09:06 +0000 (UTC) X-FDA: 83007297492.19.322C19E Received: from sxb1plsmtpa01-02.prod.sxb1.secureserver.net (sxb1plsmtpa01-02.prod.sxb1.secureserver.net [188.121.53.19]) by imf03.hostedemail.com (Postfix) with ESMTP id 2744F20004 for ; Tue, 14 Jan 2025 21:09:03 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=none; spf=pass (imf03.hostedemail.com: domain of phillip@squashfs.org.uk designates 188.121.53.19 as permitted sender) smtp.mailfrom=phillip@squashfs.org.uk; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1736888944; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=63eQCsnB20LV0tFr7pOe5G1VJyPkqK6pGKQVNJE743U=; b=KWEhoWBG0uZiHvgCDGw3SzBUsEZdw+V15HYOFNb7gaQ3FtZN7QYyu5RgYZ+cOs8UzEz+Sg ny642No1XqtLNxeiQN5ddZQ+mqAlIxDhklUoReiq4CNjnjhOERLFGLLz3kP9d85cJyiuwR lHHaESunQhqVKw+IiMjLVC4mx77MJLQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1736888944; a=rsa-sha256; cv=none; b=jfw9vhtMuYIL9t21dwh8uJdyaimwmz1NU1JWZX17IBEs04SUJsrwXlJhNeOX0WUiE53NtN D+eaUyTdmau/1pBep0TNxb9KYH5EmqdtY4EEH1A0jUv3u5StE/pSlHKfA8q0sEINX2KcmZ NhTrsM4VIYWy+Ztv8idZeAJwASa5Tjc= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=none; spf=pass (imf03.hostedemail.com: domain of phillip@squashfs.org.uk designates 188.121.53.19 as permitted sender) smtp.mailfrom=phillip@squashfs.org.uk; dmarc=none Received: from [192.168.178.95] ([82.69.79.175]) by :SMTPAUTH: with ESMTPSA id Xo9gtGd7iwNr3Xo9gtVvbc; Tue, 14 Jan 2025 14:08:57 -0700 X-SECURESERVER-ACCT: phillip@squashfs.org.uk Message-ID: <0f6aefda-b616-40f9-9ccd-bb5eabad4e27@squashfs.org.uk> Date: Tue, 14 Jan 2025 21:08:31 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 4/5] squashfs; Convert squashfs_copy_cache() to take a folio To: "Matthew Wilcox (Oracle)" Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org References: <20241216162701.57549-1-willy@infradead.org> <20241216162701.57549-4-willy@infradead.org> Content-Language: en-US From: Phillip Lougher In-Reply-To: <20241216162701.57549-4-willy@infradead.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-CMAE-Envelope: MS4xfKZ/ag7YFn83X3UpOTOBUlGZoIWbzXzp7sr0lnOgdg1P4M1liOEAcRsVPSc/3oAIBXlZHplfGmiacjCIKeyVUd5a7+91oh1IZ1Ha94NT4v4hdOBh4+Oq 523JT6pb6tGhtn3M242FOwGTrO8Be43gHqvoiVQNZ9DfqQkk8po9u4SPJgk6feon6D80AJqPIConuJyUd9qLSPmm5iyXoXc7NdJstu76iP2A775JCW0ySlgi iYeGH1Rnoh/BdH6ATs7FxmX8vIQLjX3xjAkXaaS8vNHsusF5v57DpAG6x4ACb2Xpe6IdsZDuWXgvoULRH9VNbA== X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 2744F20004 X-Stat-Signature: 3gmw99ym6gq6pm9eqhqog6foig9qk6s6 X-Rspam-User: X-CMAE-Analysis: v=2.4 cv=ZKfRm27b c=1 sm=1 tr=0 ts=6786d270 a=Pj4KlRpwvkMknfRW/KBXSg==:117 a=84ok6UeoqCVsigPHarzEiQ==:17 a=sbqGhzo7vaogXqIfg0wwtJZuoPc=:19 a=IkcTkHD0fZMA:10 a=VdSt8ZQiCzkA:10 a=JfrnYn6hAAAA:8 a=FXvPX3liAAAA:8 a=YMrt_mpcskI9137y0l4A:9 a=QEXdDO2ut3YA:10 a=1CNFftbPRP8L7MoqJWF3:22 a=UObqyxdv-6Yh2QiB9mM_:22 X-HE-Tag: 1736888943-640977 X-HE-Meta: U2FsdGVkX1/x2wEpQt9TCH2yjE50xAZszveFi0ts3iSn4+zue2IdpbR7sVeH+VszbmK/Pe/xGfL18trf4fxH6GmdpUOwN1q/vVrltZYBMDPSBl3OCG/z10FzkmN8C6wpUNA8TOaq3kjr//kf+LGDe2pji4bTKB4DH796Zdkqh0J2eLtDAS+UhgZc3TQM6yNWMRCw5yCiVAz5lP91/dI0txHqLzm5FVpLmu9wt2mc4ls+MX9LoJ6nMYxRt3HzNwnco4izld2++QjwCNjdRn/uK3jpzv/Zdiz40hmhCTgczU6z3bMLKcn3LstJaPDnhXLlnxb7WFllIKKvigV/v46Z4FrixKpKxLlor2YPsjzri7lwdw1tY+U+AGfsG4AfhETwwxDHU4JvgoAwfaFMzMTbrZip+9OmdI4wXKR0hRMHimKLMsZcKF7RNeNES4WuufcJCEDR71jyA9hA3CJl2llL63QCi+VLB6uCYJh1II1c/sqPLNp37CN4VQC1sSRI08cvIkxAfZMj1tQ160DZgi5YbEuFyBxeA4Xc3D3uGS5c5r3QrTgauHALOr1Wrl8KxlG2C9A7026PuyWA5pJNayPn2RvqEqcHEW8h8vQKBeAQiJSLEUAOfR5FRpnrGxgTL2E38f9IL62fbXyn1xJjdW+/BhOrlXb3aeL3aJ8JAs3VyQoLJ3jXjCZA3DPS1HM+BXUjMgKuEJpabUtBRNfGG6LaOCoQaZAy8NUuBhSn6xxx6IvjrOqYToLb9sbYD97tSWOWBJv6Fz+qf4Eny4IbF4LMSQlsruLkKiU4ISMya27CzITm2gIM6TdnVVHztgzrRein8Bj3BovB8E43aCdXmDaCpJVx8mIK2wBaHjrmBEcMsyVIfp/o8ikDoS+95jwNO7pXqHakceE2p2p1MyLsa/iX6L/Vo2b6YE8p7BCBVhc2XTYZviUmTZzk+eFh+nJMjdAXnur5cY399klynrBxbop tfVm4fF0 vQw5gngCOK640bGWyd3naLy09sfibEon9TY88CcPLwgny/nQ+cEZr86e5QnUG/k8OqfVoYmAHxnZIkD990dL5t40gMSPl1qNO8LJBVp8Iq6Yh59/fMkR8N4YcvVKEUzd1tX3zlA0kMqc/aepOCGe0TPNjA/3ja+MQUDSl1bIrE+9/BlUL8R65nxjKPaF77DHtAg6sZ38RcGC+6pfChuPTlVztXzkNDAj2mIbkvtN8ZV/AQWF0ubhExOt8Fw//EXQGHfnL+VjcPkRZNFPN7YC7xMcB1U8/QKv5JV8ylurPPMyeTcqRhadyK9znaLqkiesqf6m5VQnjIAzzgvPEceGsgr5v+8FnVH3oT/ftFV1IumgxHLNYhXV5J9o6dU0XvxOzF2vZQaJ2zuzOHcVxNZDWXDyrOQAsZ1D5+GK8/W1g+TRgXduf/YWCVrUEXppHU5C5+t43WOfiAeryYfRvdNO6DL3gL6Y/ficLuSY5OjnIAuWSSkq+LOvrQLIcJGgI87ayvoGWmjWcdpS5J8WTIuEBUF9gAGrMqYQNZW38zNaK9xNZWonk72ZaKO48EZE5aJUOLsJp4wXmr0jm4GP++AS+Cl+h/1JxWCoVAozL2AEzVJtPdte4LWAClWjVKlO9S/608SLhaNOvBoKdFGssuNY6cJAO5eL8Y75Lt1NzP7yrwDDGRcdBV1TxBLHx9iA/ec1nwF3iwGImm+7GkJYkJtSK/z8rbKYhGNJbNNt1 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 12/16/24 16:26, Matthew Wilcox (Oracle) wrote: > Remove accesses to page->index and page->mapping. Also use folio > APIs where available. This code still assumes order 0 folios. > > Signed-off-by: Matthew Wilcox (Oracle) Reviewed-by: Phillip Lougher Tested-by: Phillip Lougher > --- > fs/squashfs/file.c | 46 ++++++++++++++++++++++------------------ > fs/squashfs/file_cache.c | 2 +- > fs/squashfs/squashfs.h | 4 ++-- > 3 files changed, 28 insertions(+), 24 deletions(-) > > diff --git a/fs/squashfs/file.c b/fs/squashfs/file.c > index 5b81e26b1226..1f27e8161319 100644 > --- a/fs/squashfs/file.c > +++ b/fs/squashfs/file.c > @@ -378,13 +378,15 @@ void squashfs_fill_page(struct page *page, struct squashfs_cache_entry *buffer, > } > > /* Copy data into page cache */ > -void squashfs_copy_cache(struct page *page, struct squashfs_cache_entry *buffer, > - int bytes, int offset) > +void squashfs_copy_cache(struct folio *folio, > + struct squashfs_cache_entry *buffer, size_t bytes, > + size_t offset) > { > - struct inode *inode = page->mapping->host; > + struct address_space *mapping = folio->mapping; > + struct inode *inode = mapping->host; > struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; > int i, mask = (1 << (msblk->block_log - PAGE_SHIFT)) - 1; > - int start_index = page->index & ~mask, end_index = start_index | mask; > + int start_index = folio->index & ~mask, end_index = start_index | mask; > > /* > * Loop copying datablock into pages. As the datablock likely covers > @@ -394,25 +396,27 @@ void squashfs_copy_cache(struct page *page, struct squashfs_cache_entry *buffer, > */ > for (i = start_index; i <= end_index && bytes > 0; i++, > bytes -= PAGE_SIZE, offset += PAGE_SIZE) { > - struct page *push_page; > - int avail = buffer ? min_t(int, bytes, PAGE_SIZE) : 0; > + struct folio *push_folio; > + size_t avail = buffer ? min(bytes, PAGE_SIZE) : 0; > > - TRACE("bytes %d, i %d, available_bytes %d\n", bytes, i, avail); > + TRACE("bytes %zu, i %d, available_bytes %zu\n", bytes, i, avail); > > - push_page = (i == page->index) ? page : > - grab_cache_page_nowait(page->mapping, i); > + push_folio = (i == folio->index) ? folio : > + __filemap_get_folio(mapping, i, > + FGP_LOCK|FGP_CREAT|FGP_NOFS|FGP_NOWAIT, > + mapping_gfp_mask(mapping)); > > - if (!push_page) > + if (!push_folio) > continue; > > - if (PageUptodate(push_page)) > - goto skip_page; > + if (folio_test_uptodate(push_folio)) > + goto skip_folio; > > - squashfs_fill_page(push_page, buffer, offset, avail); > -skip_page: > - unlock_page(push_page); > - if (i != page->index) > - put_page(push_page); > + squashfs_fill_page(&push_folio->page, buffer, offset, avail); > +skip_folio: > + folio_unlock(push_folio); > + if (i != folio->index) > + folio_put(push_folio); > } > } > > @@ -430,16 +434,16 @@ static int squashfs_readpage_fragment(struct folio *folio, int expected) > squashfs_i(inode)->fragment_block, > squashfs_i(inode)->fragment_size); > else > - squashfs_copy_cache(&folio->page, buffer, expected, > + squashfs_copy_cache(folio, buffer, expected, > squashfs_i(inode)->fragment_offset); > > squashfs_cache_put(buffer); > return res; > } > > -static int squashfs_readpage_sparse(struct page *page, int expected) > +static int squashfs_readpage_sparse(struct folio *folio, int expected) > { > - squashfs_copy_cache(page, NULL, expected, 0); > + squashfs_copy_cache(folio, NULL, expected, 0); > return 0; > } > > @@ -470,7 +474,7 @@ static int squashfs_read_folio(struct file *file, struct folio *folio) > goto out; > > if (res == 0) > - res = squashfs_readpage_sparse(&folio->page, expected); > + res = squashfs_readpage_sparse(folio, expected); > else > res = squashfs_readpage_block(folio, block, res, expected); > } else > diff --git a/fs/squashfs/file_cache.c b/fs/squashfs/file_cache.c > index 0360d22a77d4..40e59a43d098 100644 > --- a/fs/squashfs/file_cache.c > +++ b/fs/squashfs/file_cache.c > @@ -29,7 +29,7 @@ int squashfs_readpage_block(struct folio *folio, u64 block, int bsize, int expec > ERROR("Unable to read page, block %llx, size %x\n", block, > bsize); > else > - squashfs_copy_cache(&folio->page, buffer, expected, 0); > + squashfs_copy_cache(folio, buffer, expected, 0); > > squashfs_cache_put(buffer); > return res; > diff --git a/fs/squashfs/squashfs.h b/fs/squashfs/squashfs.h > index 0f5373479516..9295556ecfd0 100644 > --- a/fs/squashfs/squashfs.h > +++ b/fs/squashfs/squashfs.h > @@ -68,8 +68,8 @@ extern __le64 *squashfs_read_fragment_index_table(struct super_block *, > > /* file.c */ > void squashfs_fill_page(struct page *, struct squashfs_cache_entry *, int, int); > -void squashfs_copy_cache(struct page *, struct squashfs_cache_entry *, int, > - int); > +void squashfs_copy_cache(struct folio *, struct squashfs_cache_entry *, > + size_t bytes, size_t offset); > > /* file_xxx.c */ > int squashfs_readpage_block(struct folio *, u64 block, int bsize, int expected);