summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--net/core/sock.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/net/core/sock.c b/net/core/sock.c
index 9d841975a7a1..fba4d5b8553c 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -3782,12 +3782,15 @@ void noinline lock_sock_nested(struct sock *sk, int subclass)
might_sleep();
#ifdef CONFIG_64BIT
if (sizeof(struct slock_owned) == sizeof(long)) {
- socket_lock_t tmp, old;
+ socket_lock_t tmp = {
+ .slock = __SPIN_LOCK_UNLOCKED(tmp.slock),
+ .owned = 1,
+ };
+ socket_lock_t old = {
+ .slock = __SPIN_LOCK_UNLOCKED(old.slock),
+ .owned = 0,
+ };
- tmp.slock = __SPIN_LOCK_UNLOCKED(tmp.slock);
- tmp.owned = 1;
- old.slock = __SPIN_LOCK_UNLOCKED(old.slock);
- old.owned = 0;
if (likely(try_cmpxchg(&sk->sk_lock.combined,
&old.combined, tmp.combined)))
return;