All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
To: Hailiang Zhang <zhang.zhanghailiang@huawei.com>,
	lizhijian@cn.fujitsu.com, jasowang@redhat.com
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] colo-compare: fix find_and_check_chardev()
Date: Mon, 10 Oct 2016 11:49:15 +0800	[thread overview]
Message-ID: <9bab6585-3de0-6f6b-ae4e-1e4191d40e47@cn.fujitsu.com> (raw)
In-Reply-To: <57FB0759.2080401@huawei.com>



On 10/10/2016 11:13 AM, Hailiang Zhang wrote:
> Hi,
>
> On 2016/10/10 10:52, Zhang Chen wrote:
>>
>>
>> On 09/30/2016 12:06 PM, zhanghailiang wrote:
>>> find_and_check_chardev() uses 'opts' member of CharDriverState to
>>> check if the chardev is 'socket' chardev or not, which the opts
>>> will be NULL if We add the chardev by qmp 'chardev-add' command.
>>>
>>> All the related info can be found in 'filename' member of 
>>> CharDriverState,
>>> For tcp socket device, it will be like 
>>> 'disconnected:tcp:9.61.1.8:9004,server'
>>> or 'tcp:9.61.1.8:9001,server <-> 9.61.1.8:50256', we can simply 
>>> check it to
>>> identify if it is a tcp socket char device.
>>>
>>> Besides, fix this helper function to return -1 while some errors 
>>> happen.
>>>
>>> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
>>
>> This patch looks fine to me.
>>
>
> Sorry, I found there are still some problems with this modification,
> For some local connection between filter objects, I think we can use 
> unix socket
> instead of tcp socket. (Or even other char device, for example file or 
> pipe, but
> Let's make things simple, we limit it to socket now)
>
> So the below check is insufficient, It should be
>
> +    if (!strstr((*chr)->filename, "tcp:") && 
> !strstr((*chr)->filename, "unix:")) {
>          error_setg(errp, "chardev \"%s\" is not a tcp socket, 
> filename '%s'",
>                     chr_name, (*chr)->filename);
>
> If you and Jason agree with this, i will send V2.
>

I find part of codes in this patch has same with another patch:

net: don't poke at chardev internal QemuOpts

I think you can fix and rebase your patch,
then we need jason's comments for this.


Thanks
Zhang Chen

> Thanks,
> Hailiang
>
>> Reviewed-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
>>
>> Thanks
>> Zhang Chen
>>
>>> ---
>>>    net/colo-compare.c | 54 
>>> ++++++++----------------------------------------------
>>>    1 file changed, 8 insertions(+), 46 deletions(-)
>>>
>>> diff --git a/net/colo-compare.c b/net/colo-compare.c
>>> index 22b1da1..6693258 100644
>>> --- a/net/colo-compare.c
>>> +++ b/net/colo-compare.c
>>> @@ -92,10 +92,6 @@ typedef struct CompareClass {
>>>        ObjectClass parent_class;
>>>    } CompareClass;
>>>
>>> -typedef struct CompareChardevProps {
>>> -    bool is_socket;
>>> -} CompareChardevProps;
>>> -
>>>    enum {
>>>        PRIMARY_IN = 0,
>>>        SECONDARY_IN,
>>> @@ -564,56 +560,22 @@ static void 
>>> compare_sec_rs_finalize(SocketReadState *sec_rs)
>>>        }
>>>    }
>>>
>>> -static int compare_chardev_opts(void *opaque,
>>> -                                const char *name, const char *value,
>>> -                                Error **errp)
>>> -{
>>> -    CompareChardevProps *props = opaque;
>>> -
>>> -    if (strcmp(name, "backend") == 0 &&
>>> -        strcmp(value, "socket") == 0) {
>>> -        props->is_socket = true;
>>> -        return 0;
>>> -    } else if (strcmp(name, "host") == 0 ||
>>> -              (strcmp(name, "port") == 0) ||
>>> -              (strcmp(name, "server") == 0) ||
>>> -              (strcmp(name, "wait") == 0) ||
>>> -              (strcmp(name, "path") == 0)) {
>>> -        return 0;
>>> -    } else {
>>> -        error_setg(errp,
>>> -                   "COLO-compare does not support a chardev with 
>>> option %s=%s",
>>> -                   name, value);
>>> -        return -1;
>>> -    }
>>> -}
>>> -
>>> -/*
>>> - * Return 0 is success.
>>> - * Return 1 is failed.
>>> - */
>>>    static int find_and_check_chardev(CharDriverState **chr,
>>>                                      char *chr_name,
>>>                                      Error **errp)
>>>    {
>>> -    CompareChardevProps props;
>>> -
>>>        *chr = qemu_chr_find(chr_name);
>>>        if (*chr == NULL) {
>>>            error_setg(errp, "Device '%s' not found",
>>>                       chr_name);
>>> -        return 1;
>>> +        return -1;
>>>        }
>>>
>>> -    memset(&props, 0, sizeof(props));
>>> -    if (qemu_opt_foreach((*chr)->opts, compare_chardev_opts, 
>>> &props, errp)) {
>>> -        return 1;
>>> -    }
>>> +    if (!strstr((*chr)->filename, "tcp")) {
>>> +        error_setg(errp, "chardev \"%s\" is not a tcp socket, 
>>> filename '%s'",
>>> +                   chr_name, (*chr)->filename);
>>> +        return -1;
>>>
>>> -    if (!props.is_socket) {
>>> -        error_setg(errp, "chardev \"%s\" is not a tcp socket",
>>> -                   chr_name);
>>> -        return 1;
>>>        }
>>>        return 0;
>>>    }
>>> @@ -660,15 +622,15 @@ static void 
>>> colo_compare_complete(UserCreatable *uc, Error **errp)
>>>            return;
>>>        }
>>>
>>> -    if (find_and_check_chardev(&s->chr_pri_in, s->pri_indev, errp)) {
>>> +    if (find_and_check_chardev(&s->chr_pri_in, s->pri_indev, errp) 
>>> < 0) {
>>>            return;
>>>        }
>>>
>>> -    if (find_and_check_chardev(&s->chr_sec_in, s->sec_indev, errp)) {
>>> +    if (find_and_check_chardev(&s->chr_sec_in, s->sec_indev, errp) 
>>> < 0) {
>>>            return;
>>>        }
>>>
>>> -    if (find_and_check_chardev(&s->chr_out, s->outdev, errp)) {
>>> +    if (find_and_check_chardev(&s->chr_out, s->outdev, errp) < 0) {
>>>            return;
>>>        }
>>>
>>
>
>
>
> .
>

-- 
Thanks
zhangchen

  reply	other threads:[~2016-10-10  3:48 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-30  4:06 [Qemu-devel] [PATCH] colo-compare: fix find_and_check_chardev() zhanghailiang
2016-10-10  2:52 ` Zhang Chen
2016-10-10  3:13   ` Hailiang Zhang
2016-10-10  3:49     ` Zhang Chen [this message]
2016-10-10  6:06       ` Hailiang Zhang
2016-10-20  3:53       ` Jason Wang
2016-10-20  4:53         ` Hailiang Zhang
2016-10-21  2:13           ` Jason Wang
2016-10-20  2:12 ` Jason Wang
2016-10-20  4:52   ` Hailiang Zhang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9bab6585-3de0-6f6b-ae4e-1e4191d40e47@cn.fujitsu.com \
    --to=zhangchen.fnst@cn.fujitsu.com \
    --cc=jasowang@redhat.com \
    --cc=lizhijian@cn.fujitsu.com \
    --cc=qemu-devel@nongnu.org \
    --cc=zhang.zhanghailiang@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.