Message ID | 1422860798-17495-3-git-send-email-jasowang@redhat.com |
---|---|
State | New |
Headers | show |
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
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
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 --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); }
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(+)