diff options
author | Jesse Gross <jesse@nicira.com> | 2013-06-20 17:08:09 -0700 |
---|---|---|
committer | Jesse Gross <jesse@nicira.com> | 2013-06-21 16:21:07 -0700 |
commit | 944aa343cdf7838a95ff99d265ce421fa1a22dc0 (patch) | |
tree | ec1670f07f90ed7cb0b9df22d53b212928814388 /datapath | |
parent | b5889101243ef5dc8d72235fcd6a4ba6193da71d (diff) |
datapath: Use a single attribute array for parsing values and masks.
When parsing flow Netlink messages we currently have arrays to hold the
attribute pointers for both values and masks. This results in a large
stack, which some compilers warn about. It's not actually necessary
to have both arrays at the same time, so we can collapse this to a
single array.
Reported-by: Pravin B Shelar <pshelar@nicira.com>
Signed-off-by: Jesse Gross <jesse@nicira.com>
Diffstat (limited to 'datapath')
-rw-r--r-- | datapath/flow.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/datapath/flow.c b/datapath/flow.c index 9149e436..72aa664b 100644 --- a/datapath/flow.c +++ b/datapath/flow.c @@ -1477,7 +1477,6 @@ int ovs_match_from_nlattrs(struct sw_flow_match *match, const struct nlattr *mask) { const struct nlattr *a[OVS_KEY_ATTR_MAX + 1]; - const struct nlattr *m[OVS_KEY_ATTR_MAX + 1]; const struct nlattr *encap; u64 key_attrs = 0; u64 mask_attrs = 0; @@ -1514,19 +1513,19 @@ int ovs_match_from_nlattrs(struct sw_flow_match *match, return err; if (mask) { - err = parse_flow_mask_nlattrs(mask, m, &mask_attrs); + err = parse_flow_mask_nlattrs(mask, a, &mask_attrs); if (err) return err; if ((mask_attrs & 1ULL << OVS_KEY_ATTR_ENCAP) && encap_valid) { __be16 eth_type = 0; - if (m[OVS_KEY_ATTR_ETHERTYPE]) - eth_type = nla_get_be16(m[OVS_KEY_ATTR_ETHERTYPE]); + if (a[OVS_KEY_ATTR_ETHERTYPE]) + eth_type = nla_get_be16(a[OVS_KEY_ATTR_ETHERTYPE]); if (eth_type == htons(0xffff)) { mask_attrs &= ~(1ULL << OVS_KEY_ATTR_ETHERTYPE); - encap = m[OVS_KEY_ATTR_ENCAP]; - err = parse_flow_mask_nlattrs(encap, m, &mask_attrs); + encap = a[OVS_KEY_ATTR_ENCAP]; + err = parse_flow_mask_nlattrs(encap, a, &mask_attrs); } else err = -EINVAL; @@ -1534,7 +1533,7 @@ int ovs_match_from_nlattrs(struct sw_flow_match *match, return err; } - err = ovs_key_from_nlattrs(match, mask_attrs, m, true); + err = ovs_key_from_nlattrs(match, mask_attrs, a, true); if (err) return err; } else { |