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?

