]> git.baikalelectronics.ru Git - kernel.git/commitdiff
btrfs: remove extent writepage address space operation
authorChristoph Hellwig <hch@lst.de>
Tue, 21 Jun 2022 07:49:44 +0000 (09:49 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 25 Jul 2022 15:45:37 +0000 (17:45 +0200)
Same as in commit 907475fe7787 ("xfs: drop ->writepage completely"): we
can remove the callback as it's only used in one place - single page
writeback from memory reclaim and is not called for cgroup writeback at
all.

We only allow such writeback from kswapd, not from direct memory
reclaim, and so it is rarely used. When it comes from kswapd, it is
effectively random dirty page shoot-down, which is horrible for IO
patterns. We can rely on background writeback to clean all dirty pages
in an efficient way and not let it be interrupted by kswapd.

Suggested-by: Johannes Weiner <hannes@cmpxchg.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c
fs/btrfs/extent_io.h
fs/btrfs/inode.c
fs/btrfs/subpage.c

index 1935cb7a305dacfc7289ddc08daf8d56ac70ca30..70fc7a65092422a86521ed682424f2751e508953 100644 (file)
@@ -5110,20 +5110,6 @@ retry:
        return ret;
 }
 
-int extent_write_full_page(struct page *page, struct writeback_control *wbc)
-{
-       int ret;
-       struct extent_page_data epd = {
-               .bio_ctrl = { 0 },
-               .extent_locked = 0,
-               .sync_io = wbc->sync_mode == WB_SYNC_ALL,
-       };
-
-       ret = __extent_writepage(page, wbc, &epd);
-       submit_write_bio(&epd, ret);
-       return ret;
-}
-
 /*
  * Submit the pages in the range to bio for call sites which delalloc range has
  * already been ran (aka, ordered extent inserted) and all pages are still
index c0f1fb63eeae791ddd5bc53d96f5e2783dbdc313..a76c6ef74cd3c5bc1569b4a1bbca30581b7b8e91 100644 (file)
@@ -146,7 +146,6 @@ int try_release_extent_mapping(struct page *page, gfp_t mask);
 int try_release_extent_buffer(struct page *page);
 
 int btrfs_read_folio(struct file *file, struct folio *folio);
-int extent_write_full_page(struct page *page, struct writeback_control *wbc);
 int extent_write_locked_range(struct inode *inode, u64 start, u64 end);
 int extent_writepages(struct address_space *mapping,
                      struct writeback_control *wbc);
index 03771f09a9a215c850499b03cd266daf5ffc06ca..a00052bb194de29f4b015310acce43b0207ad146 100644 (file)
@@ -8133,31 +8133,6 @@ static int btrfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
        return extent_fiemap(BTRFS_I(inode), fieinfo, start, len);
 }
 
-static int btrfs_writepage(struct page *page, struct writeback_control *wbc)
-{
-       struct inode *inode = page->mapping->host;
-       int ret;
-
-       if (current->flags & PF_MEMALLOC) {
-               redirty_page_for_writepage(wbc, page);
-               unlock_page(page);
-               return 0;
-       }
-
-       /*
-        * If we are under memory pressure we will call this directly from the
-        * VM, we need to make sure we have the inode referenced for the ordered
-        * extent.  If not just return like we didn't do anything.
-        */
-       if (!igrab(inode)) {
-               redirty_page_for_writepage(wbc, page);
-               return AOP_WRITEPAGE_ACTIVATE;
-       }
-       ret = extent_write_full_page(page, wbc);
-       btrfs_add_delayed_iput(inode);
-       return ret;
-}
-
 static int btrfs_writepages(struct address_space *mapping,
                            struct writeback_control *wbc)
 {
@@ -8461,7 +8436,7 @@ vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
         * Reserving delalloc space after obtaining the page lock can lead to
         * deadlock. For example, if a dirty page is locked by this function
         * and the call to btrfs_delalloc_reserve_space() ends up triggering
-        * dirty page write out, then the btrfs_writepage() function could
+        * dirty page write out, then the btrfs_writepages() function could
         * end up waiting indefinitely to get a lock on the page currently
         * being processed by btrfs_page_mkwrite() function.
         */
@@ -11379,7 +11354,6 @@ static const struct file_operations btrfs_dir_file_operations = {
  */
 static const struct address_space_operations btrfs_aops = {
        .read_folio     = btrfs_read_folio,
-       .writepage      = btrfs_writepage,
        .writepages     = btrfs_writepages,
        .readahead      = btrfs_readahead,
        .direct_IO      = noop_direct_IO,
index 0146fee730a093ab985fd4a4878bcf8634116c58..6fc2b77ae5c345e4df4180d0b6c6026aa8edb0f8 100644 (file)
@@ -731,7 +731,7 @@ void btrfs_page_assert_not_dirty(const struct btrfs_fs_info *fs_info,
  *   It should not have any subpage::writers count.
  *   Can be unlocked by unlock_page().
  *   This is the most common locked page for __extent_writepage() called
- *   inside extent_write_cache_pages() or extent_write_full_page().
+ *   inside extent_write_cache_pages().
  *   Rarer cases include the @locked_page from extent_write_locked_range().
  *
  * - Page locked by lock_delalloc_pages()