Re: [PATCH 1/3] mm, swap: ratelimit bad swap entry reports in get_swap_device()
From: David Hildenbrand (Arm)
Date: Tue Aug 11 2026 - 11:49:55 EST
On 8/10/26 18:26, Breno Leitao wrote:
> A corrupt page table hands the same bogus entry to get_swap_device() on
> every access to the mapping, and every rejection is logged. One machine
> logged 6185620 copies of the same line in a few hours.
>
> Rate limit both prints.
>
> Signed-off-by: Breno Leitao <leitao@xxxxxxxxxx>
> ---
> mm/swapfile.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/mm/swapfile.c b/mm/swapfile.c
> index 4d4e3e3059f6b..9ab11dc24e4f1 100644
> --- a/mm/swapfile.c
> +++ b/mm/swapfile.c
> @@ -1899,11 +1899,11 @@ struct swap_info_struct *get_swap_device(swp_entry_t entry)
>
> return si;
> bad_nofile:
> - pr_err("%s: %s%08lx\n", __func__, Bad_file, entry.val);
> + pr_err_ratelimited("%s: %s%08lx\n", __func__, Bad_file, entry.val);
> out:
> return NULL;
> put_out:
> - pr_err("%s: %s%08lx\n", __func__, Bad_offset, entry.val);
> + pr_err_ratelimited("%s: %s%08lx\n", __func__, Bad_offset, entry.val);
> percpu_ref_put(&si->users);
> return NULL;
> }
>
In print_bad_page_map() we use something more advanced
(is_bad_page_map_ratelimited): essentially a burst of 60 followed by 1minute of
silence.
Couldn't some of the stuff you drop here (different entries) be similarly valuable?
--
Cheers,
David