• Stefan Hajnoczi's avatar
    block/mirror: limit qiov to IOV_MAX elements · cae98cb8
    Stefan Hajnoczi authored
    If mirror has more free buffers than IOV_MAX, preadv(2)/pwritev(2)
    EINVAL failures may be encountered.
    
    It is possible to trigger this by setting granularity to a low value
    like 8192.
    
    This patch stops appending chunks once IOV_MAX is reached.
    
    The spurious EINVAL failure can be reproduced with a qcow2 image file
    and the following QMP invocation:
    
      qmp.command('drive-mirror', device='virtio0', target='/tmp/r7.s1',
                  granularity=8192, sync='full', mode='absolute-paths',
                  format='raw')
    
    While the guest is running dd if=/dev/zero of=/var/tmp/foo oflag=direct
    bs=4k.
    
    Cc: Jeff Cody <jcody@redhat.com>
    Signed-off-by: 's avatarStefan Hajnoczi <stefanha@redhat.com>
    Reviewed-by: 's avatarPaolo Bonzini <pbonzini@redhat.com>
    Message-id: 1435761950-26714-1-git-send-email-stefanha@redhat.com
    Signed-off-by: 's avatarJeff Cody <jcody@redhat.com>
    cae98cb8