Skip to content
  • Stefano Garzarella's avatar
    729222af
    block: remove format defaults from QemuOpts in bdrv_create_file() · 729222af
    Stefano Garzarella authored
    
    
    QemuOpts is usually created merging the QemuOptsList of format
    and protocol. So, when the format calls bdr_create_file(), the 'opts'
    parameter contains a QemuOptsList with a combination of format and
    protocol default values.
    
    The format properly removes its options before calling
    bdr_create_file(), but the default values remain in 'opts->list'.
    So if the protocol has options with the same name (e.g. rbd has
    'cluster_size' as qcow2), it will see the default values of the format,
    since for overlapping options, the format wins.
    
    To avoid this issue, lets convert QemuOpts to QDict, in this way we take
    only the set options, and then convert it back to QemuOpts, using the
    'create_opts' of the protocol. So the new QemuOpts, will contain only the
    protocol defaults.
    
    Suggested-by: default avatarKevin Wolf <kwolf@redhat.com>
    Signed-off-by: default avatarStefano Garzarella <sgarzare@redhat.com>
    Message-Id: <20210308161232.248833-1-sgarzare@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    729222af
    block: remove format defaults from QemuOpts in bdrv_create_file()
    Stefano Garzarella authored
    
    
    QemuOpts is usually created merging the QemuOptsList of format
    and protocol. So, when the format calls bdr_create_file(), the 'opts'
    parameter contains a QemuOptsList with a combination of format and
    protocol default values.
    
    The format properly removes its options before calling
    bdr_create_file(), but the default values remain in 'opts->list'.
    So if the protocol has options with the same name (e.g. rbd has
    'cluster_size' as qcow2), it will see the default values of the format,
    since for overlapping options, the format wins.
    
    To avoid this issue, lets convert QemuOpts to QDict, in this way we take
    only the set options, and then convert it back to QemuOpts, using the
    'create_opts' of the protocol. So the new QemuOpts, will contain only the
    protocol defaults.
    
    Suggested-by: default avatarKevin Wolf <kwolf@redhat.com>
    Signed-off-by: default avatarStefano Garzarella <sgarzare@redhat.com>
    Message-Id: <20210308161232.248833-1-sgarzare@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
Loading