All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Matthew Wilcox \(Oracle\) via Ocfs2-devel" <ocfs2-devel@oss.oracle.com>
To: linux-fsdevel@vger.kernel.org
Cc: linux-aio@kvack.org, linux-nfs@vger.kernel.org,
	cluster-devel@redhat.com, linux-ntfs-dev@lists.sourceforge.net,
	linux-kernel@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net,
	linux-block@vger.kernel.org, linux-mm@kvack.org,
	linux-mtd@lists.infradead.org, ocfs2-devel@oss.oracle.com,
	linux-ext4@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org
Subject: [Ocfs2-devel] [PATCH 09/20] mm/migrate: Add filemap_migrate_folio()
Date: Mon,  6 Jun 2022 21:40:39 +0100	[thread overview]
Message-ID: <20220606204050.2625949-10-willy@infradead.org> (raw)
In-Reply-To: <20220606204050.2625949-1-willy@infradead.org>

There is nothing iomap-specific about iomap_migratepage(), and it fits
a pattern used by several other filesystems, so move it to mm/migrate.c,
convert it to be filemap_migrate_folio() and convert the iomap filesystems
to use it.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/gfs2/aops.c          |  2 +-
 fs/iomap/buffered-io.c  | 25 -------------------------
 fs/xfs/xfs_aops.c       |  2 +-
 fs/zonefs/super.c       |  2 +-
 include/linux/iomap.h   |  6 ------
 include/linux/pagemap.h |  6 ++++++
 mm/migrate.c            | 20 ++++++++++++++++++++
 7 files changed, 29 insertions(+), 34 deletions(-)

diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c
index 106e90a36583..57ff883d432c 100644
--- a/fs/gfs2/aops.c
+++ b/fs/gfs2/aops.c
@@ -774,7 +774,7 @@ static const struct address_space_operations gfs2_aops = {
 	.invalidate_folio = iomap_invalidate_folio,
 	.bmap = gfs2_bmap,
 	.direct_IO = noop_direct_IO,
-	.migratepage = iomap_migrate_page,
+	.migrate_folio = filemap_migrate_folio,
 	.is_partially_uptodate = iomap_is_partially_uptodate,
 	.error_remove_page = generic_error_remove_page,
 };
diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
index 66278a14bfa7..5a91aa1db945 100644
--- a/fs/iomap/buffered-io.c
+++ b/fs/iomap/buffered-io.c
@@ -489,31 +489,6 @@ void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len)
 }
 EXPORT_SYMBOL_GPL(iomap_invalidate_folio);
 
