diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index dbf8922216ade6c88bbf1855cca60e881abc6b47..9ccef39a9de261c96f4e5775d7dca48b63d4d133 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -1153,6 +1153,8 @@ int memory_failure(unsigned long pfn, int trapno, int flags)
 	 */
 	if (!PageHWPoison(p)) {
 		printk(KERN_ERR "MCE %#lx: just unpoisoned\n", pfn);
+		atomic_long_sub(nr_pages, &num_poisoned_pages);
+		put_page(hpage);
 		res = 0;
 		goto out;
 	}