diff --git a/[refs] b/[refs] index c0d65a74bb42..bda02e54b86c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4fd466eb46a6a917c317a87fb94bfc7252a0f7ed +refs/heads/master: 1bfe5febe34d2be2120803c10720e179186357c9 diff --git a/trunk/mm/hwpoison-inject.c b/trunk/mm/hwpoison-inject.c index c838735ac31d..c597f46ac18a 100644 --- a/trunk/mm/hwpoison-inject.c +++ b/trunk/mm/hwpoison-inject.c @@ -92,6 +92,11 @@ static int pfn_inject_init(void) if (!dentry) goto fail; + dentry = debugfs_create_u32("corrupt-filter-enable", 0600, + hwpoison_dir, &hwpoison_filter_enable); + if (!dentry) + goto fail; + dentry = debugfs_create_u32("corrupt-filter-dev-major", 0600, hwpoison_dir, &hwpoison_filter_dev_major); if (!dentry) diff --git a/trunk/mm/internal.h b/trunk/mm/internal.h index 5a6761bea6a6..6a697bb97fc5 100644 --- a/trunk/mm/internal.h +++ b/trunk/mm/internal.h @@ -258,3 +258,4 @@ extern u32 hwpoison_filter_dev_minor; extern u64 hwpoison_filter_flags_mask; extern u64 hwpoison_filter_flags_value; extern u64 hwpoison_filter_memcg; +extern u32 hwpoison_filter_enable; diff --git a/trunk/mm/memory-failure.c b/trunk/mm/memory-failure.c index 117ef1598469..2d5f1223bf4d 100644 --- a/trunk/mm/memory-failure.c +++ b/trunk/mm/memory-failure.c @@ -49,10 +49,12 @@ int sysctl_memory_failure_recovery __read_mostly = 1; atomic_long_t mce_bad_pages __read_mostly = ATOMIC_LONG_INIT(0); +u32 hwpoison_filter_enable = 0; u32 hwpoison_filter_dev_major = ~0U; u32 hwpoison_filter_dev_minor = ~0U; u64 hwpoison_filter_flags_mask; u64 hwpoison_filter_flags_value; +EXPORT_SYMBOL_GPL(hwpoison_filter_enable); EXPORT_SYMBOL_GPL(hwpoison_filter_dev_major); EXPORT_SYMBOL_GPL(hwpoison_filter_dev_minor); EXPORT_SYMBOL_GPL(hwpoison_filter_flags_mask); @@ -145,6 +147,9 @@ static int hwpoison_filter_task(struct page *p) { return 0; } int hwpoison_filter(struct page *p) { + if (!hwpoison_filter_enable) + return 0; + if (hwpoison_filter_dev(p)) return -EINVAL;