From: Jérôme Glisse <jgli...@redhat.com>

Fix for 4.14, zone device page always have an elevated refcount
of one and thus page count sanity check in uncharge_page() is
inappropriate for them.

Signed-off-by: Jérôme Glisse <jgli...@redhat.com>
Reported-by: Evgeny Baskakov <ebaska...@nvidia.com>
Cc: Andrew Morton <a...@linux-foundation.org>
Cc: Johannes Weiner <han...@cmpxchg.org>
Cc: Michal Hocko <mho...@kernel.org>
Cc: Vladimir Davydov <vdavydov....@gmail.com>
---
 mm/memcontrol.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 15af3da5af02..d51d3e1f49c9 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -5648,7 +5648,8 @@ static void uncharge_batch(const struct uncharge_gather 
*ug)
 static void uncharge_page(struct page *page, struct uncharge_gather *ug)
 {
        VM_BUG_ON_PAGE(PageLRU(page), page);
-       VM_BUG_ON_PAGE(!PageHWPoison(page) && page_count(page), page);
+       VM_BUG_ON_PAGE(!PageHWPoison(page) && !is_zone_device_page(page) &&
+                       page_count(page), page);
 
        if (!page->mem_cgroup)
                return;
-- 
2.13.5

Reply via email to