On 2013年03月11日 21:22, Paolo Bonzini wrote:
Il 11/03/2013 11:44, Osier Yang ha scritto:
> On 2013年02月26日 01:44, Paolo Bonzini wrote:
>> libiscsi provides a userspace iSCSI initiator.
>>
>> The main advantage over the kernel initiator is that it is very
>> easy to provide different initiator names for VMs on the same host.
>> Thus libiscsi supports usage of persistent reservations in the VM,
>> which otherwise would only be possible with NPIV.
>>
>> libiscsi uses "iscsi" as the scheme, not "iscsi+tcp". We can
change
>> this in the tests (while remaining backwards-compatible manner, because
>> QEMU uses TCP as the default transport for both Gluster and NBD).
>>
>> Signed-off-by: Paolo Bonzini<pbonzini(a)redhat.com>
>> ---
>> src/qemu/qemu_command.c | 49
>> +++++++++++++++++++++-
>> tests/qemuargv2xmltest.c | 1 +
>> .../qemuxml2argv-disk-drive-network-gluster.args | 2 +-
>> .../qemuxml2argv-disk-drive-network-iscsi.args | 1 +
>> ...ml2argv-disk-drive-network-nbd-ipv6-export.args | 2 +-
>> .../qemuxml2argv-disk-drive-network-nbd-ipv6.args | 2 +-
>> tests/qemuxml2argvtest.c | 2 +
>> 7 files changed, 54 insertions(+), 5 deletions(-)
>> create mode 100644
>> tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-iscsi.args
>>
>> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>> index 733d3bf..07700cc 100644
>> --- a/src/qemu/qemu_command.c
>> +++ b/src/qemu/qemu_command.c
>> @@ -2145,6 +2145,23 @@ qemuParseGlusterString(virDomainDiskDefPtr def)
>> }
>>
>> static int
>> +qemuParseISCSIString(virDomainDiskDefPtr def)
>> +{
>> + virURIPtr uri = NULL;
>> +
>> + if (!(uri = virURIParse(def->src)))
>> + return -1;
>> +
>> + if (uri->path&& strchr(uri->path + 1, '/')) {
>> + virReportError(VIR_ERR_INTERNAL_ERROR,
>> + _("invalid address for iSCSI target"),
>> disk->src);
>> + return -1;
>> + }
>> +
>> + return qemuParseDriveURIString(def, uri, "iscsi");
>> +}
>> +
>> +static int
>> qemuParseNBDString(virDomainDiskDefPtr disk)
>> {
>> virDomainDiskHostDefPtr h = NULL;
>> @@ -2238,8 +2255,14 @@ qemuBuildDriveURIString(virDomainDiskDefPtr
>> disk, virBufferPtr opt,
>> virBufferAddLit(opt, "file=");
>> transp =
>> virDomainDiskProtocolTransportTypeToString(disk->hosts->transport);
>>
>> - if (virAsprintf(&tmpscheme, "%s+%s", scheme, transp)< 0)
>> - goto no_memory;
>> + if (disk->hosts->transport == VIR_DOMAIN_DISK_PROTO_TRANS_TCP) {
>> + tmpscheme = strdup(scheme);
>> + if (tmpscheme == NULL)
>> + goto no_memory;
>
> Why not keeping the "+tcp" for Gluster and NBD instead?
Because it simplifies the code.
> I'm afraid of of relying on qemu's default. Can it be changed?
No, it's API.
Okay, I believe you, ACK.