linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Rafael Aquini <aquini@redhat.com>
To: Sasha Levin <levinsasha928@gmail.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	Andrew Morton <akpm@linux-foundation.org>,
	Mel Gorman <mel@csn.ul.ie>, "Michael S. Tsirkin" <mst@redhat.com>,
	Minchan Kim <minchan@kernel.org>, Rik van Riel <riel@redhat.com>,
	Rusty Russell <rusty@rustcorp.com.au>
Subject: Re: [PATCH v12 4/7] mm: introduce compaction and migration for ballooned pages
Date: Thu, 22 Nov 2012 13:10:29 -0200	[thread overview]
Message-ID: <20121122151028.GA1834@t510.redhat.com> (raw)
In-Reply-To: <50AE3463.1040107@gmail.com>

On Thu, Nov 22, 2012 at 09:19:15AM -0500, Sasha Levin wrote:
> And managed to reproduce it only once through last night, here is the dump I got
> before the oops:
> 
> [ 2760.356820] page:ffffea0000d00e00 count:1 mapcount:-2147287036 mapping:00000000000004f4 index:0xd00e00000003
> [ 2760.362354] page flags: 0x350000000001800(private|private_2)
> 

Thanks alot for following up this one Sasha.


We're stumbling across a private page -- seems something in your setup is doing
this particular usage, and that's probably why I'm not seeing the same here.

Regardless being a particular case or not, we shouldn't be poking at that
private page, so I figured the tests I'm doing at balloon_page_movable() are
incomplete and dumb.

Perhaps, a better way to proceed here would be assuring the NR_PAGEFLAGS
rightmost bits from page->flags are all cleared, as this is the state a page
coming from buddy to the balloon list will be, and this is the state the balloon
page flags will be kept as long as it lives as such (we don't play with any flag
at balloon level).


Here goes what I'll propose after you confirm it doesn't trigger your crash
anymore, as it simplifies the code and reduces the testing battery @
balloon_page_movable() -- ballooned pages have no flags set, 1 refcount and 0
mapcount, always.


Could you give this a try?

Thank you!

---
diff --git a/include/linux/balloon_compaction.h b/include/linux/balloon_compacti
index e339dd9..44ad50f 100644
--- a/include/linux/balloon_compaction.h
+++ b/include/linux/balloon_compaction.h
@@ -101,6 +101,12 @@ static inline bool __is_movable_balloon_page(struct page *p
        return mapping_balloon(mapping);
 }
 
+#define PAGE_FLAGS_MASK       ((1UL << NR_PAGEFLAGS) - 1)
+static inline bool __balloon_page_flags(struct page *page)
+{
+       return page->flags & PAGE_FLAGS_MASK ? false : true;
+}
+
 /*
  * balloon_page_movable - test page->mapping->flags to identify balloon pages
  *                       that can be moved by compaction/migration.
@@ -121,8 +127,8 @@ static inline bool balloon_page_movable(struct page *page)
         * Before dereferencing and testing mapping->flags, lets make sure
         * this is not a page that uses ->mapping in a different way
         */
-       if (!PageSlab(page) && !PageSwapCache(page) && !PageAnon(page) &&
-           !page_mapped(page))
+       if (__balloon_page_flags(page) && !page_mapped(page) &&
+           page_count(page) == 1)
                return __is_movable_balloon_page(page);
 
        return false;


  reply	other threads:[~2012-11-22 18:38 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-11 19:01 [PATCH v12 0/7] make balloon pages movable by compaction Rafael Aquini
2012-11-11 19:01 ` [PATCH v12 1/7] mm: adjust address_space_operations.migratepage() return code Rafael Aquini
2012-11-11 19:01 ` [PATCH v12 2/7] mm: redefine address_space.assoc_mapping Rafael Aquini
2012-11-11 19:01 ` [PATCH v12 3/7] mm: introduce a common interface for balloon pages mobility Rafael Aquini
2012-11-11 19:01 ` [PATCH v12 4/7] mm: introduce compaction and migration for ballooned pages Rafael Aquini
2012-11-17 18:01   ` Sasha Levin
2012-11-17 21:54     ` Rafael Aquini
2012-11-18 14:59       ` Sasha Levin
2012-11-20 14:14         ` Rafael Aquini
2012-11-21  1:18           ` Sasha Levin
2012-11-22  0:01             ` Rafael Aquini
2012-11-22 14:19               ` Sasha Levin
2012-11-22 15:10                 ` Rafael Aquini [this message]
2012-11-26 15:57                   ` Sasha Levin
2012-11-11 19:01 ` [PATCH v12 5/7] virtio_balloon: introduce migration primitives to balloon pages Rafael Aquini
2012-11-11 19:01 ` [PATCH v12 6/7] mm: introduce putback_movable_pages() Rafael Aquini
2012-11-11 19:01 ` [PATCH v12 7/7] mm: add vm event counters for balloon pages compaction Rafael Aquini
2012-11-11 19:18 ` [PATCH v12 0/7] make balloon pages movable by compaction Rafael Aquini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20121122151028.GA1834@t510.redhat.com \
    --to=aquini@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=levinsasha928@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mel@csn.ul.ie \
    --cc=minchan@kernel.org \
    --cc=mst@redhat.com \
    --cc=riel@redhat.com \
    --cc=rusty@rustcorp.com.au \
    --cc=virtualization@lists.linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).