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

From: Pedro Falcato

Date: Tue Aug 11 2026 - 13:03:13 EST


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.

> Couldn't some of the stuff you drop here (different entries) be similarly valuable?

I think we generally do a terribly lousy job reporting these kinds of
failures. Would be awesome to log this elsewhere, or possibly send
something like a SIGBUS to the faulting process, for instance.

(and this kind of stuff should very much be handleable by userspace,
otherwise programs can drop data without even finding out about it)


--
Pedro