Commit b74d3fec authored by David S. Miller's avatar David S. Miller

Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jesse/openvswitch

Jesse Gross says:

====================
Open vSwitch

Four small fixes for net/3.14. I realize that these are late in the
cycle - just got back from vacation.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents f518338b f9b8c4c8
...@@ -1174,7 +1174,7 @@ static void ovs_dp_reset_user_features(struct sk_buff *skb, struct genl_info *in ...@@ -1174,7 +1174,7 @@ static void ovs_dp_reset_user_features(struct sk_buff *skb, struct genl_info *in
struct datapath *dp; struct datapath *dp;
dp = lookup_datapath(sock_net(skb->sk), info->userhdr, info->attrs); dp = lookup_datapath(sock_net(skb->sk), info->userhdr, info->attrs);
if (!dp) if (IS_ERR(dp))
return; return;
WARN(dp->user_features, "Dropping previously announced user features\n"); WARN(dp->user_features, "Dropping previously announced user features\n");
...@@ -1762,11 +1762,12 @@ static int ovs_vport_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb) ...@@ -1762,11 +1762,12 @@ static int ovs_vport_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb)
int bucket = cb->args[0], skip = cb->args[1]; int bucket = cb->args[0], skip = cb->args[1];
int i, j = 0; int i, j = 0;
rcu_read_lock();
dp = get_dp(sock_net(skb->sk), ovs_header->dp_ifindex); dp = get_dp(sock_net(skb->sk), ovs_header->dp_ifindex);
if (!dp) if (!dp) {
rcu_read_unlock();
return -ENODEV; return -ENODEV;
}
rcu_read_lock();
for (i = bucket; i < DP_VPORT_HASH_BUCKETS; i++) { for (i = bucket; i < DP_VPORT_HASH_BUCKETS; i++) {
struct vport *vport; struct vport *vport;
......
...@@ -73,6 +73,7 @@ void ovs_flow_stats_update(struct sw_flow *flow, struct sk_buff *skb) ...@@ -73,6 +73,7 @@ void ovs_flow_stats_update(struct sw_flow *flow, struct sk_buff *skb)
if ((flow->key.eth.type == htons(ETH_P_IP) || if ((flow->key.eth.type == htons(ETH_P_IP) ||
flow->key.eth.type == htons(ETH_P_IPV6)) && flow->key.eth.type == htons(ETH_P_IPV6)) &&
flow->key.ip.frag != OVS_FRAG_TYPE_LATER &&
flow->key.ip.proto == IPPROTO_TCP && flow->key.ip.proto == IPPROTO_TCP &&
likely(skb->len >= skb_transport_offset(skb) + sizeof(struct tcphdr))) { likely(skb->len >= skb_transport_offset(skb) + sizeof(struct tcphdr))) {
tcp_flags = TCP_FLAGS_BE16(tcp_hdr(skb)); tcp_flags = TCP_FLAGS_BE16(tcp_hdr(skb));
...@@ -91,7 +92,7 @@ static void stats_read(struct flow_stats *stats, ...@@ -91,7 +92,7 @@ static void stats_read(struct flow_stats *stats,
unsigned long *used, __be16 *tcp_flags) unsigned long *used, __be16 *tcp_flags)
{ {
spin_lock(&stats->lock); spin_lock(&stats->lock);
if (time_after(stats->used, *used)) if (!*used || time_after(stats->used, *used))
*used = stats->used; *used = stats->used;
*tcp_flags |= stats->tcp_flags; *tcp_flags |= stats->tcp_flags;
ovs_stats->n_packets += stats->packet_count; ovs_stats->n_packets += stats->packet_count;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment