* Re: [PATCH v14 073/138] mm/writeback: Add folio_cancel_dirty()
@ 2021-07-18 9:50 kernel test robot
0 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-07-18 9:50 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 5559 bytes --]
CC: kbuild-all(a)lists.01.org
In-Reply-To: <20210715033704.692967-74-willy@infradead.org>
References: <20210715033704.692967-74-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: 3 days ago
:::::: commit date: 3 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/9cfbea80d25a5f02f8272cfcdea87bf82dcc2562
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 9cfbea80d25a5f02f8272cfcdea87bf82dcc2562
# 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 'account_page_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 'clear_page_dirty_for_io' - different lock contexts for basic block
vim +/__folio_cancel_dirty +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
* Re: [PATCH v14 073/138] mm/writeback: Add folio_cancel_dirty()
2021-07-15 3:35 ` [PATCH v14 073/138] mm/writeback: Add folio_cancel_dirty() Matthew Wilcox (Oracle)
@ 2021-08-12 16:21 ` Vlastimil Babka
0 siblings, 0 replies; 4+ messages in thread
From: Vlastimil Babka @ 2021-08-12 16:21 UTC (permalink / raw)
To: Matthew Wilcox (Oracle), linux-kernel
Cc: linux-mm, linux-fsdevel, Christoph Hellwig
On 7/15/21 5:35 AM, Matthew Wilcox (Oracle) wrote:
> Turn __cancel_dirty_page() into __folio_cancel_dirty() and add wrappers.
> Move the prototypes into pagemap.h since this is page cache functionality.
> Saves 44 bytes of kernel text in total; 33 bytes from __folio_cancel_dirty
> and 11 from two callers of cancel_dirty_page().
>
> 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
* Re: [PATCH v14 073/138] mm/writeback: Add folio_cancel_dirty()
2021-07-15 3:34 [PATCH v14 000/138] Memory folios Matthew Wilcox (Oracle)
2021-07-15 3:35 ` [PATCH v14 073/138] mm/writeback: Add folio_cancel_dirty() Matthew Wilcox (Oracle)
@ 2021-08-10 21:23 ` David Howells
1 sibling, 0 replies; 4+ messages in thread
From: David Howells @ 2021-08-10 21:23 UTC (permalink / raw)
To: Matthew Wilcox (Oracle)
Cc: dhowells, linux-kernel, linux-mm, linux-fsdevel, Christoph Hellwig
Matthew Wilcox (Oracle) <willy@infradead.org> wrote:
> Turn __cancel_dirty_page() into __folio_cancel_dirty() and add wrappers.
> Move the prototypes into pagemap.h since this is page cache functionality.
> Saves 44 bytes of kernel text in total; 33 bytes from __folio_cancel_dirty
> and 11 from two callers of cancel_dirty_page().
>
> 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
* [PATCH v14 073/138] mm/writeback: Add folio_cancel_dirty()
2021-07-15 3:34 [PATCH v14 000/138] Memory folios Matthew Wilcox (Oracle)
@ 2021-07-15 3:35 ` Matthew Wilcox (Oracle)
2021-08-12 16:21 ` Vlastimil Babka
2021-08-10 21:23 ` David Howells
1 sibling, 1 reply; 4+ messages in thread
From: Matthew Wilcox (Oracle) @ 2021-07-15 3:35 UTC (permalink / raw)
To: linux-kernel
Cc: Matthew Wilcox (Oracle), linux-mm, linux-fsdevel, Christoph Hellwig
Turn __cancel_dirty_page() into __folio_cancel_dirty() and add wrappers.
Move the prototypes into pagemap.h since this is page cache functionality.
Saves 44 bytes of kernel text in total; 33 bytes from __folio_cancel_dirty
and 11 from two callers of cancel_dirty_page().
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
---
include/linux/mm.h | 7 -------
include/linux/pagemap.h | 11 +++++++++++
mm/page-writeback.c | 16 ++++++++--------
3 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 481019481d10..07ba22351d15 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -2005,13 +2005,6 @@ int redirty_page_for_writepage(struct writeback_control *wbc,
bool folio_mark_dirty(struct folio *folio);
bool set_page_dirty(struct page *page);
int set_page_dirty_lock(struct page *page);
-void __cancel_dirty_page(struct page *page);
-static inline void cancel_dirty_page(struct page *page)
-{
- /* Avoid atomic ops, locking, etc. when not actually needed. */
- if (PageDirty(page))
- __cancel_dirty_page(page);
-}
int clear_page_dirty_for_io(struct page *page);
int get_cmdline(struct task_struct *task, char *buffer, int buflen);
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 665ba6a67385..a4d0aeaf884d 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -786,6 +786,17 @@ static inline void account_page_cleaned(struct page *page,
{
return folio_account_cleaned(page_folio(page), mapping, wb);
}
+void __folio_cancel_dirty(struct folio *folio);
+static inline void folio_cancel_dirty(struct folio *folio)
+{
+ /* Avoid atomic ops, locking, etc. when not actually needed. */
+ if (folio_test_dirty(folio))
+ __folio_cancel_dirty(folio);
+}
+static inline void cancel_dirty_page(struct page *page)
+{
+ folio_cancel_dirty(page_folio(page));
+}
int __set_page_dirty_nobuffers(struct page *page);
int __set_page_dirty_no_writeback(struct page *page);
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 792a83bd3917..0854ef768d06 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -2640,28 +2640,28 @@ EXPORT_SYMBOL(set_page_dirty_lock);
* page without actually doing it through the VM. Can you say "ext3 is
* horribly ugly"? Thought you could.
*/
-void __cancel_dirty_page(struct page *page)
+void __folio_cancel_dirty(struct folio *folio)
{
- struct address_space *mapping = page_mapping(page);
+ struct address_space *mapping = folio_mapping(folio);
if (mapping_can_writeback(mapping)) {
struct inode *inode = mapping->host;
struct bdi_writeback *wb;
struct wb_lock_cookie cookie = {};
- lock_page_memcg(page);
+ folio_memcg_lock(folio);
wb = unlocked_inode_to_wb_begin(inode, &cookie);
- if (TestClearPageDirty(page))
- account_page_cleaned(page, mapping, wb);
+ if (folio_test_clear_dirty(folio))
+ folio_account_cleaned(folio, mapping, wb);
unlocked_inode_to_wb_end(inode, &cookie);
- unlock_page_memcg(page);
+ folio_memcg_unlock(folio);
} else {
- ClearPageDirty(page);
+ folio_clear_dirty(folio);
}
}
-EXPORT_SYMBOL(__cancel_dirty_page);
+EXPORT_SYMBOL(__folio_cancel_dirty);
/*
* Clear a page's dirty flag, while caring for dirty memory accounting.
--
2.30.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-08-12 16:21 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-18 9:50 [PATCH v14 073/138] mm/writeback: Add folio_cancel_dirty() 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:35 ` [PATCH v14 073/138] mm/writeback: Add folio_cancel_dirty() Matthew Wilcox (Oracle)
2021-08-12 16:21 ` Vlastimil Babka
2021-08-10 21:23 ` David Howells
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.