Re: [PATCH 1/3] mm, swap: ratelimit bad swap entry reports in get_swap_device()

From: David Hildenbrand (Arm)

Date: Wed Aug 12 2026 - 07:13:38 EST


On 8/11/26 18:48, Pedro Falcato wrote:
> On Tue, Aug 11, 2026 at 05:33:54PM +0200, David Hildenbrand (Arm) wrote:
>> 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.
>
> Is it more advanced? It just looks like a handcoded version of __ratelimit.
>
> ... I hate it now. I'll send a patch I guess.

Thanks for cleaning that up!

--
Cheers,

David