datapath: Fix tunnel reconfiguration that does not change key data.
authorBen Pfaff <blp@nicira.com>
Mon, 17 Oct 2011 18:32:23 +0000 (11:32 -0700)
committerBen Pfaff <blp@nicira.com>
Tue, 18 Oct 2011 20:31:30 +0000 (13:31 -0700)
Without this commit, a pair of commands like
    ovs-dpctl add-if br0 gre0,type=gre,remote_ip=192.168.5.2,csum=true
    ovs-dpctl set-if br0 gre0,csum=false
would result in a csum of "true" for gre0, that is, the second command
would silently have no effect.  This could also happen when the key data
(such as remote_ip) changed but the port hash just happened to have the
same value.

This also fixes a small kernel memory leak in this case.

An upcoming commit implements the "ovs-dpctl set-if" command mentioned
above.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
datapath/tunnel.c

index 38004e9e50d717fad18207c77f4345548bfd4d0f..8edff069d0e8ec1ac2be8f026b5018212e587822 100644 (file)
@@ -1408,6 +1408,8 @@ int tnl_set_options(struct vport *vport, struct nlattr *options)
 
        if (port_hash(&mutable->key) != port_hash(&old_mutable->key))
                port_table_move_port(vport, mutable);
+       else
+               assign_config_rcu(vport, mutable);
 
        return 0;