On Tue, Sep 7, 2021 at 8:20 AM kernel test robot wrote: > > FYI, we noticed the following commit (built with clang-14): > > commit: 9857a17f206f ("mm/gup: remove try_get_page(), call try_get_compound_head() directly") > caused below changes (please refer to attached dmesg/kmsg for entire log/backtrace): > > [ 143.908513][ T3260] kernel BUG at include/linux/pagemap.h:223! Ahh, well, yes. That commit is clearly buggy, in that the try_get_compound_head() code really doesn't work at all for us. __page_cache_add_speculative() is not at all the same as try_get_page(), and I should have caught on to this as I applied it. I just read the explanation, and it sounded believable, but it was entirely wrong. try_get_page() is literally about that "page ref overflow" case, but try_get_compound_head() uses page_cache_add_speculative() which has different logic and has those extra "this only works in RCU context" logic. So that commit was completely bogus, and the "lack of maintenance" was not lack of maintenance at all, it was all about entirely different semantics. Reverted. Linus