From: Alex Wang Date: Fri, 27 Mar 2015 00:35:32 +0000 (-0700) Subject: netdev-vport: Do not update netdev when there is no config change. X-Git-Tag: v2.3.2~25 X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fovs.git;a=commitdiff_plain;h=aaa1c7a982cb5fb078650e377333fdb267b11136 netdev-vport: Do not update netdev when there is no config change. When there is any update from ovsdb, ovs will call netdev_set_config() for every vport. Even though the change is not related to vport, the current implementation will always increment the per-netdev sequence number. Subsequently this could cause even more unwanted effects, e.g. the recreation of 'struct tnl_port' in ofproto level. This commit fixes the issue by only updating the netdev when there is actual configuration change. Signed-off-by: Alex Wang Acked-by: Ben Pfaff --- diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index a67678481..0c22378f0 100644 --- a/lib/netdev-vport.c +++ b/lib/netdev-vport.c @@ -559,9 +559,11 @@ set_tunnel_config(struct netdev *dev_, const struct smap *args) &tnl_cfg.out_key_flow); ovs_mutex_lock(&dev->mutex); - dev->tnl_cfg = tnl_cfg; - tunnel_check_status_change__(dev); - netdev_change_seq_changed(dev_); + if (memcmp(&dev->tnl_cfg, &tnl_cfg, sizeof tnl_cfg)) { + dev->tnl_cfg = tnl_cfg; + tunnel_check_status_change__(dev); + netdev_change_seq_changed(dev_); + } ovs_mutex_unlock(&dev->mutex); return 0; @@ -733,9 +735,11 @@ set_patch_config(struct netdev *dev_, const struct smap *args) } ovs_mutex_lock(&dev->mutex); - free(dev->peer); - dev->peer = xstrdup(peer); - netdev_change_seq_changed(dev_); + if (!dev->peer || strcmp(dev->peer, peer)) { + free(dev->peer); + dev->peer = xstrdup(peer); + netdev_change_seq_changed(dev_); + } ovs_mutex_unlock(&dev->mutex); return 0;