diff mbox

[3/4] net: del hub port when peer is deleted

Message ID 1422860798-17495-3-git-send-email-jasowang@redhat.com
State New
Headers show

Commit Message

Jason Wang Feb. 2, 2015, 7:06 a.m. UTC
We should del hub port when peer is deleted since it will not be reused
and will only be freed during exit.

Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 net/net.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Stefan Hajnoczi Feb. 5, 2015, 2:25 p.m. UTC | #1
On Mon, Feb 02, 2015 at 03:06:37PM +0800, Jason Wang wrote:
> We should del hub port when peer is deleted since it will not be reused
> and will only be freed during exit.
> 
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
>  net/net.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/net/net.c b/net/net.c
> index 7acc162..74e651e 100644
> --- a/net/net.c
> +++ b/net/net.c
> @@ -996,6 +996,8 @@ void net_host_device_remove(Monitor *mon, const QDict *qdict)
>          error_report("invalid host network device '%s'", device);
>          return;
>      }
> +
> +    qemu_del_net_client(nc->peer);
>      qemu_del_net_client(nc);
>  }

If qmp_netdev_del() is used the hub port will stay alive.

Should the peer deletion happen in qemu_del_net_client(), similar to the
existing NIC peer check?

  /* If there is a peer NIC, delete and cleanup client, but do not free. */
  if (nc->peer && nc->peer->info->type == NET_CLIENT_OPTIONS_KIND_NIC) {

This way the hub port is consistently deleted when its peer is deleted.

Stefan
Jason Wang Feb. 6, 2015, 9:29 a.m. UTC | #2
On Thu, Feb 5, 2015 at 10:25 PM, Stefan Hajnoczi <stefanha@gmail.com> 
wrote:
> On Mon, Feb 02, 2015 at 03:06:37PM +0800, Jason Wang wrote:
>>  We should del hub port when peer is deleted since it will not be 
>> reused
>>  and will only be freed during exit.
>>  
>>  Signed-off-by: Jason Wang <jasowang@redhat.com>
>>  ---
>>   net/net.c | 2 ++
>>   1 file changed, 2 insertions(+)
>>  
>>  diff --git a/net/net.c b/net/net.c
>>  index 7acc162..74e651e 100644
>>  --- a/net/net.c
>>  +++ b/net/net.c
>>  @@ -996,6 +996,8 @@ void net_host_device_remove(Monitor *mon, const 
>> QDict *qdict)
>>           error_report("invalid host network device '%s'", device);
>>           return;
>>       }
>>  +
>>  +    qemu_del_net_client(nc->peer);
>>       qemu_del_net_client(nc);
>>   }
> 
> If qmp_netdev_del() is used the hub port will stay alive.

This is true if it has a peer. And the port will be freed during the 
deletion of its peer. If no peer, it will be deleted soon. This is 
consistent with the behaviors of other type of netdevs.  
> 
> Should the peer deletion happen in qemu_del_net_client(), similar to 
> the
> existing NIC peer check?
> 
>   /* If there is a peer NIC, delete and cleanup client, but do not 
> free. */
>   if (nc->peer && nc->peer->info->type == 
> NET_CLIENT_OPTIONS_KIND_NIC) {
> 
> This way the hub port is consistently deleted when its peer is 
> deleted.

Not sure, but if management always do netdev_del after device_del, it 
will get an error.

Thanks
> 
> 
> Stefan
Stefan Hajnoczi Feb. 6, 2015, 2:06 p.m. UTC | #3
On Fri, Feb 06, 2015 at 09:37:54AM +0008, Jason Wang wrote:
> On Thu, Feb 5, 2015 at 10:25 PM, Stefan Hajnoczi <stefanha@gmail.com> wrote:
> >On Mon, Feb 02, 2015 at 03:06:37PM +0800, Jason Wang wrote:
> >> We should del hub port when peer is deleted since it will not be reused
> >> and will only be freed during exit.
> >> Signed-off-by: Jason Wang <jasowang@redhat.com>
> >> ---
> >>  net/net.c | 2 ++
> >>  1 file changed, 2 insertions(+)
> >> diff --git a/net/net.c b/net/net.c
> >> index 7acc162..74e651e 100644
> >> --- a/net/net.c
> >> +++ b/net/net.c
> >> @@ -996,6 +996,8 @@ void net_host_device_remove(Monitor *mon, const
> >>QDict *qdict)
> >>          error_report("invalid host network device '%s'", device);
> >>          return;
> >>      }
> >> +
> >> +    qemu_del_net_client(nc->peer);
> >>      qemu_del_net_client(nc);
> >>  }
> >
> >If qmp_netdev_del() is used the hub port will stay alive.
> 
> This is true if it has a peer. And the port will be freed during the
> deletion of its peer. If no peer, it will be deleted soon. This is
> consistent with the behaviors of other type of netdevs.
> >
> >Should the peer deletion happen in qemu_del_net_client(), similar to the
> >existing NIC peer check?
> >
> >  /* If there is a peer NIC, delete and cleanup client, but do not free.
> >*/
> >  if (nc->peer && nc->peer->info->type == NET_CLIENT_OPTIONS_KIND_NIC) {
> >
> >This way the hub port is consistently deleted when its peer is deleted.
> 
> Not sure, but if management always do netdev_del after device_del, it will
> get an error.

Okay, I will merge this patch as-is.

Stefan
diff mbox

Patch

diff --git a/net/net.c b/net/net.c
index 7acc162..74e651e 100644
--- a/net/net.c
+++ b/net/net.c
@@ -996,6 +996,8 @@  void net_host_device_remove(Monitor *mon, const QDict *qdict)
         error_report("invalid host network device '%s'", device);
         return;
     }
+
+    qemu_del_net_client(nc->peer);
     qemu_del_net_client(nc);
 }