Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 752dc185 authored by Hugh Dickins's avatar Hugh Dickins Committed by Linus Torvalds
Browse files

mm: fix warning in __set_page_dirty_nobuffers



New tmpfs use of !PageUptodate pages for fallocate() is triggering the
WARNING: at mm/page-writeback.c:1990 when __set_page_dirty_nobuffers()
is called from migrate_page_copy() for compaction.

It is anomalous that migration should use __set_page_dirty_nobuffers()
on an address_space that does not participate in dirty and writeback
accounting; and this has also been observed to insert surprising dirty
tags into a tmpfs radix_tree, despite tmpfs not using tags at all.

We should probably give migrate_page_copy() a better way to preserve the
tag and migrate accounting info, when mapping_cap_account_dirty().  But
that needs some more work: so in the interim, avoid the warning by using
a simple SetPageDirty on PageSwapBacked pages.

Reported-and-tested-by: default avatarDave Jones <davej@redhat.com>
Signed-off-by: default avatarHugh Dickins <hughd@google.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 2f9d3df8
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -436,6 +436,9 @@ void migrate_page_copy(struct page *newpage, struct page *page)
		 * is actually a signal that all of the page has become dirty.
		 * is actually a signal that all of the page has become dirty.
		 * Whereas only part of our page may be dirty.
		 * Whereas only part of our page may be dirty.
		 */
		 */
		if (PageSwapBacked(page))
			SetPageDirty(newpage);
		else
			__set_page_dirty_nobuffers(newpage);
			__set_page_dirty_nobuffers(newpage);
 	}
 	}