aboutsummaryrefslogtreecommitdiffstats
path: root/net/openvswitch
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-04-22 20:32:51 -0400
committerDavid S. Miller <davem@davemloft.net>2013-04-22 20:32:51 -0400
commit6e0895c2ea326cc4bb11e8fa2f654628d5754c31 (patch)
tree7089303ac11a12edc43a8c4fa1b23974e10937ea /net/openvswitch
parent55fbbe46e9eb3cbe6c335503f5550855a1128dce (diff)
parent60d509fa6a9c4653a86ad830e4c4b30360b23f0e (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/ethernet/emulex/benet/be_main.c drivers/net/ethernet/intel/igb/igb_main.c drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c include/net/scm.h net/batman-adv/routing.c net/ipv4/tcp_input.c The e{uid,gid} --> {uid,gid} credentials fix conflicted with the cleanup in net-next to now pass cred structs around. The be2net driver had a bug fix in 'net' that overlapped with the VLAN interface changes by Patrick McHardy in net-next. An IGB conflict existed because in 'net' the build_skb() support was reverted, and in 'net-next' there was a comment style fix within that code. Several batman-adv conflicts were resolved by making sure that all calls to batadv_is_my_mac() are changed to have a new bat_priv first argument. Eric Dumazet's TS ECR fix in TCP in 'net' conflicted with the F-RTO rewrite in 'net-next', mostly overlapping changes. Thanks to Stephen Rothwell and Antonio Quartulli for help with several of these merge resolutions. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/openvswitch')
-rw-r--r--net/openvswitch/datapath.c30
-rw-r--r--net/openvswitch/flow.c2
2 files changed, 19 insertions, 13 deletions
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index 7bb5d4f6bb90..d2f9f2e57298 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -1681,10 +1681,8 @@ struct sk_buff *ovs_vport_cmd_build_info(struct vport *vport, u32 portid,
1681 return ERR_PTR(-ENOMEM); 1681 return ERR_PTR(-ENOMEM);
1682 1682
1683 retval = ovs_vport_cmd_fill_info(vport, skb, portid, seq, 0, cmd); 1683 retval = ovs_vport_cmd_fill_info(vport, skb, portid, seq, 0, cmd);
1684 if (retval < 0) { 1684 BUG_ON(retval < 0);
1685 kfree_skb(skb); 1685
1686 return ERR_PTR(retval);
1687 }
1688 return skb; 1686 return skb;
1689} 1687}
1690 1688
@@ -1814,25 +1812,33 @@ static int ovs_vport_cmd_set(struct sk_buff *skb, struct genl_info *info)
1814 nla_get_u32(a[OVS_VPORT_ATTR_TYPE]) != vport->ops->type) 1812 nla_get_u32(a[OVS_VPORT_ATTR_TYPE]) != vport->ops->type)
1815 err = -EINVAL; 1813 err = -EINVAL;
1816 1814
1815 reply = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
1816 if (!reply) {
1817 err = -ENOMEM;
1818 goto exit_unlock;
1819 }
1820
1817 if (!err && a[OVS_VPORT_ATTR_OPTIONS]) 1821 if (!err && a[OVS_VPORT_ATTR_OPTIONS])
1818 err = ovs_vport_set_options(vport, a[OVS_VPORT_ATTR_OPTIONS]); 1822 err = ovs_vport_set_options(vport, a[OVS_VPORT_ATTR_OPTIONS]);
1819 if (err) 1823 if (err)
1820 goto exit_unlock; 1824 goto exit_free;
1825
1821 if (a[OVS_VPORT_ATTR_UPCALL_PID]) 1826 if (a[OVS_VPORT_ATTR_UPCALL_PID])
1822 vport->upcall_portid = nla_get_u32(a[OVS_VPORT_ATTR_UPCALL_PID]); 1827 vport->upcall_portid = nla_get_u32(a[OVS_VPORT_ATTR_UPCALL_PID]);
1823 1828
1824 reply = ovs_vport_cmd_build_info(vport, info->snd_portid, info->snd_seq, 1829 err = ovs_vport_cmd_fill_info(vport, reply, info->snd_portid,
1825 OVS_VPORT_CMD_NEW); 1830 info->snd_seq, 0, OVS_VPORT_CMD_NEW);
1826 if (IS_ERR(reply)) { 1831 BUG_ON(err < 0);
1827 netlink_set_err(sock_net(skb->sk)->genl_sock, 0,
1828 ovs_dp_vport_multicast_group.id, PTR_ERR(reply));
1829 goto exit_unlock;
1830 }
1831 1832
1832 ovs_unlock(); 1833 ovs_unlock();
1833 ovs_notify(reply, info, &ovs_dp_vport_multicast_group); 1834 ovs_notify(reply, info, &ovs_dp_vport_multicast_group);
1834 return 0; 1835 return 0;
1835 1836
1837 rtnl_unlock();
1838 return 0;
1839
1840exit_free:
1841 kfree_skb(reply);
1836exit_unlock: 1842exit_unlock:
1837 ovs_unlock(); 1843 ovs_unlock();
1838 return err; 1844 return err;
diff --git a/net/openvswitch/flow.c b/net/openvswitch/flow.c
index cf9328be75e9..b15321a2228c 100644
--- a/net/openvswitch/flow.c
+++ b/net/openvswitch/flow.c
@@ -795,9 +795,9 @@ void ovs_flow_tbl_insert(struct flow_table *table, struct sw_flow *flow)
795 795
796void ovs_flow_tbl_remove(struct flow_table *table, struct sw_flow *flow) 796void ovs_flow_tbl_remove(struct flow_table *table, struct sw_flow *flow)
797{ 797{
798 BUG_ON(table->count == 0);
798 hlist_del_rcu(&flow->hash_node[table->node_ver]); 799 hlist_del_rcu(&flow->hash_node[table->node_ver]);
799 table->count--; 800 table->count--;
800 BUG_ON(table->count < 0);
801} 801}
802 802
803/* The size of the argument for each %OVS_KEY_ATTR_* Netlink attribute. */ 803/* The size of the argument for each %OVS_KEY_ATTR_* Netlink attribute. */