From patchwork Mon Feb 17 19:20:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 13978511 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C966235BF4 for ; Mon, 17 Feb 2025 19:20:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739820014; cv=none; b=mN7xk35K1I0NWSLLz3iC16Kpuq9Ni7hV2ol4yUgXENIZ/twnMN6zTmLiPItfG4PA6ZJUT6IafpRzpAObBJ/0FGlXYAZoU+RgtiurtpC88bDQhQHVD7s7GDLPayDbeZ5mExVcr/H0U7YVlbia7RFl3vizF7AvpLIemdxVRwGQ9tY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739820014; c=relaxed/simple; bh=swQ3n7dg/mMu98RCJdbi5fDoYxZk9aO9RiqzwrAOIx4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=rAh4fjJl4XZRCcaax9LolBjf2HrUGULvJbVCTxHcU+DnYPSWT7zh6fBOvJFI6uvPg8Eyvc3J+/vIwSMeLmrURfriz8ooaiA76XBYat83VbGvI7Jxde7hC7XMqzBf0YdIHXUkpYOQPYuzZCAVTjZ1uyDPHv+BVmpYL1Q1HpakKpg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=VbrNGmUQ; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="VbrNGmUQ" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:In-Reply-To:References; bh=bpxlu1VpRHaMCuJHYNJDFh9kAemaYJrHAe9o8N/mo/c=; b=VbrNGmUQwJg+LP7rYf68pxYOP7 762/PVz7ngiEptNx0T5WinBj1kRXwhHh8wmrGbyg/kbzKKTJDIQ1Z7Kh4NbuQvu2FvITreeqOf7Q+ bIm76Xqg0S8LJ6m8Xhk4XhN/yBW24eJHqBJl8kSDPiYBmSahicSUQSspztL2bbkgF1ngSHOw6SgI7 xK39GDI7yBRZrdlCpgwL2suuWqsIQ3SBaNSQeY87Bg5GJx0p4s/IH2GsbkGBV9NiBcMMvmDO8KMP6 d/d53J9+3feSlnrN2FpSqMQ1hCyHn6ZSIHnYFYVXEPwddNrRuFS9BUsdTNv9feVqZ4DVQJrwD+2ub 3GYX6ZRQ==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tk6f5-00000001pvQ-1MFQ; Mon, 17 Feb 2025 19:20:11 +0000 From: "Matthew Wilcox (Oracle)" To: Andrew Morton Cc: "Matthew Wilcox (Oracle)" , linux-fsdevel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 1/3] fs: Convert block_commit_write() to take a folio Date: Mon, 17 Feb 2025 19:20:06 +0000 Message-ID: <20250217192009.437916-1-willy@infradead.org> X-Mailer: git-send-email 2.48.1 Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 All callers now have a folio, so pass it in instead of converting folio->page->folio. Signed-off-by: Matthew Wilcox (Oracle) --- fs/buffer.c | 14 ++++---------- fs/ext4/inline.c | 2 +- fs/ext4/move_extent.c | 2 +- fs/iomap/buffered-io.c | 2 +- fs/ocfs2/aops.c | 4 ++-- fs/ocfs2/file.c | 2 +- fs/udf/file.c | 2 +- include/linux/buffer_head.h | 2 +- 8 files changed, 12 insertions(+), 18 deletions(-) diff --git a/fs/buffer.c b/fs/buffer.c index cc8452f60251..c66a59bb068b 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -2166,7 +2166,7 @@ int __block_write_begin(struct folio *folio, loff_t pos, unsigned len, } EXPORT_SYMBOL(__block_write_begin); -static void __block_commit_write(struct folio *folio, size_t from, size_t to) +void block_commit_write(struct folio *folio, size_t from, size_t to) { size_t block_start, block_end; bool partial = false; @@ -2204,6 +2204,7 @@ static void __block_commit_write(struct folio *folio, size_t from, size_t to) if (!partial) folio_mark_uptodate(folio); } +EXPORT_SYMBOL(block_commit_write); /* * block_write_begin takes care of the basic task of block allocation and @@ -2262,7 +2263,7 @@ int block_write_end(struct file *file, struct address_space *mapping, flush_dcache_folio(folio); /* This could be a short (even 0-length) commit */ - __block_commit_write(folio, start, start + copied); + block_commit_write(folio, start, start + copied); return copied; } @@ -2578,13 +2579,6 @@ int cont_write_begin(struct file *file, struct address_space *mapping, } EXPORT_SYMBOL(cont_write_begin); -void block_commit_write(struct page *page, unsigned from, unsigned to) -{ - struct folio *folio = page_folio(page); - __block_commit_write(folio, from, to); -} -EXPORT_SYMBOL(block_commit_write); - /* * block_page_mkwrite() is not allowed to change the file size as it gets * called from a page fault handler when a page is first dirtied. Hence we must @@ -2630,7 +2624,7 @@ int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, if (unlikely(ret)) goto out_unlock; - __block_commit_write(folio, 0, end); + block_commit_write(folio, 0, end); folio_mark_dirty(folio); folio_wait_stable(folio); diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c index 3536ca7e4fcc..0af474c8b260 100644 --- a/fs/ext4/inline.c +++ b/fs/ext4/inline.c @@ -637,7 +637,7 @@ static int ext4_convert_inline_data_to_extent(struct address_space *mapping, goto retry; if (folio) - block_commit_write(&folio->page, from, to); + block_commit_write(folio, from, to); out: if (folio) { folio_unlock(folio); diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c index 898443e98efc..48649be64d6a 100644 --- a/fs/ext4/move_extent.c +++ b/fs/ext4/move_extent.c @@ -399,7 +399,7 @@ move_extent_per_page(struct file *o_filp, struct inode *donor_inode, bh = bh->b_this_page; } - block_commit_write(&folio[0]->page, from, from + replaced_size); + block_commit_write(folio[0], from, from + replaced_size); /* Even in case of data=writeback it is reasonable to pin * inode to transaction, to prevent unexpected data loss */ diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index d303e6c8900c..f3904d13cda4 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -1484,7 +1484,7 @@ static loff_t iomap_folio_mkwrite_iter(struct iomap_iter *iter, &iter->iomap); if (ret) return ret; - block_commit_write(&folio->page, 0, length); + block_commit_write(folio, 0, length); } else { WARN_ON_ONCE(!folio_test_uptodate(folio)); folio_mark_dirty(folio); diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c index 5bbeb6fbb1ac..ee1d92ed950f 100644 --- a/fs/ocfs2/aops.c +++ b/fs/ocfs2/aops.c @@ -920,7 +920,7 @@ static void ocfs2_write_failure(struct inode *inode, ocfs2_jbd2_inode_add_write(wc->w_handle, inode, user_pos, user_len); - block_commit_write(&folio->page, from, to); + block_commit_write(folio, from, to); } } } @@ -2012,7 +2012,7 @@ int ocfs2_write_end_nolock(struct address_space *mapping, loff_t pos, ocfs2_jbd2_inode_add_write(handle, inode, start_byte, length); } - block_commit_write(&folio->page, from, to); + block_commit_write(folio, from, to); } } diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index e54f2c4b5a90..2056cf08ac1e 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c @@ -813,7 +813,7 @@ static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from, /* must not update i_size! */ - block_commit_write(&folio->page, block_start + 1, block_start + 1); + block_commit_write(folio, block_start + 1, block_start + 1); } /* diff --git a/fs/udf/file.c b/fs/udf/file.c index 412fe7c4d348..0d76c4f37b3e 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -69,7 +69,7 @@ static vm_fault_t udf_page_mkwrite(struct vm_fault *vmf) goto out_unlock; } - block_commit_write(&folio->page, 0, end); + block_commit_write(folio, 0, end); out_dirty: folio_mark_dirty(folio); folio_wait_stable(folio); diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 932139c5d46f..6672e1a5031c 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h @@ -271,7 +271,7 @@ int cont_write_begin(struct file *, struct address_space *, loff_t, unsigned, struct folio **, void **, get_block_t *, loff_t *); int generic_cont_expand_simple(struct inode *inode, loff_t size); -void block_commit_write(struct page *page, unsigned int from, unsigned int to); +void block_commit_write(struct folio *folio, size_t from, size_t to); int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, get_block_t get_block); sector_t generic_block_bmap(struct address_space *, sector_t, get_block_t *); From patchwork Mon Feb 17 19:20:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 13978509 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C8F723537B for ; Mon, 17 Feb 2025 19:20:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739820014; cv=none; b=MbJXKrl65Ly5Gz6Ajx9SE7kYEf+gtvy0fhoG8hsmgUPhQxNpnSxj8kKkivTfUkvnOPHoHK0tqtzO6ttQ80UsEJ9q1XSWtm9CP/pJBfj+NYWqMreYmn0o4K7qjnT1eKhP/zJBy3WFa3zEMYC/pDDMSF7ffyr5m5jlXzddegQ47xo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739820014; c=relaxed/simple; bh=GteIYcq/HHG7jREu0VRvdKhtZGG9kNxJH3ms/IPmvvo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jzi9dZ+K3nFfu/bXunatvx6AN+xaZNytNLS5UYD7YXwr9752iU66StNUuSwzTAUgCbl7CCE37BM4dseGHmCWCZWbEBuOW1vd/1WzNTt3N/qznW1Ez3pj4bzcHBIj8kWZdie7p22L7comeuSXGJFBcKjtRUAbbV0cJfDPFiWKOz0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=kCCxbnbo; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="kCCxbnbo" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; 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=HMl82HmKutSPx3lxyiWh5KoO2mHO29+UbXsPUZ6OrWI=; b=kCCxbnbowrCoqBW9n7zeTDAGkl MkugdkfNC8lYRUzKe3ZPVRT7v7z2taIwLqc9k0dypf4Bs51JDXEq9y3qcr/7YHct7vym+JhllT+0H N2ELoeHHCptsrP8LxqMtGgXDKHfzT5s30IRpG8FX7QIRMwa9IHedmjjLpl+Cc8b7s/lIiu2LXjv9n dPybuw9cbtvs95pmK+ZMFrBFCiI4TSGWZJCGlcd0I1ajMT94CsnbsAC+3+gMX26nGyb2Upe8XNs/Z S/ob/QjAELhmNqgEhakysbganXiauVWXN4Wa1XluE+fnPp1LxVqkkHWm9tjIJj1istS36eBLR1u06 9Do3Wuxw==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tk6f5-00000001pvS-2S1p; Mon, 17 Feb 2025 19:20:11 +0000 From: "Matthew Wilcox (Oracle)" To: Andrew Morton Cc: "Matthew Wilcox (Oracle)" , linux-fsdevel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 2/3] fs: Remove page_file_mapping() Date: Mon, 17 Feb 2025 19:20:07 +0000 Message-ID: <20250217192009.437916-2-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217192009.437916-1-willy@infradead.org> References: <20250217192009.437916-1-willy@infradead.org> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This wrapper has no more callers. Delete it. Signed-off-by: Matthew Wilcox (Oracle) --- include/linux/pagemap.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index 47bfc6b1b632..975c56fb4f85 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -575,11 +575,6 @@ static inline struct address_space *folio_flush_mapping(struct folio *folio) return folio_mapping(folio); } -static inline struct address_space *page_file_mapping(struct page *page) -{ - return folio_file_mapping(page_folio(page)); -} - /** * folio_inode - Get the host inode for this folio. * @folio: The folio. From patchwork Mon Feb 17 19:20:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 13978510 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 60808187858 for ; Mon, 17 Feb 2025 19:20:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739820014; cv=none; b=aKGS8U/SZ7ZySf5Dzp1j6QD07VZ4tpKJWpCE48qpWVNBcQxVRlAIpeDZCzu7qQ3cBc/J1/wLy9nnLrLWLut0frFXfU9oJ7Zikt4COQRcHDBe7n8zLpPXA5a97ChIWuTsuNCvUWzdiAPZjcbMWX2webMG4uFwGAXnNbNLthknAGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739820014; c=relaxed/simple; bh=SKhyeJaE8ssAxAgGdUB9eFRd425omTeGcmz+rHXViTQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XeBEoh6y32WAlcjYcIEGB9+NXO7BdwLwUA/WclllkWMSFysJ69zfkupLHBUpk38ISGOrKNbuPlNGEfysk8Z+wj40hm7HPRDSiwMTGbb/Q+uZG7OGbBm433/8qDV6TwcQUH7zm0L4TBReIAyP3pX3SwKy1UJbMmXgfgjK2UW8HAU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=rJri8FlG; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="rJri8FlG" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; 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=BFsH9QAI2na8Ehr8EVKOMkw6rcymXneSI8UT5C9tTyE=; b=rJri8FlGfREkB95xC59cKRmfff 95KyKR06lfzicmDOIR8qvngWjrFlT2V0rTWZi9hO8lsqsqMrMPa8UckoR4EMxhIRda0NNFxP8IQmt n0hzkG3hTShqFPrw6t1yH2511bRMlGGRPcX3e0GlD4aPdplTXwys0jiYJtn/2bgx+MChCorN0RxcQ l5xzqdsyyNIJPHY62YEW6XF6par9rT/TiyluLWLLnGuOXTmdbx8XoMP5o+UJOJksyywYQNyShUtKV gmKgsSVxFnTH49UJKn4sqpaiUlqSFKk643/lRUqJQqLKAg11hu1vATJrDEUrdJiTsrHg4cp49qFvo 2AfmUeIw==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tk6f5-00000001pvZ-310X; Mon, 17 Feb 2025 19:20:11 +0000 From: "Matthew Wilcox (Oracle)" To: Andrew Morton Cc: "Matthew Wilcox (Oracle)" , linux-fsdevel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 3/3] fs: Remove folio_file_mapping() Date: Mon, 17 Feb 2025 19:20:08 +0000 Message-ID: <20250217192009.437916-3-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217192009.437916-1-willy@infradead.org> References: <20250217192009.437916-1-willy@infradead.org> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 No callers of this function remain as filesystems no longer see swapfile pages through their normal read/write paths. Signed-off-by: Matthew Wilcox (Oracle) --- include/linux/pagemap.h | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index 975c56fb4f85..ad7c0f615e9b 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -535,26 +535,6 @@ static inline void filemap_nr_thps_dec(struct address_space *mapping) struct address_space *folio_mapping(struct folio *); struct address_space *swapcache_mapping(struct folio *); -/** - * folio_file_mapping - Find the mapping this folio belongs to. - * @folio: The folio. - * - * For folios which are in the page cache, return the mapping that this - * page belongs to. Folios in the swap cache return the mapping of the - * swap file or swap device where the data is stored. This is different - * from the mapping returned by folio_mapping(). The only reason to - * use it is if, like NFS, you return 0 from ->activate_swapfile. - * - * Do not call this for folios which aren't in the page cache or swap cache. - */ -static inline struct address_space *folio_file_mapping(struct folio *folio) -{ - if (unlikely(folio_test_swapcache(folio))) - return swapcache_mapping(folio); - - return folio->mapping; -} - /** * folio_flush_mapping - Find the file mapping this folio belongs to. * @folio: The folio.