Commit 23469de6 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net

David writes:
  "Networking:

   A few straggler bug fixes:

   1) Fix indexing of multi-pass dumps of ipv6 addresses, from David
      Ahern.

   2) Revert RCU locking change for bonding netpoll, causes worse
      problems than it solves.

   3) pskb_trim_rcsum_slow() doesn't handle odd trim offsets, resulting
      in erroneous bad hw checksum triggers with CHECKSUM_COMPLETE
      devices.  From Dimitris Michailidis.

   4) a revert to some neighbour code changes that adjust notifications
      in a way that confuses some apps."

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net:
  Revert "neighbour: force neigh_invalidate when NUD_FAILED update is from admin"
  net/ipv6: Fix index counter for unicast addresses in in6_dump_addrs
  net: fix pskb_trim_rcsum_slow() with odd trim offset
  Revert "bond: take rcu lock in netpoll_send_skb_on_dev"
parents b0d04fb5 d2fb4fb8
...@@ -1148,8 +1148,7 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new, ...@@ -1148,8 +1148,7 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
neigh->nud_state = new; neigh->nud_state = new;
err = 0; err = 0;
notify = old & NUD_VALID; notify = old & NUD_VALID;
if (((old & (NUD_INCOMPLETE | NUD_PROBE)) || if ((old & (NUD_INCOMPLETE | NUD_PROBE)) &&
(flags & NEIGH_UPDATE_F_ADMIN)) &&
(new & NUD_FAILED)) { (new & NUD_FAILED)) {
neigh_invalidate(neigh); neigh_invalidate(neigh);
notify = 1; notify = 1;
......
...@@ -312,7 +312,6 @@ void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb, ...@@ -312,7 +312,6 @@ void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb,
/* It is up to the caller to keep npinfo alive. */ /* It is up to the caller to keep npinfo alive. */
struct netpoll_info *npinfo; struct netpoll_info *npinfo;
rcu_read_lock_bh();
lockdep_assert_irqs_disabled(); lockdep_assert_irqs_disabled();
npinfo = rcu_dereference_bh(np->dev->npinfo); npinfo = rcu_dereference_bh(np->dev->npinfo);
...@@ -357,7 +356,6 @@ void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb, ...@@ -357,7 +356,6 @@ void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb,
skb_queue_tail(&npinfo->txq, skb); skb_queue_tail(&npinfo->txq, skb);
schedule_delayed_work(&npinfo->tx_work,0); schedule_delayed_work(&npinfo->tx_work,0);
} }
rcu_read_unlock_bh();
} }
EXPORT_SYMBOL(netpoll_send_skb_on_dev); EXPORT_SYMBOL(netpoll_send_skb_on_dev);
......
...@@ -1846,8 +1846,9 @@ int pskb_trim_rcsum_slow(struct sk_buff *skb, unsigned int len) ...@@ -1846,8 +1846,9 @@ int pskb_trim_rcsum_slow(struct sk_buff *skb, unsigned int len)
if (skb->ip_summed == CHECKSUM_COMPLETE) { if (skb->ip_summed == CHECKSUM_COMPLETE) {
int delta = skb->len - len; int delta = skb->len - len;
skb->csum = csum_sub(skb->csum, skb->csum = csum_block_sub(skb->csum,
skb_checksum(skb, len, delta, 0)); skb_checksum(skb, len, delta, 0),
len);
} }
return __pskb_trim(skb, len); return __pskb_trim(skb, len);
} }
......
...@@ -4928,8 +4928,8 @@ static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb, ...@@ -4928,8 +4928,8 @@ static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb,
/* unicast address incl. temp addr */ /* unicast address incl. temp addr */
list_for_each_entry(ifa, &idev->addr_list, if_list) { list_for_each_entry(ifa, &idev->addr_list, if_list) {
if (++ip_idx < s_ip_idx) if (ip_idx < s_ip_idx)
continue; goto next;
err = inet6_fill_ifaddr(skb, ifa, err = inet6_fill_ifaddr(skb, ifa,
NETLINK_CB(cb->skb).portid, NETLINK_CB(cb->skb).portid,
cb->nlh->nlmsg_seq, cb->nlh->nlmsg_seq,
...@@ -4938,6 +4938,8 @@ static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb, ...@@ -4938,6 +4938,8 @@ static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb,
if (err < 0) if (err < 0)
break; break;
nl_dump_check_consistent(cb, nlmsg_hdr(skb)); nl_dump_check_consistent(cb, nlmsg_hdr(skb));
next:
ip_idx++;
} }
break; break;
} }
......
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