In nova_alloc_superpage, it's trying to find a free_list node that can hold all consecutive num_blocks. It's hard to succeed when fallocating a large space. For example, even if there is two 800MB free_list nodes, it will fail to use superpages when fallocating 1.6GB space.
I think free blocks for superpages can be obtained from different free_list nodes. It can be done by directly returning the number of 2M-aligned free blocks found in nova_alloc_superpage, just like when allocating small pages.
In nova_alloc_superpage, it's trying to find a free_list node that can hold all consecutive num_blocks. It's hard to succeed when fallocating a large space. For example, even if there is two 800MB free_list nodes, it will fail to use superpages when fallocating 1.6GB space. I think free blocks for superpages can be obtained from different free_list nodes. It can be done by directly returning the number of 2M-aligned free blocks found in nova_alloc_superpage, just like when allocating small pages.