• Adrian Reber's avatar
    page-pipe: correctly split page-pipe-buffers · c1f0b1f5
    Adrian Reber authored
    Combining pre-copy (pre-dump) and post-copy (lazy-pages) mode showed a
    problem in the function page_pipe_split_ppb(). The function is used to
    split the page-pipe-buffer so that it only contains the IOVs request
    from the restore side during lazy restore.
    
    Unfortunately it only splits the leading IOVs out of the
    page-pipe-buffer and not the trailing:
    
    Before split for requested address 0x7f27284d1000:
    
     page-pipe: ppb->iov 0x7f0f74d93040
     page-pipe: 		0x7f27282bb000 1
     page-pipe: 		0x7f27284d1000 1
     page-pipe: 		0x7f27284dd000 2
    
    After split:
    
     page-pipe: ppb->iov 0x7f0f74d93050
     page-pipe: 		0x7f27284d1000 1
     page-pipe: 		0x7f27284dd000 2
    
    and:
    
     page-pipe: ppb->iov 0x7f0f74d93040
     page-pipe: 		0x7f27282bb000 1
    
    This patch keeps on splitting the page-pipe-buffer until it contains
    only the requested address with the requested length.
    
    After split (still trying to load 0x7f27284d1000):
    
     page-pipe: ppb->iov 0x7f0f74d93050
     page-pipe: 		0x7f27284d1000 1
    
    and:
    
     page-pipe: ppb->iov 0x7f0f74d93040
     page-pipe: 		0x7f27282bb000 1
    
    and:
    
     page-pipe: ppb->iov 0x7f0f74d93060
     page-pipe: 		0x7f27284dd000 2
    
    v2:
     - moved declarations to the declaration block
    Signed-off-by: 's avatarAdrian Reber <areber@redhat.com>
    Acked-by: 's avatarMike Rapoport <rppt@linux.vnet.ibm.com>
    Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
    c1f0b1f5
page-pipe.c 11.2 KB