diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index c11cfce4d9d95e41bf66bc9078d2304f20788078..3a20f11248a13d5e759ee1f99e97b8faed179150 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -1788,7 +1788,8 @@ int change_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,
 				entry = pmd_mkwrite(entry);
 			ret = HPAGE_PMD_NR;
 			set_pmd_at(mm, addr, pmd, entry);
-			BUG_ON(!preserve_write && pmd_write(entry));
+			BUG_ON(vma_is_anonymous(vma) && !preserve_write &&
+					pmd_write(entry));
 		}
 		spin_unlock(ptl);
 	}