On Wed, 26 Jun 2024, Jiaqi Yan wrote:
> diff --git a/mm/memory-failure.c b/mm/memory-failure.c
> index 6f5ac334efba..1559e773537f 100644
> --- a/mm/memory-failure.c
> +++ b/mm/memory-failure.c
> @@ -68,6 +68,8 @@ static int sysctl_memory_failure_early_kill __read_mostly;
>
> static int sysctl_memory_failure_recovery __read_mostly = 1;
>
> +static int sysctl_enable_soft_offline __read_mostly = 1;
> +
> atomic_long_t num_poisoned_pages __read_mostly = ATOMIC_LONG_INIT(0);
>
> static bool hw_memory_failure __read_mostly = false;
> @@ -141,6 +143,15 @@ static struct ctl_table memory_failure_table[] = {
> .extra1 = SYSCTL_ZERO,
> .extra2 = SYSCTL_ONE,
> },
> + {
> + .procname = "enable_soft_offline",
> + .data = &sysctl_enable_soft_offline,
> + .maxlen = sizeof(sysctl_enable_soft_offline),
> + .mode = 0644,
> + .proc_handler = proc_dointvec_minmax,
> + .extra1 = SYSCTL_ZERO,
> + .extra2 = SYSCTL_ONE,
> + }
> };
>
> /*
> @@ -2749,8 +2760,9 @@ static int soft_offline_in_use_page(struct page *page)
> * @pfn: pfn to soft-offline
> * @flags: flags. Same as memory_failure().
> *
> - * Returns 0 on success
> - * -EOPNOTSUPP for hwpoison_filter() filtered the error event
> + * Returns 0 on success,
> + * -EOPNOTSUPP for hwpoison_filter() filtered the error event, or
> + * disabled by /proc/sys/vm/enable_soft_offline,
> * < 0 otherwise negated errno.
> *
> * Soft offline a page, by migration or invalidation,
> @@ -2786,6 +2798,13 @@ int soft_offline_page(unsigned long pfn, int flags)
> return -EIO;
> }
>
> + if (!sysctl_enable_soft_offline) {
> + pr_info_once("%#lx: disabled by
> /proc/sys/vm/enable_soft_offline\n",
> + pfn);
Any strong reason to include the pfn in the log message?
I'm concerned about allowing a user to deduce the physical mapping for any
arbitrary page since this is possible to do through MADV_SOFT_OFFLINE and
I don't think that it adds value, especially if this is pr_info_once().
If we remove the pfn, feel free to add
Acked-by: David Rientjes <[email protected]>
> + put_ref_page(pfn, flags);
> + return -EOPNOTSUPP;
> + }
> +
> mutex_lock(&mf_mutex);
>
> if (PageHWPoison(page)) {
> --
> 2.45.2.741.gdbec12cfda-goog
>
>