[libvirt] [PATCH 05/13] qemu: support NBD with Unix sockets

Osier Yang jyang at redhat.com
Mon Mar 11 14:24:34 UTC 2013


On 2013年03月11日 21:20, Paolo Bonzini wrote:
> Il 11/03/2013 10:34, Osier Yang ha scritto:
>>>
>>> +    if (STRPREFIX(host, "unix:/")) {
>>> +        src = strchr(host + strlen("unix:"), ':');
>>> +        if (src)
>>> +            *src++ = '\0';
>>
>> Same comments as previous patches.
>
> I think in this case the value that is assigned to src is complex enough
> that it's better to keep it separate.

Okay, but still applies to other similar codes.

>
>>>
>>> -    *port++ = '\0';
>>> -    h->name = strdup(host);
>>> -    if (!h->name)
>>> -        goto no_memory;
>>> +        h->transport = VIR_DOMAIN_DISK_PROTO_TRANS_UNIX;
>>> +        h->socket = strdup(host + strlen("unix:"));
>>> +    } else {
>>> +        port = strchr(host, ':');
>>> +        if (!port) {
>>> +            virReportError(VIR_ERR_INTERNAL_ERROR,
>>> +                           _("cannot parse nbd filename '%s'"),
>>> disk->src);
>>> +            goto error;
>>> +        }
>>>
>>> -    src = strchr(port, ':');
>>> -    if (src)
>>> -        *src++ = '\0';
>>> +        *port++ = '\0';
>>> +        h->name = strdup(host);
>>> +        if (!h->name)
>>> +            goto no_memory;
>>>
>>> -    h->port = strdup(port);
>>> -    if (!h->port)
>>> -        goto no_memory;
>>> +        src = strchr(port, ':');
>>> +        if (src)
>>> +            *src++ = '\0';
>>> +
>>> +        h->port = strdup(port);
>>> +        if (!h->port)
>>> +            goto no_memory;
>>> +    }
>>>
>>>        if (src&&   STRPREFIX(src, "exportname=")) {
>>>            src = strdup(strchr(src, '=') + 1);
>>> @@ -2261,6 +2270,14 @@ qemuBuildNBDString(virDomainDiskDefPtr disk,
>>> virBufferPtr opt)
>>>            virBufferEscape(opt, ',', ",", ":%s",
>>>                            disk->hosts->port ? disk->hosts->port :
>>> "10809");
>>>            break;
>>> +    case VIR_DOMAIN_DISK_PROTO_TRANS_UNIX:
>>> +        if (!disk->hosts->socket) {
>>> +            virReportError(VIR_ERR_INTERNAL_ERROR,
>>> +                           _("socket attribute required for unix
>>> transport"));
>>> +            return -1;
>>> +        }
>>
>> Not sure if we should do this when parsing, as I think the "socket" is
>> required as long as the transport protocol is "unix", unless it's
>> generated somewhere.
>
> Yeah, we cannot be sure in general that it will be required for _all_
> protocols, so I kept it here and followed what gluster does.
>

Agreed.




More information about the libvir-list mailing list