* Re: [PATCH v14 075/138] mm/writeback: Add folio_account_redirty()
@ 2021-07-18 18:10 kernel test robot
0 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-07-18 18:10 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 5562 bytes --]
CC: kbuild-all(a)lists.01.org
In-Reply-To: <20210715033704.692967-76-willy@infradead.org>
References: <20210715033704.692967-76-willy@infradead.org>
TO: "Matthew Wilcox (Oracle)" <willy@infradead.org>
TO: linux-kernel(a)vger.kernel.org
CC: "Matthew Wilcox (Oracle)" <willy@infradead.org>
CC: linux-mm(a)kvack.org
CC: linux-fsdevel(a)vger.kernel.org
CC: Christoph Hellwig <hch@lst.de>
Hi "Matthew,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on linus/master]
[cannot apply to hnaz-linux-mm/master xfs-linux/for-next tip/perf/core v5.14-rc1 next-20210716]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Matthew-Wilcox-Oracle/Memory-folios/20210715-133101
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 8096acd7442e613fad0354fc8dfdb2003cceea0b
:::::: branch date: 4 days ago
:::::: commit date: 4 days ago
config: x86_64-rhel-8.3-kselftests (attached as .config)
compiler: gcc-10 (Ubuntu 10.3.0-1ubuntu1~20.04) 10.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.3-341-g8af24329-dirty
# https://github.com/0day-ci/linux/commit/0c8f837126e446aec4f81618cacd58411a390951
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Matthew-Wilcox-Oracle/Memory-folios/20210715-133101
git checkout 0c8f837126e446aec4f81618cacd58411a390951
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=x86_64 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
mm/page-writeback.c: note: in included file (through include/linux/rculist.h, include/linux/dcache.h, include/linux/fs.h):
>> include/linux/rcupdate.h:716:9: sparse: sparse: context imbalance in 'folio_account_redirty' - different lock contexts for basic block
include/linux/rcupdate.h:716:9: sparse: sparse: context imbalance in '__folio_cancel_dirty' - different lock contexts for basic block
include/linux/rcupdate.h:716:9: sparse: sparse: context imbalance in 'folio_clear_dirty_for_io' - different lock contexts for basic block
vim +/folio_account_redirty +716 include/linux/rcupdate.h
^1da177e4c3f415 Linus Torvalds 2005-04-16 691
^1da177e4c3f415 Linus Torvalds 2005-04-16 692 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 693 * So where is rcu_write_lock()? It does not exist, as there is no
^1da177e4c3f415 Linus Torvalds 2005-04-16 694 * way for writers to lock out RCU readers. This is a feature, not
^1da177e4c3f415 Linus Torvalds 2005-04-16 695 * a bug -- this property is what provides RCU's performance benefits.
^1da177e4c3f415 Linus Torvalds 2005-04-16 696 * Of course, writers must coordinate with each other. The normal
^1da177e4c3f415 Linus Torvalds 2005-04-16 697 * spinlock primitives work well for this, but any other technique may be
^1da177e4c3f415 Linus Torvalds 2005-04-16 698 * used as well. RCU does not care how the writers keep out of each
^1da177e4c3f415 Linus Torvalds 2005-04-16 699 * others' way, as long as they do so.
^1da177e4c3f415 Linus Torvalds 2005-04-16 700 */
3d76c082907e8f8 Paul E. McKenney 2009-09-28 701
3d76c082907e8f8 Paul E. McKenney 2009-09-28 702 /**
ca5ecddfa8fcbd9 Paul E. McKenney 2010-04-28 703 * rcu_read_unlock() - marks the end of an RCU read-side critical section.
3d76c082907e8f8 Paul E. McKenney 2009-09-28 704 *
0223846010750e2 Paul E. McKenney 2021-04-29 705 * In almost all situations, rcu_read_unlock() is immune from deadlock.
0223846010750e2 Paul E. McKenney 2021-04-29 706 * In recent kernels that have consolidated synchronize_sched() and
0223846010750e2 Paul E. McKenney 2021-04-29 707 * synchronize_rcu_bh() into synchronize_rcu(), this deadlock immunity
0223846010750e2 Paul E. McKenney 2021-04-29 708 * also extends to the scheduler's runqueue and priority-inheritance
0223846010750e2 Paul E. McKenney 2021-04-29 709 * spinlocks, courtesy of the quiescent-state deferral that is carried
0223846010750e2 Paul E. McKenney 2021-04-29 710 * out when rcu_read_unlock() is invoked with interrupts disabled.
f27bc4873fa8b75 Paul E. McKenney 2014-05-04 711 *
3d76c082907e8f8 Paul E. McKenney 2009-09-28 712 * See rcu_read_lock() for more information.
3d76c082907e8f8 Paul E. McKenney 2009-09-28 713 */
bc33f24bdca8b6e Paul E. McKenney 2009-08-22 714 static inline void rcu_read_unlock(void)
bc33f24bdca8b6e Paul E. McKenney 2009-08-22 715 {
f78f5b90c4ffa55 Paul E. McKenney 2015-06-18 @716 RCU_LOCKDEP_WARN(!rcu_is_watching(),
bde23c6892878e4 Heiko Carstens 2012-02-01 717 "rcu_read_unlock() used illegally while idle");
bc33f24bdca8b6e Paul E. McKenney 2009-08-22 718 __release(RCU);
bc33f24bdca8b6e Paul E. McKenney 2009-08-22 719 __rcu_read_unlock();
d24209bb689e2c7 Paul E. McKenney 2015-01-21 720 rcu_lock_release(&rcu_lock_map); /* Keep acq info for rls diags. */
bc33f24bdca8b6e Paul E. McKenney 2009-08-22 721 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 722
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 42159 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH v14 000/138] Memory folios
@ 2021-07-15 3:34 Matthew Wilcox (Oracle)
2021-07-15 3:36 ` [PATCH v14 075/138] mm/writeback: Add folio_account_redirty() Matthew Wilcox (Oracle)
0 siblings, 1 reply; 4+ messages in thread
From: Matthew Wilcox (Oracle) @ 2021-07-15 3:34 UTC (permalink / raw)
To: linux-kernel; +Cc: Matthew Wilcox (Oracle), linux-mm, linux-fsdevel
Managing memory in 4KiB pages is a serious overhead. Many benchmarks
benefit from a larger "page size". As an example, an earlier iteration
of this idea which used compound pages (and wasn't particularly tuned)
got a 7% performance boost when compiling the kernel.
Using compound pages or THPs exposes a weakness of our type system.
Functions are often unprepared for compound pages to be passed to them,
and may only act on PAGE_SIZE chunks. Even functions which are aware of
compound pages may expect a head page, and do the wrong thing if passed
a tail page.
We also waste a lot of instructions ensuring that we're not looking at
a tail page. Almost every call to PageFoo() contains one or more hidden
calls to compound_head(). This also happens for get_page(), put_page()
and many more functions.
This patch series uses a new type, the struct folio, to manage memory.
It converts enough of the page cache, iomap and XFS to use folios instead
of pages, and then adds support for multi-page folios. It passes xfstests
(running on XFS) with no regressions compared to v5.14-rc1.
Git: https://git.infradead.org/users/willy/pagecache.git/shortlog/refs/tags/folio_14
v14:
- Defined folio_memcg() for !CONFIG_MEMCG builds
- Fixed typo in folio_activate() for !SMP builds
- Fixed missed conversion of folio_rmapping to folio_raw_mapping in KSM
- Fixed hugetlb's new dependency on copy_huge_page() by introducing
folio_copy()
- Changed the LRU page API to be entirely wrappers around the folio versions
- Removed page_lru() entirely
- Renamed folio_add_to_lru_list() -> lruvec_add_folio()
- Renamed folio_add_to_lru_list_tail() -> lruvec_add_folio_tail()
- Renamed folio_del_from_lru_list() -> lruvec_del_folio()
- Changed folio flag operations to be:
- folio_test_foo()
- folio_test_set_foo()
- folio_test_clear_foo()
- folio_set_foo()
- folio_clear_foo()
- __folio_set_foo()
- __folio_clear_foo()
- Converted trace_mm_lru_activate() to take a folio
- Converted trace_wait_on_page_writeback() to trace_folio_wait_writeback()
- Converted trace_writeback_dirty_page() to trace_writeback_dirty_folio()
- Converted trace_mm_lru_insertion() to take a folio
- Renamed alloc_folio() -> folio_alloc()
- Renamed __alloc_folio() -> __folio_alloc()
- Renamed __alloc_folio_node() -> __folio_alloc_node()
Matthew Wilcox (Oracle) (138):
mm: Convert get_page_unless_zero() to return bool
mm: Introduce struct folio
mm: Add folio_pgdat(), folio_zone() and folio_zonenum()
mm/vmstat: Add functions to account folio statistics
mm/debug: Add VM_BUG_ON_FOLIO() and VM_WARN_ON_ONCE_FOLIO()
mm: Add folio reference count functions
mm: Add folio_put()
mm: Add folio_get()
mm: Add folio_try_get_rcu()
mm: Add folio flag manipulation functions
mm/lru: Add folio LRU functions
mm: Handle per-folio private data
mm/filemap: Add folio_index(), folio_file_page() and folio_contains()
mm/filemap: Add folio_next_index()
mm/filemap: Add folio_pos() and folio_file_pos()
mm/util: Add folio_mapping() and folio_file_mapping()
mm/filemap: Add folio_unlock()
mm/filemap: Add folio_lock()
mm/filemap: Add folio_lock_killable()
mm/filemap: Add __folio_lock_async()
mm/filemap: Add folio_wait_locked()
mm/filemap: Add __folio_lock_or_retry()
mm/swap: Add folio_rotate_reclaimable()
mm/filemap: Add folio_end_writeback()
mm/writeback: Add folio_wait_writeback()
mm/writeback: Add folio_wait_stable()
mm/filemap: Add folio_wait_bit()
mm/filemap: Add folio_wake_bit()
mm/filemap: Convert page wait queues to be folios
mm/filemap: Add folio private_2 functions
fs/netfs: Add folio fscache functions
mm: Add folio_mapped()
mm: Add folio_nid()
mm/memcg: Remove 'page' parameter to mem_cgroup_charge_statistics()
mm/memcg: Use the node id in mem_cgroup_update_tree()
mm/memcg: Remove soft_limit_tree_node()
mm/memcg: Convert memcg_check_events to take a node ID
mm/memcg: Add folio_memcg() and related functions
mm/memcg: Convert commit_charge() to take a folio
mm/memcg: Convert mem_cgroup_charge() to take a folio
mm/memcg: Convert uncharge_page() to uncharge_folio()
mm/memcg: Convert mem_cgroup_uncharge() to take a folio
mm/memcg: Convert mem_cgroup_migrate() to take folios
mm/memcg: Convert mem_cgroup_track_foreign_dirty_slowpath() to folio
mm/memcg: Add folio_memcg_lock() and folio_memcg_unlock()
mm/memcg: Convert mem_cgroup_move_account() to use a folio
mm/memcg: Add folio_lruvec()
mm/memcg: Add folio_lruvec_lock() and similar functions
mm/memcg: Add folio_lruvec_relock_irq() and
folio_lruvec_relock_irqsave()
mm/workingset: Convert workingset_activation to take a folio
mm: Add folio_pfn()
mm: Add folio_raw_mapping()
mm: Add flush_dcache_folio()
mm: Add kmap_local_folio()
mm: Add arch_make_folio_accessible()
mm: Add folio_young and folio_idle
mm/swap: Add folio_activate()
mm/swap: Add folio_mark_accessed()
mm/rmap: Add folio_mkclean()
mm/migrate: Add folio_migrate_mapping()
mm/migrate: Add folio_migrate_flags()
mm/migrate: Add folio_migrate_copy()
mm/writeback: Rename __add_wb_stat() to wb_stat_mod()
flex_proportions: Allow N events instead of 1
mm/writeback: Change __wb_writeout_inc() to __wb_writeout_add()
mm/writeback: Add __folio_end_writeback()
mm/writeback: Add folio_start_writeback()
mm/writeback: Add folio_mark_dirty()
mm/writeback: Add __folio_mark_dirty()
mm/writeback: Convert tracing writeback_page_template to folios
mm/writeback: Add filemap_dirty_folio()
mm/writeback: Add folio_account_cleaned()
mm/writeback: Add folio_cancel_dirty()
mm/writeback: Add folio_clear_dirty_for_io()
mm/writeback: Add folio_account_redirty()
mm/writeback: Add folio_redirty_for_writepage()
mm/filemap: Add i_blocks_per_folio()
mm/filemap: Add folio_mkwrite_check_truncate()
mm/filemap: Add readahead_folio()
mm/workingset: Convert workingset_refault() to take a folio
mm: Add folio_evictable()
mm/lru: Convert __pagevec_lru_add_fn to take a folio
mm/lru: Add folio_add_lru()
mm/page_alloc: Add folio allocation functions
mm/filemap: Add filemap_alloc_folio
mm/filemap: Add filemap_add_folio()
mm/filemap: Convert mapping_get_entry to return a folio
mm/filemap: Add filemap_get_folio
mm/filemap: Add FGP_STABLE
block: Add bio_add_folio()
block: Add bio_for_each_folio_all()
iomap: Convert to_iomap_page to take a folio
iomap: Convert iomap_page_create to take a folio
iomap: Convert iomap_page_release to take a folio
iomap: Convert iomap_releasepage to use a folio
iomap: Convert iomap_invalidatepage to use a folio
iomap: Pass the iomap_page into iomap_set_range_uptodate
iomap: Use folio offsets instead of page offsets
iomap: Convert bio completions to use folios
iomap: Convert readahead and readpage to use a folio
iomap: Convert iomap_page_mkwrite to use a folio
iomap: Convert iomap_write_begin and iomap_write_end to folios
iomap: Convert iomap_read_inline_data to take a folio
iomap: Convert iomap_write_end_inline to take a folio
iomap: Convert iomap_add_to_ioend to take a folio
iomap: Convert iomap_do_writepage to use a folio
iomap: Convert iomap_migrate_page to use folios
mm/filemap: Convert page_cache_delete to take a folio
mm/filemap: Convert unaccount_page_cache_page to
filemap_unaccount_folio
mm/filemap: Add filemap_remove_folio and __filemap_remove_folio
mm/filemap: Convert find_get_entry to return a folio
mm/filemap: Convert filemap_get_read_batch to use folios
mm/filemap: Convert find_get_pages_contig to folios
mm/filemap: Convert filemap_read_page to take a folio
mm/filemap: Convert filemap_create_page to folio
mm/filemap: Convert filemap_range_uptodate to folios
mm/filemap: Convert filemap_fault to folio
mm/filemap: Add read_cache_folio and read_mapping_folio
mm/filemap: Convert filemap_get_pages to use folios
mm/filemap: Convert page_cache_delete_batch to folios
mm/filemap: Remove PageHWPoison check from next_uptodate_page()
mm/filemap: Use folios in next_uptodate_page
mm/filemap: Use a folio in filemap_map_pages
fs: Convert vfs_dedupe_file_range_compare to folios
mm/truncate,shmem: Handle truncates that split THPs
mm/filemap: Return only head pages from find_get_entries
mm: Use multi-index entries in the page cache
iomap: Support multi-page folios in invalidatepage
xfs: Support THPs
mm/truncate: Convert invalidate_inode_pages2_range to folios
mm/truncate: Fix invalidate_complete_page2 for THPs
mm/vmscan: Free non-shmem THPs without splitting them
mm: Fix READ_ONLY_THP warning
mm: Support arbitrary THP sizes
mm/filemap: Allow multi-page folios to be added to the page cache
mm/vmscan: Optimise shrink_page_list for smaller THPs
mm/readahead: Convert page_cache_async_ra() to take a folio
mm/readahead: Add multi-page folio readahead
Documentation/core-api/cachetlb.rst | 6 +
Documentation/core-api/mm-api.rst | 4 +
Documentation/filesystems/netfs_library.rst | 2 +
arch/nds32/include/asm/cacheflush.h | 1 +
block/bio.c | 21 +
fs/afs/write.c | 9 +-
fs/cachefiles/rdwr.c | 16 +-
fs/io_uring.c | 2 +-
fs/iomap/buffered-io.c | 524 ++++----
fs/jfs/jfs_metapage.c | 1 +
fs/remap_range.c | 116 +-
fs/xfs/xfs_aops.c | 11 +-
fs/xfs/xfs_super.c | 3 +-
include/asm-generic/cacheflush.h | 6 +
include/linux/backing-dev.h | 6 +-
include/linux/bio.h | 46 +-
include/linux/flex_proportions.h | 9 +-
include/linux/gfp.h | 22 +-
include/linux/highmem-internal.h | 11 +
include/linux/highmem.h | 38 +
include/linux/huge_mm.h | 23 +-
include/linux/ksm.h | 4 +-
include/linux/memcontrol.h | 226 ++--
include/linux/migrate.h | 4 +
include/linux/mm.h | 268 +++-
include/linux/mm_inline.h | 98 +-
include/linux/mm_types.h | 77 ++
include/linux/mmdebug.h | 20 +
include/linux/netfs.h | 77 +-
include/linux/page-flags.h | 267 ++--
include/linux/page_idle.h | 99 +-
include/linux/page_owner.h | 8 +-
include/linux/page_ref.h | 158 ++-
include/linux/pagemap.h | 615 +++++----
include/linux/rmap.h | 10 +-
include/linux/swap.h | 17 +-
include/linux/vmstat.h | 107 ++
include/linux/writeback.h | 9 +-
include/trace/events/pagemap.h | 46 +-
include/trace/events/writeback.h | 28 +-
kernel/bpf/verifier.c | 2 +-
kernel/events/uprobes.c | 3 +-
lib/flex_proportions.c | 28 +-
mm/Makefile | 2 +-
mm/compaction.c | 4 +-
mm/filemap.c | 1285 +++++++++----------
mm/folio-compat.c | 147 +++
mm/huge_memory.c | 27 +-
mm/hugetlb.c | 2 +-
mm/internal.h | 40 +-
mm/khugepaged.c | 20 +-
mm/ksm.c | 34 +-
mm/memcontrol.c | 323 +++--
mm/memory-failure.c | 2 +-
mm/memory.c | 20 +-
mm/mempolicy.c | 10 +
mm/memremap.c | 2 +-
mm/migrate.c | 193 ++-
mm/mlock.c | 3 +-
mm/page-writeback.c | 447 ++++---
mm/page_alloc.c | 14 +-
mm/page_io.c | 4 +-
mm/page_owner.c | 10 +-
mm/readahead.c | 108 +-
mm/rmap.c | 14 +-
mm/shmem.c | 115 +-
mm/swap.c | 180 +--
mm/swap_state.c | 2 +-
mm/swapfile.c | 8 +-
mm/truncate.c | 193 +--
mm/userfaultfd.c | 2 +-
mm/util.c | 98 +-
mm/vmscan.c | 15 +-
mm/workingset.c | 44 +-
74 files changed, 3865 insertions(+), 2551 deletions(-)
create mode 100644 mm/folio-compat.c
--
2.30.2
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH v14 075/138] mm/writeback: Add folio_account_redirty()
2021-07-15 3:34 [PATCH v14 000/138] Memory folios Matthew Wilcox (Oracle)
@ 2021-07-15 3:36 ` Matthew Wilcox (Oracle)
2021-08-10 21:25 ` David Howells
2021-08-12 16:27 ` Vlastimil Babka
0 siblings, 2 replies; 4+ messages in thread
From: Matthew Wilcox (Oracle) @ 2021-07-15 3:36 UTC (permalink / raw)
To: linux-kernel
Cc: Matthew Wilcox (Oracle), linux-mm, linux-fsdevel,
Christoph Hellwig
Account the number of pages in the folio that we're redirtying.
Turn account_page_dirty() into a wrapper around it. Also turn
the comment on folio_account_redirty() into kernel-doc and
edit it slightly so it makes sense to its potential callers.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
---
include/linux/writeback.h | 6 +++++-
mm/page-writeback.c | 32 +++++++++++++++++++-------------
2 files changed, 24 insertions(+), 14 deletions(-)
diff --git a/include/linux/writeback.h b/include/linux/writeback.h
index eda9cc778ef6..50cb6e25ab9e 100644
--- a/include/linux/writeback.h
+++ b/include/linux/writeback.h
@@ -399,7 +399,11 @@ void tag_pages_for_writeback(struct address_space *mapping,
pgoff_t start, pgoff_t end);
bool filemap_dirty_folio(struct address_space *mapping, struct folio *folio);
-void account_page_redirty(struct page *page);
+void folio_account_redirty(struct folio *folio);
+static inline void account_page_redirty(struct page *page)
+{
+ folio_account_redirty(page_folio(page));
+}
void sb_mark_inode_writeback(struct inode *inode);
void sb_clear_inode_writeback(struct inode *inode);
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 66060bbf6aad..d7bd5580c91e 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -1084,7 +1084,7 @@ static void wb_update_write_bandwidth(struct bdi_writeback *wb,
* write_bandwidth = ---------------------------------------------------
* period
*
- * @written may have decreased due to account_page_redirty().
+ * @written may have decreased due to folio_account_redirty().
* Avoid underflowing @bw calculation.
*/
bw = written - min(written, wb->written_stamp);
@@ -2527,30 +2527,36 @@ bool filemap_dirty_folio(struct address_space *mapping, struct folio *folio)
}
EXPORT_SYMBOL(filemap_dirty_folio);
-/*
- * Call this whenever redirtying a page, to de-account the dirty counters
- * (NR_DIRTIED, WB_DIRTIED, tsk->nr_dirtied), so that they match the written
- * counters (NR_WRITTEN, WB_WRITTEN) in long term. The mismatches will lead to
- * systematic errors in balanced_dirty_ratelimit and the dirty pages position
- * control.
+/**
+ * folio_account_redirty - Manually account for redirtying a page.
+ * @folio: The folio which is being redirtied.
+ *
+ * Most filesystems should call folio_redirty_for_writepage() instead
+ * of this fuction. If your filesystem is doing writeback outside the
+ * context of a writeback_control(), it can call this when redirtying
+ * a folio, to de-account the dirty counters (NR_DIRTIED, WB_DIRTIED,
+ * tsk->nr_dirtied), so that they match the written counters (NR_WRITTEN,
+ * WB_WRITTEN) in long term. The mismatches will lead to systematic errors
+ * in balanced_dirty_ratelimit and the dirty pages position control.
*/
-void account_page_redirty(struct page *page)
+void folio_account_redirty(struct folio *folio)
{
- struct address_space *mapping = page->mapping;
+ struct address_space *mapping = folio->mapping;
if (mapping && mapping_can_writeback(mapping)) {
struct inode *inode = mapping->host;
struct bdi_writeback *wb;
struct wb_lock_cookie cookie = {};
+ unsigned nr = folio_nr_pages(folio);
wb = unlocked_inode_to_wb_begin(inode, &cookie);
- current->nr_dirtied--;
- dec_node_page_state(page, NR_DIRTIED);
- dec_wb_stat(wb, WB_DIRTIED);
+ current->nr_dirtied -= nr;
+ node_stat_mod_folio(folio, NR_DIRTIED, -nr);
+ wb_stat_mod(wb, WB_DIRTIED, -nr);
unlocked_inode_to_wb_end(inode, &cookie);
}
}
-EXPORT_SYMBOL(account_page_redirty);
+EXPORT_SYMBOL(folio_account_redirty);
/*
* When a writepage implementation decides that it doesn't want to write this
--
2.30.2
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH v14 075/138] mm/writeback: Add folio_account_redirty()
2021-07-15 3:36 ` [PATCH v14 075/138] mm/writeback: Add folio_account_redirty() Matthew Wilcox (Oracle)
@ 2021-08-10 21:25 ` David Howells
2021-08-12 16:27 ` Vlastimil Babka
1 sibling, 0 replies; 4+ messages in thread
From: David Howells @ 2021-08-10 21:25 UTC (permalink / raw)
To: Matthew Wilcox (Oracle)
Cc: dhowells, linux-kernel, linux-mm, linux-fsdevel,
Christoph Hellwig
Matthew Wilcox (Oracle) <willy@infradead.org> wrote:
> Account the number of pages in the folio that we're redirtying.
> Turn account_page_dirty() into a wrapper around it. Also turn
> the comment on folio_account_redirty() into kernel-doc and
> edit it slightly so it makes sense to its potential callers.
>
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: David Howells <dhowells@redhat.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v14 075/138] mm/writeback: Add folio_account_redirty()
2021-07-15 3:36 ` [PATCH v14 075/138] mm/writeback: Add folio_account_redirty() Matthew Wilcox (Oracle)
2021-08-10 21:25 ` David Howells
@ 2021-08-12 16:27 ` Vlastimil Babka
1 sibling, 0 replies; 4+ messages in thread
From: Vlastimil Babka @ 2021-08-12 16:27 UTC (permalink / raw)
To: Matthew Wilcox (Oracle), linux-kernel
Cc: linux-mm, linux-fsdevel, Christoph Hellwig
On 7/15/21 5:36 AM, Matthew Wilcox (Oracle) wrote:
> Account the number of pages in the folio that we're redirtying.
> Turn account_page_dirty() into a wrapper around it. Also turn
> the comment on folio_account_redirty() into kernel-doc and
> edit it slightly so it makes sense to its potential callers.
>
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-08-12 16:27 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-07-18 18:10 [PATCH v14 075/138] mm/writeback: Add folio_account_redirty() kernel test robot
-- strict thread matches above, loose matches on Subject: below --
2021-07-15 3:34 [PATCH v14 000/138] Memory folios Matthew Wilcox (Oracle)
2021-07-15 3:36 ` [PATCH v14 075/138] mm/writeback: Add folio_account_redirty() Matthew Wilcox (Oracle)
2021-08-10 21:25 ` David Howells
2021-08-12 16:27 ` Vlastimil Babka
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.