datapath: Release rtnl_lock if ovs_vport_cmd_build_info() failed
authorAnsis Atteka <aatteka@nicira.com>
Thu, 3 May 2012 20:48:40 +0000 (13:48 -0700)
committerAnsis Atteka <aatteka@nicira.com>
Fri, 4 May 2012 00:13:13 +0000 (17:13 -0700)
This patch fixes a possible lock-up bug where rtnl_lock might not
get released.

Acked-by: Jesse Gross <jesse@nicira.com>
Signed-off-by: Ansis Atteka <aatteka@nicira.com>
datapath/datapath.c

index 079b3f2..63713d8 100644 (file)
@@ -1891,10 +1891,9 @@ static int ovs_vport_cmd_set(struct sk_buff *skb, struct genl_info *info)
        reply = ovs_vport_cmd_build_info(vport, info->snd_pid, info->snd_seq,
                                         OVS_VPORT_CMD_NEW);
        if (IS_ERR(reply)) {
-               err = PTR_ERR(reply);
                netlink_set_err(GENL_SOCK(sock_net(skb->sk)), 0,
-                               ovs_dp_vport_multicast_group.id, err);
-               return 0;
+                               ovs_dp_vport_multicast_group.id, PTR_ERR(reply));
+               goto exit_unlock;
        }
 
        genl_notify(reply, genl_info_net(info), info->snd_pid,