Sorry Vitaly, I had the wrong impression from your email that INIT_LIST_HEAD() was being ensured directly in migrate and got confused. (I thought you were saying it happened through the call to do_compact_page() queued). That being said, I don't see where in migrate new_zhdr->buddy is being checked. We do check for new_zhdr.work with if (work_pending(&zhdr->work)) { ... } Is that what you were referring to?