Andrew Morton
2023-Mar-28 23:21 UTC
[Ocfs2-devel] [merged mm-stable] mmjfs-move-write_one_page-folio_write_one-to-jfs.patch removed from -mm tree
The quilt patch titled Subject: mm,jfs: move write_one_page/folio_write_one to jfs has been removed from the -mm tree. Its filename was mmjfs-move-write_one_page-folio_write_one-to-jfs.patch This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm ------------------------------------------------------ From: Christoph Hellwig <hch at lst.de> Subject: mm,jfs: move write_one_page/folio_write_one to jfs Date: Tue, 7 Mar 2023 15:31:25 +0100 The last remaining user of folio_write_one through the write_one_page wrapper is jfs, so move the functionality there and hard code the call to metapage_writepage. Note that the use of the pagecache by the JFS 'metapage' buffer cache is a bit odd, and we could probably do without VM-level dirty tracking at all, but that's a change for another time. Link: https://lkml.kernel.org/r/20230307143125.27778-4-hch at lst.de Signed-off-by: Christoph Hellwig <hch at lst.de> Acked-by: Dave Kleikamp <dave.kleikamp at oracle.com> Cc: Changwei Ge <gechangwei at live.cn> Cc: Evgeniy Dushistov <dushistov at mail.ru> Cc: Gang He <ghe at suse.com> Cc: Jan Kara <jack at suse.cz> Cc: Jan Kara via Ocfs2-devel <ocfs2-devel at oss.oracle.com> Cc: Joel Becker <jlbec at evilplan.org> Cc: Joseph Qi <jiangqi903 at gmail.com> Cc: Joseph Qi <joseph.qi at linux.alibaba.com> Cc: Jun Piao <piaojun at huawei.com> Cc: Junxiao Bi <junxiao.bi at oracle.com> Cc: Mark Fasheh <mark at fasheh.com> Cc: Matthew Wilcox (Oracle) <willy at infradead.org> Signed-off-by: Andrew Morton <akpm at linux-foundation.org> --- fs/jfs/jfs_metapage.c | 39 ++++++++++++++++++++++++++++++++----- include/linux/pagemap.h | 6 ----- mm/page-writeback.c | 40 -------------------------------------- 3 files changed, 34 insertions(+), 51 deletions(-) --- a/fs/jfs/jfs_metapage.c~mmjfs-move-write_one_page-folio_write_one-to-jfs +++ a/fs/jfs/jfs_metapage.c @@ -691,6 +691,35 @@ void grab_metapage(struct metapage * mp) unlock_page(mp->page); } +static int metapage_write_one(struct page *page) +{ + struct folio *folio = page_folio(page); + struct address_space *mapping = folio->mapping; + struct writeback_control wbc = { + .sync_mode = WB_SYNC_ALL, + .nr_to_write = folio_nr_pages(folio), + }; + int ret = 0; + + BUG_ON(!folio_test_locked(folio)); + + folio_wait_writeback(folio); + + if (folio_clear_dirty_for_io(folio)) { + folio_get(folio); + ret = metapage_writepage(page, &wbc); + if (ret == 0) + folio_wait_writeback(folio); + folio_put(folio); + } else { + folio_unlock(folio); + } + + if (!ret) + ret = filemap_check_errors(mapping); + return ret; +} + void force_metapage(struct metapage *mp) { struct page *page = mp->page; @@ -700,8 +729,8 @@ void force_metapage(struct metapage *mp) get_page(page); lock_page(page); set_page_dirty(page); - if (write_one_page(page)) - jfs_error(mp->sb, "write_one_page() failed\n"); + if (metapage_write_one(page)) + jfs_error(mp->sb, "metapage_write_one() failed\n"); clear_bit(META_forcewrite, &mp->flag); put_page(page); } @@ -746,9 +775,9 @@ void release_metapage(struct metapage * set_page_dirty(page); if (test_bit(META_sync, &mp->flag)) { clear_bit(META_sync, &mp->flag); - if (write_one_page(page)) - jfs_error(mp->sb, "write_one_page() failed\n"); - lock_page(page); /* write_one_page unlocks the page */ + if (metapage_write_one(page)) + jfs_error(mp->sb, "metapage_write_one() failed\n"); + lock_page(page); } } else if (mp->lsn) /* discard_metapage doesn't remove it */ remove_from_logsync(mp); --- a/include/linux/pagemap.h~mmjfs-move-write_one_page-folio_write_one-to-jfs +++ a/include/linux/pagemap.h @@ -1066,12 +1066,6 @@ static inline void folio_cancel_dirty(st bool folio_clear_dirty_for_io(struct folio *folio); bool clear_page_dirty_for_io(struct page *page); void folio_invalidate(struct folio *folio, size_t offset, size_t length); -int __must_check folio_write_one(struct folio *folio); -static inline int __must_check write_one_page(struct page *page) -{ - return folio_write_one(page_folio(page)); -} - int __set_page_dirty_nobuffers(struct page *page); bool noop_dirty_folio(struct address_space *mapping, struct folio *folio); --- a/mm/page-writeback.c~mmjfs-move-write_one_page-folio_write_one-to-jfs +++ a/mm/page-writeback.c @@ -2583,46 +2583,6 @@ int do_writepages(struct address_space * return ret; } -/** - * folio_write_one - write out a single folio and wait on I/O. - * @folio: The folio to write. - * - * The folio must be locked by the caller and will be unlocked upon return. - * - * Note that the mapping's AS_EIO/AS_ENOSPC flags will be cleared when this - * function returns. - * - * Return: %0 on success, negative error code otherwise - */ -int folio_write_one(struct folio *folio) -{ - struct address_space *mapping = folio->mapping; - int ret = 0; - struct writeback_control wbc = { - .sync_mode = WB_SYNC_ALL, - .nr_to_write = folio_nr_pages(folio), - }; - - BUG_ON(!folio_test_locked(folio)); - - folio_wait_writeback(folio); - - if (folio_clear_dirty_for_io(folio)) { - folio_get(folio); - ret = mapping->a_ops->writepage(&folio->page, &wbc); - if (ret == 0) - folio_wait_writeback(folio); - folio_put(folio); - } else { - folio_unlock(folio); - } - - if (!ret) - ret = filemap_check_errors(mapping); - return ret; -} -EXPORT_SYMBOL(folio_write_one); - /* * For address_spaces which do not use buffers nor write back. */ _ Patches currently in -mm which might be from hch at lst.de are mm-dont-look-at-xarray-value-entries-in-split_huge_pages_in_file.patch mm-make-mapping_get_entry-available-outside-of-filemapc.patch mm-use-filemap_get_entry-in-filemap_get_incore_folio.patch shmem-open-code-the-page-cache-lookup-in-shmem_get_folio_gfp.patch mm-remove-fgp_entry.patch mm-return-an-err_ptr-from-__filemap_get_folio.patch mm-return-an-err_ptr-from-__filemap_get_folio-fix.patch