diff options
author | Hugh Dickins <hughd@google.com> | 2012-06-02 03:27:47 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-06-03 23:05:47 -0400 |
commit | 752dc185dacba1edcba425e67fc6df3c7793a5c3 (patch) | |
tree | a2e05a91cff7d1549ba5fcaa3f583339db3412f1 | |
parent | 2f9d3df8aa1cc3c6db5cfa0bad3f0745e04cc27d (diff) |
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: Dave Jones <davej@redhat.com>
Signed-off-by: Hugh Dickins <hughd@google.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | mm/migrate.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/mm/migrate.c b/mm/migrate.c index ab81d482ae6f..be26d5cbe56b 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
@@ -436,7 +436,10 @@ void migrate_page_copy(struct page *newpage, struct page *page) | |||
436 | * is actually a signal that all of the page has become dirty. | 436 | * is actually a signal that all of the page has become dirty. |
437 | * Whereas only part of our page may be dirty. | 437 | * Whereas only part of our page may be dirty. |
438 | */ | 438 | */ |
439 | __set_page_dirty_nobuffers(newpage); | 439 | if (PageSwapBacked(page)) |
440 | SetPageDirty(newpage); | ||
441 | else | ||
442 | __set_page_dirty_nobuffers(newpage); | ||
440 | } | 443 | } |
441 | 444 | ||
442 | mlock_migrate_page(newpage, page); | 445 | mlock_migrate_page(newpage, page); |