Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jesse/openvswitch
Jesse Gross says: ==================== Two small bug fixes for net/3.9 including the issue previously discussed where allocation of netlink notifications can fail after changes have been committed. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
ea2f2fa143
2 changed files with 19 additions and 13 deletions
|
@ -1593,10 +1593,8 @@ struct sk_buff *ovs_vport_cmd_build_info(struct vport *vport, u32 portid,
|
|||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
retval = ovs_vport_cmd_fill_info(vport, skb, portid, seq, 0, cmd);
|
||||
if (retval < 0) {
|
||||
kfree_skb(skb);
|
||||
return ERR_PTR(retval);
|
||||
}
|
||||
BUG_ON(retval < 0);
|
||||
|
||||
return skb;
|
||||
}
|
||||
|
||||
|
@ -1726,24 +1724,32 @@ static int ovs_vport_cmd_set(struct sk_buff *skb, struct genl_info *info)
|
|||
nla_get_u32(a[OVS_VPORT_ATTR_TYPE]) != vport->ops->type)
|
||||
err = -EINVAL;
|
||||
|
||||
reply = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
|
||||
if (!reply) {
|
||||
err = -ENOMEM;
|
||||
goto exit_unlock;
|
||||
}
|
||||
|
||||
if (!err && a[OVS_VPORT_ATTR_OPTIONS])
|
||||
err = ovs_vport_set_options(vport, a[OVS_VPORT_ATTR_OPTIONS]);
|
||||
if (err)
|
||||
goto exit_unlock;
|
||||
goto exit_free;
|
||||
|
||||
if (a[OVS_VPORT_ATTR_UPCALL_PID])
|
||||
vport->upcall_portid = nla_get_u32(a[OVS_VPORT_ATTR_UPCALL_PID]);
|
||||
|
||||
reply = ovs_vport_cmd_build_info(vport, info->snd_portid, info->snd_seq,
|
||||
OVS_VPORT_CMD_NEW);
|
||||
if (IS_ERR(reply)) {
|
||||
netlink_set_err(sock_net(skb->sk)->genl_sock, 0,
|
||||
ovs_dp_vport_multicast_group.id, PTR_ERR(reply));
|
||||
goto exit_unlock;
|
||||
}
|
||||
err = ovs_vport_cmd_fill_info(vport, reply, info->snd_portid,
|
||||
info->snd_seq, 0, OVS_VPORT_CMD_NEW);
|
||||
BUG_ON(err < 0);
|
||||
|
||||
genl_notify(reply, genl_info_net(info), info->snd_portid,
|
||||
ovs_dp_vport_multicast_group.id, info->nlhdr, GFP_KERNEL);
|
||||
|
||||
rtnl_unlock();
|
||||
return 0;
|
||||
|
||||
exit_free:
|
||||
kfree_skb(reply);
|
||||
exit_unlock:
|
||||
rtnl_unlock();
|
||||
return err;
|
||||
|
|
|
@ -795,9 +795,9 @@ void ovs_flow_tbl_insert(struct flow_table *table, struct sw_flow *flow)
|
|||
|
||||
void ovs_flow_tbl_remove(struct flow_table *table, struct sw_flow *flow)
|
||||
{
|
||||
BUG_ON(table->count == 0);
|
||||
hlist_del_rcu(&flow->hash_node[table->node_ver]);
|
||||
table->count--;
|
||||
BUG_ON(table->count < 0);
|
||||
}
|
||||
|
||||
/* The size of the argument for each %OVS_KEY_ATTR_* Netlink attribute. */
|
||||
|
|
Loading…
Reference in a new issue