on 8/6/2023 1:11 AM, Andrew Morton wrote: > On Sat, 5 Aug 2023 19:07:03 +0800 Kemeng Shi <shikemeng@xxxxxxxxxxxxxxx> wrote: > >> The freepage is chained with buddy_list in freelist head. Use buddy_list >> instead of lru to correct the list operation. >> >> ... >> >> --- a/mm/compaction.c >> +++ b/mm/compaction.c >> @@ -1395,8 +1395,8 @@ move_freelist_head(struct list_head *freelist, struct page *freepage) >> { >> LIST_HEAD(sublist); >> >> - if (!list_is_last(freelist, &freepage->lru)) { >> - list_cut_before(&sublist, freelist, &freepage->lru); >> + if (!list_is_last(freelist, &freepage->buddy_list)) { >> + list_cut_before(&sublist, freelist, &freepage->buddy_list); >> list_splice_tail(&sublist, freelist); >> } >> } >> @@ -1412,8 +1412,8 @@ move_freelist_tail(struct list_head *freelist, struct page *freepage) >> { >> LIST_HEAD(sublist); >> >> - if (!list_is_first(freelist, &freepage->lru)) { >> - list_cut_position(&sublist, freelist, &freepage->lru); >> + if (!list_is_first(freelist, &freepage->buddy_list)) { >> + list_cut_position(&sublist, freelist, &freepage->buddy_list); >> list_splice_tail(&sublist, freelist); >> } >> } > > This looks like a significant error. Can we speculate about the > possible runtime effects? > > > It seems no runtime effects for now as lru and buddy_list share the same memory address in a union.