On 03/27/2017 08:26 AM, Markus Armbruster wrote: > qemu_rbd_open() takes option parameters as a flattened QDict, with > keys of the form server.%d.host, server.%d.port, where %d counts up > from zero. > > qemu_rbd_array_opts() extracts these values as follows. First, it > calls qdict_array_entries() to find the list's length. For each list > element, it formats the list's key prefix (e.g. "server.0."), then > creates a new QDict holding the options with that key prefix, then > converts that to a QemuOpts, so it can finally get the member values > from there. > > If there's one surefire way to make code using QDict more awkward, > it's creating more of them and mixing in QemuOpts for good measure. > > The extraction of keys starting with server.%d into another QDict > makes us ignore parameters like server.0.neither-host-nor-port > silently. > > The conversion to QemuOpts abuses runtime_opts, as described a few > commits ago. > > Rewrite to simply get the values straight from the options QDict. > > Fixes -drive not to crash when server.*.* are present, but > server.*.host is absent. > > Fixes -drive to reject invalid server.*.*. > > Permits cleaning up runtime_opts. Do that, and fix -drive to reject > bogus parameters host and port instead of silently ignoring them. > > Signed-off-by: Markus Armbruster <arm...@redhat.com> > --- > block/rbd.c | 127 > +++++++++++++++--------------------------------------------- > 1 file changed, 32 insertions(+), 95 deletions(-) >
Reviewed-by: Eric Blake <ebl...@redhat.com> -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature