All of lore.kernel.org
 help / color / mirror / Atom feed
* 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.