diff options
| author | Trond Myklebust <trond.myklebust@primarydata.com> | 2016-07-24 12:51:10 -0400 | 
|---|---|---|
| committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2016-07-24 12:51:10 -0400 | 
| commit | dc05973b288a5226bb7e56afd6c2fa07560a907c (patch) | |
| tree | 2e1eade8b6010ff4c844341fdeec9ee966d75ac7 /net/core/neighbour.c | |
| parent | 297fae4d0bee5d683533f3324baf1b363e7b48bf (diff) | |
| parent | e7bdea7750eb2a64aea4a08fa5c0a31719c8155d (diff) | |
Merge commit 'e7bdea7750eb'
Needed in order to work on top of pNFS changes in Linus' upstream kernel.
Diffstat (limited to 'net/core/neighbour.c')
| -rw-r--r-- | net/core/neighbour.c | 6 | 
1 files changed, 5 insertions, 1 deletions
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 29dd8cc22bbf..510cd62fcb99 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -2469,13 +2469,17 @@ int neigh_xmit(int index, struct net_device *dev,  		tbl = neigh_tables[index];  		if (!tbl)  			goto out; +		rcu_read_lock_bh();  		neigh = __neigh_lookup_noref(tbl, addr, dev);  		if (!neigh)  			neigh = __neigh_create(tbl, addr, dev, false);  		err = PTR_ERR(neigh); -		if (IS_ERR(neigh)) +		if (IS_ERR(neigh)) { +			rcu_read_unlock_bh();  			goto out_kfree_skb; +		}  		err = neigh->output(neigh, skb); +		rcu_read_unlock_bh();  	}  	else if (index == NEIGH_LINK_TABLE) {  		err = dev_hard_header(skb, dev, ntohs(skb->protocol),  | 
