openvswitch: Fix Frame-size larger than 1024 bytes warning.
authorpravin shelar <pshelar@ovn.org>
Mon, 19 Sep 2016 20:50:59 +0000 (13:50 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 21 Sep 2016 02:54:35 +0000 (22:54 -0400)
There is no need to declare separate key on stack,
we can just use sw_flow->key to store the key directly.

This commit fixes following warning:

net/openvswitch/datapath.c: In function ‘ovs_flow_cmd_new’:
net/openvswitch/datapath.c:1080:1: warning: the frame size of 1040 bytes
is larger than 1024 bytes [-Wframe-larger-than=]

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/openvswitch/datapath.c

index 0536ab3..474e7a6 100644 (file)
@@ -928,7 +928,6 @@ static int ovs_flow_cmd_new(struct sk_buff *skb, struct genl_info *info)
        struct sw_flow_mask mask;
        struct sk_buff *reply;
        struct datapath *dp;
-       struct sw_flow_key key;
        struct sw_flow_actions *acts;
        struct sw_flow_match match;
        u32 ufid_flags = ovs_nla_get_ufid_flags(a[OVS_FLOW_ATTR_UFID_FLAGS]);
@@ -956,20 +955,24 @@ static int ovs_flow_cmd_new(struct sk_buff *skb, struct genl_info *info)
        }
 
        /* Extract key. */
-       ovs_match_init(&match, &key, &mask);
+       ovs_match_init(&match, &new_flow->key, &mask);
        error = ovs_nla_get_match(net, &match, a[OVS_FLOW_ATTR_KEY],
                                  a[OVS_FLOW_ATTR_MASK], log);
        if (error)
                goto err_kfree_flow;
 
-       ovs_flow_mask_key(&new_flow->key, &key, true, &mask);
-
        /* Extract flow identifier. */
        error = ovs_nla_get_identifier(&new_flow->id, a[OVS_FLOW_ATTR_UFID],
-                                      &key, log);
+                                      &new_flow->key, log);
        if (error)
                goto err_kfree_flow;
 
+       /* unmasked key is needed to match when ufid is not used. */
+       if (ovs_identifier_is_key(&new_flow->id))
+               match.key = new_flow->id.unmasked_key;
+
+       ovs_flow_mask_key(&new_flow->key, &new_flow->key, true, &mask);
+
        /* Validate actions. */
        error = ovs_nla_copy_actions(net, a[OVS_FLOW_ATTR_ACTIONS],
                                     &new_flow->key, &acts, log);
@@ -996,7 +999,7 @@ static int ovs_flow_cmd_new(struct sk_buff *skb, struct genl_info *info)
        if (ovs_identifier_is_ufid(&new_flow->id))
                flow = ovs_flow_tbl_lookup_ufid(&dp->table, &new_flow->id);
        if (!flow)
-               flow = ovs_flow_tbl_lookup(&dp->table, &key);
+               flow = ovs_flow_tbl_lookup(&dp->table, &new_flow->key);
        if (likely(!flow)) {
                rcu_assign_pointer(new_flow->sf_acts, acts);