-#ifdef CONFIG_MIGRATION
-int
-iomap_migrate_page(struct address_space *mapping, struct page *newpage,
-		struct page *page, enum migrate_mode mode)
-{
-	struct folio *folio = page_folio(page);
-	struct folio *newfolio = page_folio(newpage);
-	int ret;
-
-	ret = folio_migrate_mapping(mapping, newfolio, folio, 0);
-	if (ret != MIGRATEPAGE_SUCCESS)
-		return ret;
-
-	if (folio_test_private(folio))
-		folio_attach_private(newfolio, folio_detach_private(folio));
-
-	if (mode != MIGRATE_SYNC_NO_COPY)
-		folio_migrate_copy(newfolio, folio);
-	else
-		folio_migrate_flags(newfolio, folio);
-	return MIGRATEPAGE_SUCCESS;
-}
-EXPORT_SYMBOL_GPL(iomap_migrate_page);
-#endif /* CONFIG_MIGRATION */
-
 static void
 iomap_write_failed(struct inode *inode, loff_t pos, unsigned len)
 {
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index 8ec38b25187b..5d1a995b15f8 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -570,7 +570,7 @@ const struct address_space_operations xfs_address_space_operations = {
 	.invalidate_folio	= iomap_invalidate_folio,
 	.bmap			= xfs_vm_bmap,
 	.direct_IO		= noop_direct_IO,
-	.migratepage		= iomap_migrate_page,
+	.migrate_folio		= filemap_migrate_folio,
 	.is_partially_uptodate  = iomap_is_partially_uptodate,
 	.error_remove_page	= generic_error_remove_page,
 	.swap_activate		= xfs_iomap_swapfile_activate,
diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c
index bcb21aea990a..d4c3f28f34ee 100644
--- a/fs/zonefs/super.c
+++ b/fs/zonefs/super.c
@@ -237,7 +237,7 @@ static const struct address_space_operations zonefs_file_aops = {
 	.dirty_folio		= filemap_dirty_folio,
 	.release_folio		= iomap_release_folio,
 	.invalidate_folio	= iomap_invalidate_folio,
-	.migratepage		= iomap_migrate_page,
+	.migrate_folio		= filemap_migrate_folio,
 	.is_partially_uptodate	= iomap_is_partially_uptodate,
 	.error_remove_page	= generic_error_remove_page,
 	.direct_IO		= noop_direct_IO,
diff --git a/include/linux/iomap.h b/include/linux/iomap.h
index e552097c67e0..758a1125e72f 100644
--- a/include/linux/iomap.h
+++ b/include/linux/iomap.h
@@ -231,12 +231,6 @@ void iomap_readahead(struct readahead_control *, const struct iomap_ops *ops);
 bool iomap_is_partially_uptodate(struct folio *, size_t from, size_t count);
 bool iomap_release_folio(struct folio *folio, gfp_t gfp_flags);
 void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len);
-#ifdef CONFIG_MIGRATION
-int iomap_migrate_page(struct address_space *mapping, struct page *newpage,
-		struct page *page, enum migrate_mode mode);
-#else
-#define iomap_migrate_page NULL
-#endif
 int iomap_file_unshare(struct inode *inode, loff_t pos, loff_t len,
 		const struct iomap_ops *ops);
 int iomap_zero_range(struct inode *inode, loff_t pos, loff_t len,
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 1caccb9f99aa..2a67c0ad7348 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -1078,6 +1078,12 @@ static inline int __must_check write_one_page(struct page *page)
 int __set_page_dirty_nobuffers(struct page *page);
 bool noop_dirty_folio(struct address_space *mapping, struct folio *folio);
 
+#ifdef CONFIG_MIGRATION
+int filemap_migrate_folio(struct address_space *mapping, struct folio *dst,
+		struct folio *src, enum migrate_mode mode);
+#else
+#define filemap_migrate_folio NULL
+#endif
 void page_endio(struct page *page, bool is_write, int err);
 
 void folio_end_private_2(struct folio *folio);
diff --git a/mm/migrate.c b/mm/migrate.c
index 6232c291fdb9..148dd0463dec 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -785,6 +785,26 @@ int buffer_migrate_folio_norefs(struct address_space *mapping,
 }
 #endif
 
+int filemap_migrate_folio(struct address_space *mapping,
+		struct folio *dst, struct folio *src, enum migrate_mode mode)
+{
+	int ret;
+
+	ret = folio_migrate_mapping(mapping, dst, src, 0);
+	if (ret != MIGRATEPAGE_SUCCESS)
+		return ret;
+
+	if (folio_get_private(src))
+		folio_attach_private(dst, folio_detach_private(src));
+
+	if (mode != MIGRATE_SYNC_NO_COPY)
+		folio_migrate_copy(dst, src);
+	else
+		folio_migrate_flags(dst, src);
+	return MIGRATEPAGE_SUCCESS;
+}
+EXPORT_SYMBOL_GPL(filemap_migrate_folio);
+
 /*
  * Writeback a folio to clean the dirty state
  */
-- 
2.35.1


_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel@oss.oracle.com
https://oss.oracle.com/mailman/listinfo/ocfs2-devel

WARNING: multiple messages have this Message-ID (diff)
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: linux-fsdevel@vger.kernel.org
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
	linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
	linux-aio@kvack.org, linux-btrfs@vger.kernel.org,
	linux-ext4@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com,
	linux-mm@kvack.org, linux-xfs@vger.kernel.org,
	linux-nfs@vger.kernel.org, linux-ntfs-dev@lists.sourceforge.net,
	ocfs2-devel@oss.oracle.com, linux-mtd@lists.infradead.org,
	virtualization@lists.linux-foundation.org
Subject: [PATCH 09/20] mm/migrate: Add filemap_migrate_folio()
Date: Mon,  6 Jun 2022 21:40:39 +0100	[thread overview]
Message-ID: <20220606204050.2625949-10-willy@infradead.org> (raw)
In-Reply-To: <20220606204050.2625949-1-willy@infradead.org>

There is nothing iomap-specific about iomap_migratepage(), and it fits
a pattern used by several other filesystems, so move it to mm/migrate.c,
convert it to be filemap_migrate_folio() and convert the iomap filesystems
to use it.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/gfs2/aops.c          |  2 +-
 fs/iomap/buffered-io.c  | 25 -------------------------
 fs/xfs/xfs_aops.c       |  2 +-
 fs/zonefs/super.c       |  2 +-
 include/linux/iomap.h   |  6 ------
 include/linux/pagemap.h |  6 ++++++
 mm/migrate.c            | 20 ++++++++++++++++++++
 7 files changed, 29 insertions(+), 34 deletions(-)

diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c
index 106e90a36583..57ff883d432c 100644
--- a/fs/gfs2/aops.c
+++ b/fs/gfs2/aops.c
@@ -774,7 +774,7 @@ static const struct address_space_operations gfs2_aops = {
 	.invalidate_folio = iomap_invalidate_folio,
 	.bmap = gfs2_bmap,
 	.direct_IO = noop_direct_IO,
-	.migratepage = iomap_migrate_page,
+	.migrate_folio = filemap_migrate_folio,
 	.is_partially_uptodate = iomap_is_partially_uptodate,
 	.error_remove_page = generic_error_remove_page,
 };
diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
index 66278a14bfa7..5a91aa1db945 100644
--- a/fs/iomap/buffered-io.c
+++ b/fs/iomap/buffered-io.c
@@ -489,31 +489,6 @@ void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len)
 }
 EXPORT_SYMBOL_GPL(iomap_invalidate_folio);
 
-#ifdef CONFIG_MIGRATION
-int
-iomap_migrate_page(struct address_space *mapping, struct page *newpage,
-		struct page *page, enum migrate_mode mode)
-{
-	struct folio *folio = page_folio(page);
-	struct folio *newfolio = page_folio(newpage);
-	int ret;
-
-	ret = folio_migrate_mapping(mapping, newfolio, folio, 0);
-	if (ret != MIGRATEPAGE_SUCCESS)
-		return ret;
-
-	if (folio_test_private(folio))
-		folio_attach_private(newfolio, folio_detach_private(folio));
-
-	if (mode != MIGRATE_SYNC_NO_COPY)
-		folio_migrate_copy(newfolio, folio);
-	else
-		folio_migrate_flags(newfolio, folio);
-	return MIGRATEPAGE_SUCCESS;
-}
-EXPORT_SYMBOL_GPL(iomap_migrate_page);
-#endif /* CONFIG_MIGRATION */
-
 static void
 iomap_write_failed(struct inode *inode, loff_t pos, unsigned len)
 {
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index 8ec38b25187b..5d1a995b15f8 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -570,7 +570,7 @@ const struct address_space_operations xfs_address_space_operations = {
 	.invalidate_folio	= iomap_invalidate_folio,
 	.bmap			= xfs_vm_bmap,
 	.direct_IO		= noop_direct_IO,
-	.migratepage		= iomap_migrate_page,
+	.migrate_folio		= filemap_migrate_folio,
 	.is_partially_uptodate  = iomap_is_partially_uptodate,
 	.error_remove_page	= generic_error_remove_page,
 	.swap_activate		= xfs_iomap_swapfile_activate,
diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c
index bcb21aea990a..d4c3f28f34ee 100644
--- a/fs/zonefs/super.c
+++ b/fs/zonefs/super.c
@@ -237,7 +237,7 @@ static const struct address_space_operations zonefs_file_aops = {
 	.dirty_folio		= filemap_dirty_folio,
 	.release_folio		= iomap_release_folio,
 	.invalidate_folio	= iomap_invalidate_folio,
-	.migratepage		= iomap_migrate_page,
+	.migrate_folio		= filemap_migrate_folio,
 	.is_partially_uptodate	= iomap_is_partially_uptodate,
 	.error_remove_page	= generic_error_remove_page,
 	.direct_IO		= noop_direct_IO,
diff --git a/include/linux/iomap.h b/include/linux/iomap.h
index e552097c67e0..758a1125e72f 100644
--- a/include/linux/iomap.h
+++ b/include/linux/iomap.h
@@ -231,12 +231,6 @@ void iomap_readahead(struct readahead_control *, const struct iomap_ops *ops);
 bool iomap_is_partially_uptodate(struct folio *, size_t from, size_t count);
 bool iomap_release_folio(struct folio *folio, gfp_t gfp_flags);
 void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len);
-#ifdef CONFIG_MIGRATION
-int iomap_migrate_page(struct address_space *mapping, struct page *newpage,
-		struct page *page, enum migrate_mode mode);
-#else
-#define iomap_migrate_page NULL
-#endif
 int iomap_file_unshare(struct inode *inode, loff_t pos, loff_t len,
 		const struct iomap_ops *ops);
 int iomap_zero_range(struct inode *inode, loff_t pos, loff_t len,
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 1caccb9f99aa..2a67c0ad7348 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -1078,6 +1078,12 @@ static inline int __must_check write_one_page(struct page *page)
 int __set_page_dirty_nobuffers(struct page *page);
 bool noop_dirty_folio(struct address_space *mapping, struct folio *folio);
 
+#ifdef CONFIG_MIGRATION
+int filemap_migrate_folio(struct address_space *mapping, struct folio *dst,
+		struct folio *src, enum migrate_mode mode);
+#else
+#define filemap_migrate_folio NULL
+#endif
 void page_endio(struct page *page, bool is_write, int err);
 
 void folio_end_private_2(struct folio *folio);
diff --git a/mm/migrate.c b/mm/migrate.c
index 6232c291fdb9..148dd0463dec 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -785,6 +785,26 @@ int buffer_migrate_folio_norefs(struct address_space *mapping,
 }
 #endif
 
+int filemap_migrate_folio(struct address_space *mapping,
+		struct folio *dst, struct folio *src, enum migrate_mode mode)
+{
+	int ret;
+
+	ret = folio_migrate_mapping(mapping, dst, src, 0);
+	if (ret != MIGRATEPAGE_SUCCESS)
+		return ret;
+
+	if (folio_get_private(src))
+		folio_attach_private(dst, folio_detach_private(src));
+
+	if (mode != MIGRATE_SYNC_NO_COPY)
+		folio_migrate_copy(dst, src);
+	else
+		folio_migrate_flags(dst, src);
+	return MIGRATEPAGE_SUCCESS;
+}
+EXPORT_SYMBOL_GPL(filemap_migrate_folio);
+
 /*
  * Writeback a folio to clean the dirty state
  */
-- 
2.35.1


WARNING: multiple messages have this Message-ID (diff)
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: linux-fsdevel@vger.kernel.org
Cc: linux-aio@kvack.org, linux-nfs@vger.kernel.org,
	cluster-devel@redhat.com, linux-ntfs-dev@lists.sourceforge.net,
	linux-kernel@vger.kernel.org,
	"Matthew Wilcox \(Oracle\)" <willy@infradead.org>,
	linux-f2fs-devel@lists.sourceforge.net,
	linux-block@vger.kernel.org, linux-mm@kvack.org,
	linux-mtd@lists.infradead.org, ocfs2-devel@oss.oracle.com,
	linux-ext4@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org
Subject: [f2fs-dev] [PATCH 09/20] mm/migrate: Add filemap_migrate_folio()
Date: Mon,  6 Jun 2022 21:40:39 +0100	[thread overview]
Message-ID: <20220606204050.2625949-10-willy@infradead.org> (raw)
In-Reply-To: <20220606204050.2625949-1-willy@infradead.org>

There is nothing iomap-specific about iomap_migratepage(), and it fits
a pattern used by several other filesystems, so move it to mm/migrate.c,
convert it to be filemap_migrate_folio() and convert the iomap filesystems
to use it.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/gfs2/aops.c          |  2 +-
 fs/iomap/buffered-io.c  | 25 -------------------------
 fs/xfs/xfs_aops.c       |  2 +-
 fs/zonefs/super.c       |  2 +-
 include/linux/iomap.h   |  6 ------
 include/linux/pagemap.h |  6 ++++++
 mm/migrate.c            | 20 ++++++++++++++++++++
 7 files changed, 29 insertions(+), 34 deletions(-)

diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c
index 106e90a36583..57ff883d432c 100644
--- a/fs/gfs2/aops.c
+++ b/fs/gfs2/aops.c
@@ -774,7 +774,7 @@ static const struct address_space_operations gfs2_aops = {
 	.invalidate_folio = iomap_invalidate_folio,
 	.bmap = gfs2_bmap,
 	.direct_IO = noop_direct_IO,
-	.migratepage = iomap_migrate_page,
+	.migrate_folio = filemap_migrate_folio,
 	.is_partially_uptodate = iomap_is_partially_uptodate,
 	.error_remove_page = generic_error_remove_page,
 };
diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
index 66278a14bfa7..5a91aa1db945 100644
--- a/fs/iomap/buffered-io.c
+++ b/fs/iomap/buffered-io.c
@@ -489,31 +489,6 @@ void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len)
 }
 EXPORT_SYMBOL_GPL(iomap_invalidate_folio);
 
-#ifdef CONFIG_MIGRATION
-int
-iomap_migrate_page(struct address_space *mapping, struct page *newpage,
-		struct page *page, enum migrate_mode mode)
-{
-	struct folio *folio = page_folio(page);
-	struct folio *newfolio = page_folio(newpage);
-	int ret;
-
-	ret = folio_migrate_mapping(mapping, newfolio, folio, 0);
-	if (ret != MIGRATEPAGE_SUCCESS)
-		return ret;
-
-	if (folio_test_private(folio))
-		folio_attach_private(newfolio, folio_detach_private(folio));
-
-	if (mode != MIGRATE_SYNC_NO_COPY)
-		folio_migrate_copy(newfolio, folio);
-	else
-		folio_migrate_flags(newfolio, folio);
-	return MIGRATEPAGE_SUCCESS;
-}
-EXPORT_SYMBOL_GPL(iomap_migrate_page);
-#endif /* CONFIG_MIGRATION */
-
 static void
 iomap_write_failed(struct inode *inode, loff_t pos, unsigned len)
 {
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index 8ec38b25187b..5d1a995b15f8 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -570,7 +570,7 @@ const struct address_space_operations xfs_address_space_operations = {
 	.invalidate_folio	= iomap_invalidate_folio,
 	.bmap			= xfs_vm_bmap,
 	.direct_IO		= noop_direct_IO,
-	.migratepage		= iomap_migrate_page,
+	.migrate_folio		= filemap_migrate_folio,
 	.is_partially_uptodate  = iomap_is_partially_uptodate,
 	.error_remove_page	= generic_error_remove_page,
 	.swap_activate		= xfs_iomap_swapfile_activate,
diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c
index bcb21aea990a..d4c3f28f34ee 100644
--- a/fs/zonefs/super.c
+++ b/fs/zonefs/super.c
@@ -237,7 +237,7 @@ static const struct address_space_operations zonefs_file_aops = {
 	.dirty_folio		= filemap_dirty_folio,
 	.release_folio		= iomap_release_folio,
 	.invalidate_folio	= iomap_invalidate_folio,
-	.migratepage		= iomap_migrate_page,
+	.migrate_folio		= filemap_migrate_folio,
 	.is_partially_uptodate	= iomap_is_partially_uptodate,
 	.error_remove_page	= generic_error_remove_page,
 	.direct_IO		= noop_direct_IO,
diff --git a/include/linux/iomap.h b/include/linux/iomap.h
index e552097c67e0..758a1125e72f 100644
--- a/include/linux/iomap.h
+++ b/include/linux/iomap.h
@@ -231,12 +231,6 @@ void iomap_readahead(struct readahead_control *, const struct iomap_ops *ops);
 bool iomap_is_partially_uptodate(struct folio *, size_t from, size_t count);
 bool iomap_release_folio(struct folio *folio, gfp_t gfp_flags);
 void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len);
-#ifdef CONFIG_MIGRATION
-int iomap_migrate_page(struct address_space *mapping, struct page *newpage,
-		struct page *page, enum migrate_mode mode);
-#else
-#define iomap_migrate_page NULL
-#endif
 int iomap_file_unshare(struct inode *inode, loff_t pos, loff_t len,
 		const struct iomap_ops *ops);
 int iomap_zero_range(struct inode *inode, loff_t pos, loff_t len,
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 1caccb9f99aa..2a67c0ad7348 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -1078,6 +1078,12 @@ static inline int __must_check write_one_page(struct page *page)
 int __set_page_dirty_nobuffers(struct page *page);
 bool noop_dirty_folio(struct address_space *mapping, struct folio *folio);
 
+#ifdef CONFIG_MIGRATION
+int filemap_migrate_folio(struct address_space *mapping, struct folio *dst,
+		struct folio *src, enum migrate_mode mode);
+#else
+#define filemap_migrate_folio NULL
+#endif
 void page_endio(struct page *page, bool is_write, int err);
 
 void folio_end_private_2(struct folio *folio);
diff --git a/mm/migrate.c b/mm/migrate.c
index 6232c291fdb9..148dd0463dec 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -785,6 +785,26 @@ int buffer_migrate_folio_norefs(struct address_space *mapping,
 }
 #endif
 
+int filemap_migrate_folio(struct address_space *mapping,
+		struct folio *dst, struct folio *src, enum migrate_mode mode)
+{
+	int ret;
+
+	ret = folio_migrate_mapping(mapping, dst, src, 0);
+	if (ret != MIGRATEPAGE_SUCCESS)
+		return ret;
+
+	if (folio_get_private(src))
+		folio_attach_private(dst, folio_detach_private(src));
+
+	if (mode != MIGRATE_SYNC_NO_COPY)
+		folio_migrate_copy(dst, src);
+	else
+		folio_migrate_flags(dst, src);
+	return MIGRATEPAGE_SUCCESS;
+}
+EXPORT_SYMBOL_GPL(filemap_migrate_folio);
+
 /*
  * Writeback a folio to clean the dirty state
  */
-- 
2.35.1



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

WARNING: multiple messages have this Message-ID (diff)
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: linux-fsdevel@vger.kernel.org
Cc: linux-aio@kvack.org, linux-nfs@vger.kernel.org,
	cluster-devel@redhat.com, linux-ntfs-dev@lists.sourceforge.net,
	linux-kernel@vger.kernel.org,
	"Matthew Wilcox \(Oracle\)" <willy@infradead.org>,
	linux-f2fs-devel@lists.sourceforge.net,
	linux-block@vger.kernel.org, linux-mm@kvack.org,
	linux-mtd@lists.infradead.org, ocfs2-devel@oss.oracle.com,
	linux-ext4@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org
Subject: [PATCH 09/20] mm/migrate: Add filemap_migrate_folio()
Date: Mon,  6 Jun 2022 21:40:39 +0100	[thread overview]
Message-ID: <20220606204050.2625949-10-willy@infradead.org> (raw)
In-Reply-To: <20220606204050.2625949-1-willy@infradead.org>

There is nothing iomap-specific about iomap_migratepage(), and it fits
a pattern used by several other filesystems, so move it to mm/migrate.c,
convert it to be filemap_migrate_folio() and convert the iomap filesystems
to use it.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/gfs2/aops.c          |  2 +-
 fs/iomap/buffered-io.c  | 25 -------------------------
 fs/xfs/xfs_aops.c       |  2 +-
 fs/zonefs/super.c       |  2 +-
 include/linux/iomap.h   |  6 ------
 include/linux/pagemap.h |  6 ++++++
 mm/migrate.c            | 20 ++++++++++++++++++++
 7 files changed, 29 insertions(+), 34 deletions(-)

diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c
index 106e90a36583..57ff883d432c 100644
--- a/fs/gfs2/aops.c
+++ b/fs/gfs2/aops.c
@@ -774,7 +774,7 @@ static const struct address_space_operations gfs2_aops = {
 	.invalidate_folio = iomap_invalidate_folio,
 	.bmap = gfs2_bmap,
 	.direct_IO = noop_direct_IO,
-	.migratepage = iomap_migrate_page,
+	.migrate_folio = filemap_migrate_folio,
 	.is_partially_uptodate = iomap_is_partially_uptodate,
 	.error_remove_page = generic_error_remove_page,
 };
diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
index 66278a14bfa7..5a91aa1db945 100644
--- a/fs/iomap/buffered-io.c
+++ b/fs/iomap/buffered-io.c
@@ -489,31 +489,6 @@ void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len)
 }
 EXPORT_SYMBOL_GPL(iomap_invalidate_folio);
 
-#ifdef CONFIG_MIGRATION
-int
-iomap_migrate_page(struct address_space *mapping, struct page *newpage,
-		struct page *page, enum migrate_mode mode)
-{
-	struct folio *folio = page_folio(page);
-	struct folio *newfolio = page_folio(newpage);
-	int ret;
-
-	ret = folio_migrate_mapping(mapping, newfolio, folio, 0);
-	if (ret != MIGRATEPAGE_SUCCESS)
-		return ret;
-
-	if (folio_test_private(folio))
-		folio_attach_private(newfolio, folio_detach_private(folio));
-
-	if (mode != MIGRATE_SYNC_NO_COPY)
-		folio_migrate_copy(newfolio, folio);
-	else
-		folio_migrate_flags(newfolio, folio);
-	return MIGRATEPAGE_SUCCESS;
-}
-EXPORT_SYMBOL_GPL(iomap_migrate_page);
-#endif /* CONFIG_MIGRATION */
-
 static void
 iomap_write_failed(struct inode *inode, loff_t pos, unsigned len)
 {
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index 8ec38b25187b..5d1a995b15f8 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -570,7 +570,7 @@ const struct address_space_operations xfs_address_space_operations = {
 	.invalidate_folio	= iomap_invalidate_folio,
 	.bmap			= xfs_vm_bmap,
 	.direct_IO		= noop_direct_IO,
-	.migratepage		= iomap_migrate_page,
+	.migrate_folio		= filemap_migrate_folio,
 	.is_partially_uptodate  = iomap_is_partially_uptodate,
 	.error_remove_page	= generic_error_remove_page,
 	.swap_activate		= xfs_iomap_swapfile_activate,
diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c
index bcb21aea990a..d4c3f28f34ee 100644
--- a/fs/zonefs/super.c
+++ b/fs/zonefs/super.c
@@ -237,7 +237,7 @@ static const struct address_space_operations zonefs_file_aops = {
 	.dirty_folio		= filemap_dirty_folio,
 	.release_folio		= iomap_release_folio,
 	.invalidate_folio	= iomap_invalidate_folio,
-	.migratepage		= iomap_migrate_page,
+	.migrate_folio		= filemap_migrate_folio,
 	.is_partially_uptodate	= iomap_is_partially_uptodate,
 	.error_remove_page	= generic_error_remove_page,
 	.direct_IO		= noop_direct_IO,
diff --git a/include/linux/iomap.h b/include/linux/iomap.h
index e552097c67e0..758a1125e72f 100644
--- a/include/linux/iomap.h
+++ b/include/linux/iomap.h
@@ -231,12 +231,6 @@ void iomap_readahead(struct readahead_control *, const struct iomap_ops *ops);
 bool iomap_is_partially_uptodate(struct folio *, size_t from, size_t count);
 bool iomap_release_folio(struct folio *folio, gfp_t gfp_flags);
 void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len);
-#ifdef CONFIG_MIGRATION
-int iomap_migrate_page(struct address_space *mapping, struct page *newpage,
-		struct page *page, enum migrate_mode mode);
-#else
-#define iomap_migrate_page NULL
-#endif
 int iomap_file_unshare(struct inode *inode, loff_t pos, loff_t len,
 		const struct iomap_ops *ops);
 int iomap_zero_range(struct inode *inode, loff_t pos, loff_t len,
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 1caccb9f99aa..2a67c0ad7348 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -1078,6 +1078,12 @@ static inline int __must_check write_one_page(struct page *page)
 int __set_page_dirty_nobuffers(struct page *page);
 bool noop_dirty_folio(struct address_space *mapping, struct folio *folio);
 
+#ifdef CONFIG_MIGRATION
+int filemap_migrate_folio(struct address_space *mapping, struct folio *dst,
+		struct folio *src, enum migrate_mode mode);
+#else
+#define filemap_migrate_folio NULL
+#endif
 void page_endio(struct page *page, bool is_write, int err);
 
 void folio_end_private_2(struct folio *folio);
diff --git a/mm/migrate.c b/mm/migrate.c
index 6232c291fdb9..148dd0463dec 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -785,6 +785,26 @@ int buffer_migrate_folio_norefs(struct address_space *mapping,
 }
 #endif
 
+int filemap_migrate_folio(struct address_space *mapping,
+		struct folio *dst, struct folio *src, enum migrate_mode mode)
+{
+	int ret;
+
+	ret = folio_migrate_mapping(mapping, dst, src, 0);
+	if (ret != MIGRATEPAGE_SUCCESS)
+		return ret;
+
+	if (folio_get_private(src))
+		folio_attach_private(dst, folio_detach_private(src));
+
+	if (mode != MIGRATE_SYNC_NO_COPY)
+		folio_migrate_copy(dst, src);
+	else
+		folio_migrate_flags(dst, src);
+	return MIGRATEPAGE_SUCCESS;
+}
+EXPORT_SYMBOL_GPL(filemap_migrate_folio);
+
 /*
  * Writeback a folio to clean the dirty state
  */
-- 
2.35.1

_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

WARNING: multiple messages have this Message-ID (diff)
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: linux-fsdevel@vger.kernel.org
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
	linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
	linux-aio@kvack.org, linux-btrfs@vger.kernel.org,
	linux-ext4@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com,
	linux-mm@kvack.org, linux-xfs@vger.kernel.org,
	linux-nfs@vger.kernel.org, linux-ntfs-dev@lists.sourceforge.net,
	ocfs2-devel@oss.oracle.com, linux-mtd@lists.infradead.org,
	virtualization@lists.linux-foundation.org
Subject: [PATCH 09/20] mm/migrate: Add filemap_migrate_folio()
Date: Mon,  6 Jun 2022 21:40:39 +0100	[thread overview]
Message-ID: <20220606204050.2625949-10-willy@infradead.org> (raw)
In-Reply-To: <20220606204050.2625949-1-willy@infradead.org>

There is nothing iomap-specific about iomap_migratepage(), and it fits
a pattern used by several other filesystems, so move it to mm/migrate.c,
convert it to be filemap_migrate_folio() and convert the iomap filesystems
to use it.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/gfs2/aops.c          |  2 +-
 fs/iomap/buffered-io.c  | 25 -------------------------
 fs/xfs/xfs_aops.c       |  2 +-
 fs/zonefs/super.c       |  2 +-
 include/linux/iomap.h   |  6 ------
 include/linux/pagemap.h |  6 ++++++
 mm/migrate.c            | 20 ++++++++++++++++++++
 7 files changed, 29 insertions(+), 34 deletions(-)

diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c
index 106e90a36583..57ff883d432c 100644
--- a/fs/gfs2/aops.c
+++ b/fs/gfs2/aops.c
@@ -774,7 +774,7 @@ static const struct address_space_operations gfs2_aops = {
 	.invalidate_folio = iomap_invalidate_folio,
 	.bmap = gfs2_bmap,
 	.direct_IO = noop_direct_IO,
-	.migratepage = iomap_migrate_page,
+	.migrate_folio = filemap_migrate_folio,
 	.is_partially_uptodate = iomap_is_partially_uptodate,
 	.error_remove_page = generic_error_remove_page,
 };
diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
index 66278a14bfa7..5a91aa1db945 100644
--- a/fs/iomap/buffered-io.c
+++ b/fs/iomap/buffered-io.c
@@ -489,31 +489,6 @@ void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len)
 }
 EXPORT_SYMBOL_GPL(iomap_invalidate_folio);
 
-#ifdef CONFIG_MIGRATION
-int
-iomap_migrate_page(struct address_space *mapping, struct page *newpage,
-		struct page *page, enum migrate_mode mode)
-{
-	struct folio *folio = page_folio(page);
-	struct folio *newfolio = page_folio(newpage);
-	int ret;
-
-	ret = folio_migrate_mapping(mapping, newfolio, folio, 0);
-	if (ret != MIGRATEPAGE_SUCCESS)
-		return ret;
-
-	if (folio_test_private(folio))
-		folio_attach_private(newfolio, folio_detach_private(folio));
-
-	if (mode != MIGRATE_SYNC_NO_COPY)
-		folio_migrate_copy(newfolio, folio);
-	else
-		folio_migrate_flags(newfolio, folio);
-	return MIGRATEPAGE_SUCCESS;
-}
-EXPORT_SYMBOL_GPL(iomap_migrate_page);
-#endif /* CONFIG_MIGRATION */
-
 static void
 iomap_write_failed(struct inode *inode, loff_t pos, unsigned len)
 {
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index 8ec38b25187b..5d1a995b15f8 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -570,7 +570,7 @@ const struct address_space_operations xfs_address_space_operations = {
 	.invalidate_folio	= iomap_invalidate_folio,
 	.bmap			= xfs_vm_bmap,
 	.direct_IO		= noop_direct_IO,
-	.migratepage		= iomap_migrate_page,
+	.migrate_folio		= filemap_migrate_folio,
 	.is_partially_uptodate  = iomap_is_partially_uptodate,
 	.error_remove_page	= generic_error_remove_page,
 	.swap_activate		= xfs_iomap_swapfile_activate,
diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c
index bcb21aea990a..d4c3f28f34ee 100644
--- a/fs/zonefs/super.c
+++ b/fs/zonefs/super.c
@@ -237,7 +237,7 @@ static const struct address_space_operations zonefs_file_aops = {
 	.dirty_folio		= filemap_dirty_folio,
 	.release_folio		= iomap_release_folio,
 	.invalidate_folio	= iomap_invalidate_folio,
-	.migratepage		= iomap_migrate_page,
+	.migrate_folio		= filemap_migrate_folio,
 	.is_partially_uptodate	= iomap_is_partially_uptodate,
 	.error_remove_page	= generic_error_remove_page,
 	.direct_IO		= noop_direct_IO,
diff --git a/include/linux/iomap.h b/include/linux/iomap.h
index e552097c67e0..758a1125e72f 100644
--- a/include/linux/iomap.h
+++ b/include/linux/iomap.h
@@ -231,12 +231,6 @@ void iomap_readahead(struct readahead_control *, const struct iomap_ops *ops);
 bool iomap_is_partially_uptodate(struct folio *, size_t from, size_t count);
 bool iomap_release_folio(struct folio *folio, gfp_t gfp_flags);
 void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len);
-#ifdef CONFIG_MIGRATION
-int iomap_migrate_page(struct address_space *mapping, struct page *newpage,
-		struct page *page, enum migrate_mode mode);
-#else
-#define iomap_migrate_page NULL
-#endif
 int iomap_file_unshare(struct inode *inode, loff_t pos, loff_t len,
 		const struct iomap_ops *ops);
 int iomap_zero_range(struct inode *inode, loff_t pos, loff_t len,
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 1caccb9f99aa..2a67c0ad7348 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -1078,6 +1078,12 @@ static inline int __must_check write_one_page(struct page *page)
 int __set_page_dirty_nobuffers(struct page *page);
 bool noop_dirty_folio(struct address_space *mapping, struct folio *folio);
 
+#ifdef CONFIG_MIGRATION
+int filemap_migrate_folio(struct address_space *mapping, struct folio *dst,
+		struct folio *src, enum migrate_mode mode);
+#else
+#define filemap_migrate_folio NULL
+#endif
 void page_endio(struct page *page, bool is_write, int err);
 
 void folio_end_private_2(struct folio *folio);
diff --git a/mm/migrate.c b/mm/migrate.c
index 6232c291fdb9..148dd0463dec 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -785,6 +785,26 @@ int buffer_migrate_folio_norefs(struct address_space *mapping,
 }
 #endif
 
+int filemap_migrate_folio(struct address_space *mapping,
+		struct folio *dst, struct folio *src, enum migrate_mode mode)
+{
+	int ret;
+
+	ret = folio_migrate_mapping(mapping, dst, src, 0);
+	if (ret != MIGRATEPAGE_SUCCESS)
+		return ret;
+
+	if (folio_get_private(src))
+		folio_attach_private(dst, folio_detach_private(src));
+
+	if (mode != MIGRATE_SYNC_NO_COPY)
+		folio_migrate_copy(dst, src);
+	else
+		folio_migrate_flags(dst, src);
+	return MIGRATEPAGE_SUCCESS;
+}
+EXPORT_SYMBOL_GPL(filemap_migrate_folio);
+
 /*
  * Writeback a folio to clean the dirty state
  */
-- 
2.35.1


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

WARNING: multiple messages have this Message-ID (diff)
From: Matthew Wilcox (Oracle) <willy@infradead.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH 09/20] mm/migrate: Add filemap_migrate_folio()
Date: Mon,  6 Jun 2022 21:40:39 +0100	[thread overview]
Message-ID: <20220606204050.2625949-10-willy@infradead.org> (raw)
In-Reply-To: <20220606204050.2625949-1-willy@infradead.org>

There is nothing iomap-specific about iomap_migratepage(), and it fits
a pattern used by several other filesystems, so move it to mm/migrate.c,
convert it to be filemap_migrate_folio() and convert the iomap filesystems
to use it.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/gfs2/aops.c          |  2 +-
 fs/iomap/buffered-io.c  | 25 -------------------------
 fs/xfs/xfs_aops.c       |  2 +-
 fs/zonefs/super.c       |  2 +-
 include/linux/iomap.h   |  6 ------
 include/linux/pagemap.h |  6 ++++++
 mm/migrate.c            | 20 ++++++++++++++++++++
 7 files changed, 29 insertions(+), 34 deletions(-)

diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c
index 106e90a36583..57ff883d432c 100644
--- a/fs/gfs2/aops.c
+++ b/fs/gfs2/aops.c
@@ -774,7 +774,7 @@ static const struct address_space_operations gfs2_aops = {
 	.invalidate_folio = iomap_invalidate_folio,
 	.bmap = gfs2_bmap,
 	.direct_IO = noop_direct_IO,
-	.migratepage = iomap_migrate_page,
+	.migrate_folio = filemap_migrate_folio,
 	.is_partially_uptodate = iomap_is_partially_uptodate,
 	.error_remove_page = generic_error_remove_page,
 };
diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
index 66278a14bfa7..5a91aa1db945 100644
--- a/fs/iomap/buffered-io.c
+++ b/fs/iomap/buffered-io.c
@@ -489,31 +489,6 @@ void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len)
 }
 EXPORT_SYMBOL_GPL(iomap_invalidate_folio);
 
-#ifdef CONFIG_MIGRATION
-int
-iomap_migrate_page(struct address_space *mapping, struct page *newpage,
-		struct page *page, enum migrate_mode mode)
-{
-	struct folio *folio = page_folio(page);
-	struct folio *newfolio = page_folio(newpage);
-	int ret;
-
-	ret = folio_migrate_mapping(mapping, newfolio, folio, 0);
-	if (ret != MIGRATEPAGE_SUCCESS)
-		return ret;
-
-	if (folio_test_private(folio))
-		folio_attach_private(newfolio, folio_detach_private(folio));
-
-	if (mode != MIGRATE_SYNC_NO_COPY)
-		folio_migrate_copy(newfolio, folio);
-	else
-		folio_migrate_flags(newfolio, folio);
-	return MIGRATEPAGE_SUCCESS;
-}
-EXPORT_SYMBOL_GPL(iomap_migrate_page);
-#endif /* CONFIG_MIGRATION */
-
 static void
 iomap_write_failed(struct inode *inode, loff_t pos, unsigned len)
 {
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index 8ec38b25187b..5d1a995b15f8 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -570,7 +570,7 @@ const struct address_space_operations xfs_address_space_operations = {
 	.invalidate_folio	= iomap_invalidate_folio,
 	.bmap			= xfs_vm_bmap,
 	.direct_IO		= noop_direct_IO,
-	.migratepage		= iomap_migrate_page,
+	.migrate_folio		= filemap_migrate_folio,
 	.is_partially_uptodate  = iomap_is_partially_uptodate,
 	.error_remove_page	= generic_error_remove_page,
 	.swap_activate		= xfs_iomap_swapfile_activate,
diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c
index bcb21aea990a..d4c3f28f34ee 100644
--- a/fs/zonefs/super.c
+++ b/fs/zonefs/super.c
@@ -237,7 +237,7 @@ static const struct address_space_operations zonefs_file_aops = {
 	.dirty_folio		= filemap_dirty_folio,
 	.release_folio		= iomap_release_folio,
 	.invalidate_folio	= iomap_invalidate_folio,
-	.migratepage		= iomap_migrate_page,
+	.migrate_folio		= filemap_migrate_folio,
 	.is_partially_uptodate	= iomap_is_partially_uptodate,
 	.error_remove_page	= generic_error_remove_page,
 	.direct_IO		= noop_direct_IO,
diff --git a/include/linux/iomap.h b/include/linux/iomap.h
index e552097c67e0..758a1125e72f 100644
--- a/include/linux/iomap.h
+++ b/include/linux/iomap.h
@@ -231,12 +231,6 @@ void iomap_readahead(struct readahead_control *, const struct iomap_ops *ops);
 bool iomap_is_partially_uptodate(struct folio *, size_t from, size_t count);
 bool iomap_release_folio(struct folio *folio, gfp_t gfp_flags);
 void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len);
-#ifdef CONFIG_MIGRATION
-int iomap_migrate_page(struct address_space *mapping, struct page *newpage,
-		struct page *page, enum migrate_mode mode);
-#else
-#define iomap_migrate_page NULL
-#endif
 int iomap_file_unshare(struct inode *inode, loff_t pos, loff_t len,
 		const struct iomap_ops *ops);
 int iomap_zero_range(struct inode *inode, loff_t pos, loff_t len,
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 1caccb9f99aa..2a67c0ad7348 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -1078,6 +1078,12 @@ static inline int __must_check write_one_page(struct page *page)
 int __set_page_dirty_nobuffers(struct page *page);
 bool noop_dirty_folio(struct address_space *mapping, struct folio *folio);
 
+#ifdef CONFIG_MIGRATION
+int filemap_migrate_folio(struct address_space *mapping, struct folio *dst,
+		struct folio *src, enum migrate_mode mode);
+#else
+#define filemap_migrate_folio NULL
+#endif
 void page_endio(struct page *page, bool is_write, int err);
 
 void folio_end_private_2(struct folio *folio);
diff --git a/mm/migrate.c b/mm/migrate.c
index 6232c291fdb9..148dd0463dec 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -785,6 +785,26 @@ int buffer_migrate_folio_norefs(struct address_space *mapping,
 }
 #endif
 
+int filemap_migrate_folio(struct address_space *mapping,
+		struct folio *dst, struct folio *src, enum migrate_mode mode)
+{
+	int ret;
+
+	ret = folio_migrate_mapping(mapping, dst, src, 0);
+	if (ret != MIGRATEPAGE_SUCCESS)
+		return ret;
+
+	if (folio_get_private(src))
+		folio_attach_private(dst, folio_detach_private(src));
+
+	if (mode != MIGRATE_SYNC_NO_COPY)
+		folio_migrate_copy(dst, src);
+	else
+		folio_migrate_flags(dst, src);
+	return MIGRATEPAGE_SUCCESS;
+}
+EXPORT_SYMBOL_GPL(filemap_migrate_folio);
+
 /*
  * Writeback a folio to clean the dirty state
  */
-- 
2.35.1


  parent reply	other threads:[~2022-06-06 20:41 UTC|newest]

Thread overview: 281+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-06 20:40 [Ocfs2-devel] [PATCH 00/20] Convert aops->migratepage to aops->migrate_folio Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40 ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40 ` Matthew Wilcox (Oracle)
2022-06-06 20:40 ` Matthew Wilcox (Oracle)
2022-06-06 20:40 ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40 ` Matthew Wilcox (Oracle)
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 01/20] fs: Add aops->migrate_folio Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-08  8:09   ` [Ocfs2-devel] " Christoph Hellwig via Ocfs2-devel
2022-06-08  8:09     ` [Cluster-devel] " Christoph Hellwig
2022-06-08  8:09     ` Christoph Hellwig
2022-06-08  8:09     ` Christoph Hellwig
2022-06-08  8:09     ` [f2fs-dev] " Christoph Hellwig
2022-06-08  8:09     ` Christoph Hellwig
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 02/20] mm/migrate: Convert fallback_migrate_page() to fallback_migrate_folio() Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-08  8:11   ` [Ocfs2-devel] " Christoph Hellwig via Ocfs2-devel
2022-06-08  8:11     ` [Cluster-devel] " Christoph Hellwig
2022-06-08  8:11     ` Christoph Hellwig
2022-06-08  8:11     ` Christoph Hellwig
2022-06-08  8:11     ` [f2fs-dev] " Christoph Hellwig
2022-06-08  8:11     ` Christoph Hellwig
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 03/20] mm/migrate: Convert writeout() to take a folio Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-08  8:11   ` Christoph Hellwig
2022-06-08  8:11     ` [Cluster-devel] " Christoph Hellwig
2022-06-08  8:11     ` [Ocfs2-devel] " Christoph Hellwig via Ocfs2-devel
2022-06-08  8:11     ` Christoph Hellwig
2022-06-08  8:11     ` Christoph Hellwig
2022-06-08  8:11     ` [f2fs-dev] " Christoph Hellwig
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 04/20] mm/migrate: Convert buffer_migrate_page() to buffer_migrate_folio() Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-07  3:37   ` kernel test robot
2022-06-07  3:37     ` [Cluster-devel] " kernel test robot
2022-06-07  3:37     ` [Ocfs2-devel] " kernel test robot via Ocfs2-devel
2022-06-07  3:37     ` kernel test robot
2022-06-07  3:37     ` kernel test robot
2022-06-07  3:37     ` [f2fs-dev] " kernel test robot
2022-06-07 14:57     ` Matthew Wilcox
2022-06-07 14:57       ` [Cluster-devel] " Matthew Wilcox
2022-06-07 14:57       ` Matthew Wilcox
2022-06-07 14:57       ` [f2fs-dev] " Matthew Wilcox
2022-06-07 14:57       ` Matthew Wilcox
2022-06-07 14:57       ` [Ocfs2-devel] " Matthew Wilcox via Ocfs2-devel
2022-06-07 14:57       ` Matthew Wilcox
2022-06-07  8:01   ` kernel test robot
2022-06-07  8:01     ` [Cluster-devel] " kernel test robot
2022-06-07  8:01     ` kernel test robot
2022-06-07  8:01     ` [Ocfs2-devel] " kernel test robot via Ocfs2-devel
2022-06-07  8:01     ` kernel test robot
2022-06-07  8:01     ` [f2fs-dev] " kernel test robot
2022-06-08  8:12   ` [Ocfs2-devel] " Christoph Hellwig via Ocfs2-devel
2022-06-08  8:12     ` [Cluster-devel] " Christoph Hellwig
2022-06-08  8:12     ` Christoph Hellwig
2022-06-08  8:12     ` Christoph Hellwig
2022-06-08  8:12     ` [f2fs-dev] " Christoph Hellwig
2022-06-08  8:12     ` Christoph Hellwig
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 05/20] mm/migrate: Convert expected_page_refs() to folio_expected_refs() Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-07 13:41   ` Brian Foster
2022-06-07 13:41     ` [Cluster-devel] " Brian Foster
2022-06-07 13:41     ` Brian Foster
2022-06-07 13:41     ` Brian Foster
2022-06-07 13:41     ` [f2fs-dev] " Brian Foster
2022-06-07 13:41     ` [Ocfs2-devel] " Brian Foster via Ocfs2-devel
2022-06-07 14:11     ` Matthew Wilcox
2022-06-07 14:11       ` [Cluster-devel] " Matthew Wilcox
2022-06-07 14:11       ` [Ocfs2-devel] " Matthew Wilcox via Ocfs2-devel
2022-06-07 14:11       ` Matthew Wilcox
2022-06-07 14:11       ` Matthew Wilcox
2022-06-07 14:11       ` [f2fs-dev] " Matthew Wilcox
2022-06-08  8:14   ` [Ocfs2-devel] " Christoph Hellwig via Ocfs2-devel
2022-06-08  8:14     ` [Cluster-devel] " Christoph Hellwig
2022-06-08  8:14     ` Christoph Hellwig
2022-06-08  8:14     ` Christoph Hellwig
2022-06-08  8:14     ` [f2fs-dev] " Christoph Hellwig
2022-06-08  8:14     ` Christoph Hellwig
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 06/20] btrfs: Convert btree_migratepage to migrate_folio Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-08  8:16   ` Christoph Hellwig
2022-06-08  8:16     ` [Cluster-devel] " Christoph Hellwig
2022-06-08  8:16     ` Christoph Hellwig
2022-06-08  8:16     ` Christoph Hellwig
2022-06-08  8:16     ` [f2fs-dev] " Christoph Hellwig
2022-06-08  8:16     ` [Ocfs2-devel] " Christoph Hellwig via Ocfs2-devel
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 07/20] nfs: Convert " Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-07 19:02   ` Anna Schumaker
2022-06-07 19:02     ` [Cluster-devel] " Anna Schumaker
2022-06-07 19:02     ` Anna Schumaker
2022-06-07 19:02     ` [f2fs-dev] " Anna Schumaker
2022-06-08  8:17   ` [Ocfs2-devel] " Christoph Hellwig via Ocfs2-devel
2022-06-08  8:17     ` [Cluster-devel] " Christoph Hellwig
2022-06-08  8:17     ` Christoph Hellwig
2022-06-08  8:17     ` Christoph Hellwig
2022-06-08  8:17     ` [f2fs-dev] " Christoph Hellwig
2022-06-08  8:17     ` Christoph Hellwig
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 08/20] mm/migrate: Convert migrate_page() to migrate_folio() Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-08  8:18   ` [Ocfs2-devel] " Christoph Hellwig via Ocfs2-devel
2022-06-08  8:18     ` [Cluster-devel] " Christoph Hellwig
2022-06-08  8:18     ` Christoph Hellwig
2022-06-08  8:18     ` Christoph Hellwig
2022-06-08  8:18     ` [f2fs-dev] " Christoph Hellwig
2022-06-08  8:18     ` Christoph Hellwig
2022-06-06 20:40 ` Matthew Wilcox (Oracle) via Ocfs2-devel [this message]
2022-06-06 20:40   ` [Cluster-devel] [PATCH 09/20] mm/migrate: Add filemap_migrate_folio() Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-08  8:19   ` [Ocfs2-devel] " Christoph Hellwig via Ocfs2-devel
2022-06-08  8:19     ` [Cluster-devel] " Christoph Hellwig
2022-06-08  8:19     ` Christoph Hellwig
2022-06-08  8:19     ` Christoph Hellwig
2022-06-08  8:19     ` [f2fs-dev] " Christoph Hellwig
2022-06-08  8:19     ` Christoph Hellwig
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 10/20] btrfs: Convert btrfs_migratepage to migrate_folio Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-08  8:19   ` Christoph Hellwig
2022-06-08  8:19     ` [Cluster-devel] " Christoph Hellwig
2022-06-08  8:19     ` Christoph Hellwig
2022-06-08  8:19     ` [f2fs-dev] " Christoph Hellwig
2022-06-08  8:19     ` [Ocfs2-devel] " Christoph Hellwig via Ocfs2-devel
2022-06-08  8:19     ` Christoph Hellwig
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 11/20] ubifs: Convert to filemap_migrate_folio() Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 12/20] f2fs: " Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 13/20] aio: Convert to migrate_folio Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-08  8:20   ` [Ocfs2-devel] " Christoph Hellwig via Ocfs2-devel
2022-06-08  8:20     ` [Cluster-devel] " Christoph Hellwig
2022-06-08  8:20     ` Christoph Hellwig
2022-06-08  8:20     ` Christoph Hellwig
2022-06-08  8:20     ` [f2fs-dev] " Christoph Hellwig
2022-06-08  8:20     ` Christoph Hellwig
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 14/20] hugetlb: " Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-07  6:13   ` kernel test robot
2022-06-07  6:13     ` [Cluster-devel] " kernel test robot
2022-06-07  6:13     ` kernel test robot
2022-06-07  6:13     ` kernel test robot
2022-06-07  6:13     ` [f2fs-dev] " kernel test robot
2022-06-07  6:13     ` [Ocfs2-devel] " kernel test robot via Ocfs2-devel
2022-06-07 15:02     ` Matthew Wilcox
2022-06-07 15:02       ` [Cluster-devel] " Matthew Wilcox
2022-06-07 15:02       ` Matthew Wilcox
2022-06-07 15:02       ` [f2fs-dev] " Matthew Wilcox
2022-06-07 15:02       ` Matthew Wilcox
2022-06-07 15:02       ` Matthew Wilcox
2022-06-07 15:02       ` [Ocfs2-devel] " Matthew Wilcox via Ocfs2-devel
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 15/20] balloon: " Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-07  7:36   ` David Hildenbrand
2022-06-07  7:36     ` [Cluster-devel] " David Hildenbrand
2022-06-07  7:36     ` David Hildenbrand
2022-06-07  7:36     ` [Ocfs2-devel] " David Hildenbrand via Ocfs2-devel
2022-06-07  7:36     ` David Hildenbrand
2022-06-07  7:36     ` [f2fs-dev] " David Hildenbrand
2022-06-07 14:24     ` Matthew Wilcox
2022-06-07 14:24       ` [Cluster-devel] " Matthew Wilcox
2022-06-07 14:24       ` Matthew Wilcox
2022-06-07 14:24       ` Matthew Wilcox
2022-06-07 14:24       ` [f2fs-dev] " Matthew Wilcox
2022-06-07 14:24       ` [Ocfs2-devel] " Matthew Wilcox via Ocfs2-devel
2022-06-07 19:21       ` Matthew Wilcox via Ocfs2-devel
2022-06-07 19:21         ` [Cluster-devel] " Matthew Wilcox
2022-06-07 19:21         ` Matthew Wilcox
2022-06-07 19:21         ` Matthew Wilcox
2022-06-07 19:21         ` [f2fs-dev] " Matthew Wilcox
2022-06-07 19:21         ` Matthew Wilcox
2022-06-08  9:59         ` David Hildenbrand
2022-06-08  9:59           ` [Cluster-devel] " David Hildenbrand
2022-06-08  9:59           ` David Hildenbrand
2022-06-08  9:59           ` [f2fs-dev] " David Hildenbrand
2022-06-08  9:59           ` [Ocfs2-devel] " David Hildenbrand via Ocfs2-devel
2022-06-08  9:59           ` David Hildenbrand
2022-06-08 13:06           ` Rafael Aquini
2022-06-08 13:06             ` [Cluster-devel] " Rafael Aquini
2022-06-08 13:06             ` Rafael Aquini
2022-06-08 13:06             ` Rafael Aquini
2022-06-08 13:06             ` [f2fs-dev] " Rafael Aquini
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 16/20] secretmem: " Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 17/20] z3fold: " Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 18/20] zsmalloc: " Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 19/20] fs: Remove aops->migratepage() Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-08  8:21   ` [Ocfs2-devel] " Christoph Hellwig via Ocfs2-devel
2022-06-08  8:21     ` [Cluster-devel] " Christoph Hellwig
2022-06-08  8:21     ` Christoph Hellwig
2022-06-08  8:21     ` Christoph Hellwig
2022-06-08  8:21     ` [f2fs-dev] " Christoph Hellwig
2022-06-08  8:21     ` Christoph Hellwig
2022-06-06 20:40 ` [Ocfs2-devel] [PATCH 20/20] mm/folio-compat: Remove migration compatibility functions Matthew Wilcox (Oracle) via Ocfs2-devel
2022-06-06 20:40   ` [Cluster-devel] " Matthew Wilcox
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-06 20:40   ` [f2fs-dev] " Matthew Wilcox (Oracle)
2022-06-06 20:40   ` Matthew Wilcox (Oracle)
2022-06-08  8:22   ` [Ocfs2-devel] " Christoph Hellwig via Ocfs2-devel
2022-06-08  8:22     ` [Cluster-devel] " Christoph Hellwig
2022-06-08  8:22     ` Christoph Hellwig
2022-06-08  8:22     ` Christoph Hellwig
2022-06-08  8:22     ` [f2fs-dev] " Christoph Hellwig
2022-06-08  8:22     ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220606204050.2625949-10-willy@infradead.org \
    --to=ocfs2-devel@oss.oracle.com \
    --cc=cluster-devel@redhat.com \
    --cc=linux-aio@kvack.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-ntfs-dev@lists.sourceforge.net \
    --cc=linux-xfs@vger.kernel.org \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.