diff options
author | David S. Miller <davem@davemloft.net> | 2014-07-16 23:09:34 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-07-16 23:09:34 +0200 |
commit | 1a98c69af1ecd97bfd1f4e4539924a9192434e36 (patch) | |
tree | a243defcf921ea174f8e43fce11d06830a6a9c36 /include/net/sock.h | |
parent | Merge branch 'bonding-next' (diff) | |
parent | Merge tag 'for-linus-20140716' of git://git.infradead.org/linux-mtd (diff) | |
download | linux-1a98c69af1ecd97bfd1f4e4539924a9192434e36.tar.xz linux-1a98c69af1ecd97bfd1f4e4539924a9192434e36.zip |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/sock.h')
-rw-r--r-- | include/net/sock.h | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/include/net/sock.h b/include/net/sock.h index cb84b2f1ad8f..29e48a6d1ded 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -1772,9 +1772,11 @@ __sk_dst_set(struct sock *sk, struct dst_entry *dst) static inline void sk_dst_set(struct sock *sk, struct dst_entry *dst) { - spin_lock(&sk->sk_dst_lock); - __sk_dst_set(sk, dst); - spin_unlock(&sk->sk_dst_lock); + struct dst_entry *old_dst; + + sk_tx_queue_clear(sk); + old_dst = xchg((__force struct dst_entry **)&sk->sk_dst_cache, dst); + dst_release(old_dst); } static inline void @@ -1786,9 +1788,7 @@ __sk_dst_reset(struct sock *sk) static inline void sk_dst_reset(struct sock *sk) { - spin_lock(&sk->sk_dst_lock); - __sk_dst_reset(sk); - spin_unlock(&sk->sk_dst_lock); + sk_dst_set(sk, NULL); } struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie); |