--- /dev/null
+From foo@baz Fri Nov 24 11:13:07 CET 2017
+Date: Fri, 24 Nov 2017 11:13:07 +0100
+To: Greg KH <gregkh@linuxfoundation.org>
+From: Michal Hocko <mhocko@suse.com>
+Subject: mm, hwpoison: fixup "mm: check the return value of lookup_page_ext for all call sites"
+
+From: Michal Hocko <mhocko@suse.com>
+
+
+Backport of the upstream commit f86e4271978b ("mm: check the return
+value of lookup_page_ext for all call sites") is wrong for hwpoison
+pages. I have accidentally negated the condition for bailout. This
+basically disables hwpoison pages tracking while the code still
+might crash on unusual configurations when struct pages do not have
+page_ext allocated. The fix is trivial to invert the condition.
+
+Reported-by: Jiri Slaby <jslaby@suse.cz>
+Signed-off-by: Michal Hocko <mhocko@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ mm/debug-pagealloc.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/mm/debug-pagealloc.c
++++ b/mm/debug-pagealloc.c
+@@ -34,7 +34,7 @@ static inline void set_page_poison(struc
+ struct page_ext *page_ext;
+
+ page_ext = lookup_page_ext(page);
+- if (page_ext)
++ if (!page_ext)
+ return;
+ __set_bit(PAGE_EXT_DEBUG_POISON, &page_ext->flags);
+ }
+@@ -44,7 +44,7 @@ static inline void clear_page_poison(str
+ struct page_ext *page_ext;
+
+ page_ext = lookup_page_ext(page);
+- if (page_ext)
++ if (!page_ext)
+ return;
+ __clear_bit(PAGE_EXT_DEBUG_POISON, &page_ext->flags);
+ }
+@@ -54,7 +54,7 @@ static inline bool page_poison(struct pa
+ struct page_ext *page_ext;
+
+ page_ext = lookup_page_ext(page);
+- if (page_ext)
++ if (!page_ext)
+ return false;
+ return test_bit(PAGE_EXT_DEBUG_POISON, &page_ext->flags);
+ }