From: Ryan Roberts <ryan.roberts@arm.com>
To: Matthew Wilcox <willy@infradead.org>
Cc: linux-mm@kvack.org
Subject: Re: [RFC PATCH 00/14] Rearrange batched folio freeing
Date: Tue, 5 Sep 2023 14:26:54 +0100 [thread overview]
Message-ID: <618edcc2-c73e-4902-95ff-947f2d63838e@arm.com> (raw)
In-Reply-To: <ZPcp5/6GSHFmxUGT@casper.infradead.org>
On 05/09/2023 14:15, Matthew Wilcox wrote:
> On Mon, Sep 04, 2023 at 02:25:41PM +0100, Ryan Roberts wrote:
>> I've been doing some benchmarking of this series, as promised, but have hit an oops. It doesn't appear to be easily reproducible, and I'm struggling to figure out the root cause, so thought I would share in case you have any ideas?
>
> I didn't hit that with my testing. Admittedly I was using xfs rather
> than ext4, but ...
I've only seen it once.
I have a bit of a hybrid setup - my rootfs is xfs (and using large folios), but
the linux tree (which is being built during the benchmark) is on an ext4
partition. Large anon folios is enabled in this config, so there will be plenty
of large folios in the system.
I'm not sure if the fact that this fired from the ext4 path is too relevant -
the page with the dodgy index is already on the PCP list so may or may not be large.
>
>> UBSAN: array-index-out-of-bounds in mm/page_alloc.c:668:46
>> index 10283 is out of range for type 'list_head [6]'
>> pstate: 004000c9 (nzcv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
>> pc : free_pcppages_bulk+0x330/0x7f8
>> lr : free_pcppages_bulk+0x7a8/0x7f8
>> sp : ffff8000aeef3680
>> x29: ffff8000aeef3680 x28: 000000000000282b x27: 00000000000000fc
>> x26: 000000008015a39a x25: ffff08181ef9e840 x24: ffff0818836caf80
>> x23: 0000000000000001 x22: 0000000000000000 x21: ffff08181ef9e850
>> x20: fffffc200368e680 x19: fffffc200368e6c0 x18: 0000000000000000
>> x17: 3d3d3d3d3d3d3d3d x16: 3d3d3d3d3d3d3d3d x15: 3d3d3d3d3d3d3d3d
>> x14: 3d3d3d3d3d3d3d3d x13: 3d3d3d3d3d3d3d3d x12: 3d3d3d3d3d3d3d3d
>> x11: 3d3d3d3d3d3d3d3d x10: 3d3d3d3d3d3d3d3d x9 : fffffc200368e688
>> x8 : fffffc200368e680 x7 : 205d343737333639 x6 : ffff08181dee0000
>> x5 : ffff0818836caf80 x4 : 0000000000000000 x3 : 0000000000000001
>> x2 : ffff0818836f3330 x1 : ffff0818836f3230 x0 : 006808190c066707
>> Call trace:
>> free_pcppages_bulk+0x330/0x7f8
>> free_unref_page_commit+0x15c/0x250
>> free_unref_folios+0x37c/0x4a8
>> release_unref_folios+0xac/0xf8
>> folios_put+0xe0/0x1f0
>> __folio_batch_release+0x34/0x88
>> truncate_inode_pages_range+0x160/0x540
>> truncate_inode_pages_final+0x58/0x90
>> ext4_evict_inode+0x164/0x900
>> evict+0xac/0x160
>> iput+0x170/0x228
>> do_unlinkat+0x1d0/0x290
>> __arm64_sys_unlinkat+0x48/0x98
>>
>> UBSAN is complaining about migratetype being out of range here:
>>
>> /* Used for pages not on another list */
>> static inline void add_to_free_list(struct page *page, struct zone *zone,
>> unsigned int order, int migratetype)
>> {
>> struct free_area *area = &zone->free_area[order];
>>
>> list_add(&page->buddy_list, &area->free_list[migratetype]);
>> area->nr_free++;
>> }
>>
>> And I think that is called from __free_one_page(), which is called
>> from free_pcppages_bulk() at the top of the stack trace. migratetype
>> originates from get_pcppage_migratetype(page), which is page->index. But
>> I can't see where this might be getting corrupted, or how yours or my
>> changes could affect this.
>
> Agreed with your analysis.
>
> My best guess is that page->index still contains the file index from
> when this page was in the page cache instead of being overwritten with
> the migratetype.
Yeah that was my guess too. But I couldn't see how that was possible. So started
thinking it could be some separate corruption somehow...
> This is ext4, so large folios aren't in use.
>
> I'll look more later, but I don't immediately see the problem.
>
next prev parent reply other threads:[~2023-09-05 13:27 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-25 13:59 Matthew Wilcox (Oracle)
2023-08-25 13:59 ` [RFC PATCH 01/14] mm: Make folios_put() the basis of release_pages() Matthew Wilcox (Oracle)
2023-08-31 14:21 ` Ryan Roberts
2023-09-01 3:58 ` Matthew Wilcox
2023-09-01 8:14 ` Ryan Roberts
2023-08-25 13:59 ` [RFC PATCH 02/14] mm: Convert free_unref_page_list() to use folios Matthew Wilcox (Oracle)
2023-08-31 14:29 ` Ryan Roberts
2023-09-01 4:03 ` Matthew Wilcox
2023-09-01 8:15 ` Ryan Roberts
2023-08-25 13:59 ` [RFC PATCH 03/14] mm: Add free_unref_folios() Matthew Wilcox (Oracle)
2023-08-31 14:39 ` Ryan Roberts
2023-08-25 13:59 ` [RFC PATCH 04/14] mm: Use folios_put() in __folio_batch_release() Matthew Wilcox (Oracle)
2023-08-31 14:41 ` Ryan Roberts
2023-08-25 13:59 ` [RFC PATCH 05/14] memcg: Add mem_cgroup_uncharge_folios() Matthew Wilcox (Oracle)
2023-08-31 14:49 ` Ryan Roberts
2023-08-25 13:59 ` [RFC PATCH 06/14] mm: Remove use of folio list from folios_put() Matthew Wilcox (Oracle)
2023-08-31 14:53 ` Ryan Roberts
2023-08-25 13:59 ` [RFC PATCH 07/14] mm: Use free_unref_folios() in put_pages_list() Matthew Wilcox (Oracle)
2023-08-25 13:59 ` [RFC PATCH 08/14] mm: use __page_cache_release() in folios_put() Matthew Wilcox (Oracle)
2023-08-25 13:59 ` [RFC PATCH 09/14] mm: Handle large folios in free_unref_folios() Matthew Wilcox (Oracle)
2023-08-31 15:21 ` Ryan Roberts
2023-09-01 4:09 ` Matthew Wilcox
2023-08-25 13:59 ` [RFC PATCH 10/14] mm: Allow non-hugetlb large folios to be batch processed Matthew Wilcox (Oracle)
2023-08-31 15:28 ` Ryan Roberts
2023-09-01 4:10 ` Matthew Wilcox
2023-08-25 13:59 ` [RFC PATCH 11/14] mm: Free folios in a batch in shrink_folio_list() Matthew Wilcox (Oracle)
2023-09-04 3:43 ` Matthew Wilcox
2024-01-05 17:00 ` Matthew Wilcox
2023-08-25 13:59 ` [RFC PATCH 12/14] mm: Free folios directly in move_folios_to_lru() Matthew Wilcox (Oracle)
2023-08-31 15:46 ` Ryan Roberts
2023-09-01 4:16 ` Matthew Wilcox
2023-08-25 13:59 ` [RFC PATCH 13/14] memcg: Remove mem_cgroup_uncharge_list() Matthew Wilcox (Oracle)
2023-08-31 18:26 ` Ryan Roberts
2023-08-25 13:59 ` [RFC PATCH 14/14] mm: Remove free_unref_page_list() Matthew Wilcox (Oracle)
2023-08-31 18:27 ` Ryan Roberts
2023-08-30 18:50 ` [RFC PATCH 15/18] mm: Convert free_pages_and_swap_cache() to use folios_put() Matthew Wilcox (Oracle)
2023-08-30 18:50 ` [RFC PATCH 16/18] mm: Use a folio in __collapse_huge_page_copy_succeeded() Matthew Wilcox (Oracle)
2023-08-30 18:50 ` [RFC PATCH 17/18] mm: Convert free_swap_cache() to take a folio Matthew Wilcox (Oracle)
2023-08-31 18:49 ` Ryan Roberts
2023-08-30 18:50 ` [RFC PATCH 18/18] mm: Add pfn_range_put() Matthew Wilcox (Oracle)
2023-08-31 19:03 ` Ryan Roberts
2023-09-01 4:27 ` Matthew Wilcox
2023-09-01 7:59 ` Ryan Roberts
2023-09-04 13:25 ` [RFC PATCH 00/14] Rearrange batched folio freeing Ryan Roberts
2023-09-05 13:15 ` Matthew Wilcox
2023-09-05 13:26 ` Ryan Roberts [this message]
2023-09-05 14:00 ` Matthew Wilcox
2023-09-06 3:48 ` Matthew Wilcox
2023-09-06 10:23 ` Ryan Roberts
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=618edcc2-c73e-4902-95ff-947f2d63838e@arm.com \
--to=ryan.roberts@arm.com \
--cc=linux-mm@kvack.org \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox