Re: WARNING: at mm/page-writeback.c:1990__set_page_dirty_nobuffers+0x13a/0x170()

From: Dave Jones
Date: Fri Jun 01 2012 - 12:12:35 EST


On Fri, Jun 01, 2012 at 01:44:44AM -0700, Hugh Dickins wrote:

> Please give this patch a try (preferably on current git), and let us know.
>
> Thanks,
> Hugh
>
> --- 3.4.0+/mm/migrate.c 2012-05-27 10:01:43.104049010 -0700
> +++ linux/mm/migrate.c 2012-06-01 00:10:58.080098749 -0700
> @@ -436,7 +436,10 @@ void migrate_page_copy(struct page *newp
> * is actually a signal that all of the page has become dirty.
> * Whereas only part of our page may be dirty.
> */
> - __set_page_dirty_nobuffers(newpage);
> + if (PageSwapBacked(page))
> + SetPageDirty(newpage);
> + else
> + __set_page_dirty_nobuffers(newpage);
> }
>
> mlock_migrate_page(newpage, page);
> --- 3.4.0+/mm/page-writeback.c 2012-05-29 08:09:58.304806782 -0700
> +++ linux/mm/page-writeback.c 2012-06-01 00:23:43.984116973 -0700
> @@ -1987,7 +1987,10 @@ int __set_page_dirty_nobuffers(struct pa
> mapping2 = page_mapping(page);
> if (mapping2) { /* Race with truncate? */
> BUG_ON(mapping2 != mapping);
> - WARN_ON_ONCE(!PagePrivate(page) && !PageUptodate(page));
> + if (WARN_ON(!PagePrivate(page) && !PageUptodate(page)))
> + print_symbol(KERN_WARNING
> + "mapping->a_ops->writepage: %s\n",
> + (unsigned long)mapping->a_ops->writepage);
> account_page_dirtied(page, mapping);
> radix_tree_tag_set(&mapping->page_tree,
> page_index(page), PAGECACHE_TAG_DIRTY);

So with this applied, I don't seem to be able to trigger it. It's been running two hours
so far. I'll leave it running, but right now I don't know what to make of this.

Dave
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/