diff options
author | Kuniyuki Iwashima <kuniyu@amazon.co.jp> | 2021-12-08 07:21:58 +0100 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2021-12-11 04:43:00 +0100 |
commit | 33d60fbd21fa6f71a88571209e301ec6de59f81b (patch) | |
tree | 3e163274b8b1a636ab4b5aaf05fd0370ea806ff5 /include/net/sock.h | |
parent | Merge https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next (diff) | |
download | linux-33d60fbd21fa6f71a88571209e301ec6de59f81b.tar.xz linux-33d60fbd21fa6f71a88571209e301ec6de59f81b.zip |
sock: Use sock_owned_by_user_nocheck() instead of sk_lock.owned.
This patch moves sock_release_ownership() down in include/net/sock.h and
replaces some sk_lock.owned tests with sock_owned_by_user_nocheck().
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.co.jp>
Link: https://lore.kernel.org/r/20211208062158.54132-1-kuniyu@amazon.co.jp
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'include/net/sock.h')
-rw-r--r-- | include/net/sock.h | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/include/net/sock.h b/include/net/sock.h index 5d8532f26208..37f878564d25 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -1635,16 +1635,6 @@ static inline void sk_mem_uncharge(struct sock *sk, int size) __sk_mem_reclaim(sk, SK_RECLAIM_CHUNK); } -static inline void sock_release_ownership(struct sock *sk) -{ - if (sk->sk_lock.owned) { - sk->sk_lock.owned = 0; - - /* The sk_lock has mutex_unlock() semantics: */ - mutex_release(&sk->sk_lock.dep_map, _RET_IP_); - } -} - /* * Macro so as to not evaluate some arguments when * lockdep is not enabled. @@ -1771,12 +1761,23 @@ static inline bool sock_owned_by_user_nocheck(const struct sock *sk) return sk->sk_lock.owned; } +static inline void sock_release_ownership(struct sock *sk) +{ + if (sock_owned_by_user_nocheck(sk)) { + sk->sk_lock.owned = 0; + + /* The sk_lock has mutex_unlock() semantics: */ + mutex_release(&sk->sk_lock.dep_map, _RET_IP_); + } +} + /* no reclassification while locks are held */ static inline bool sock_allow_reclassification(const struct sock *csk) { struct sock *sk = (struct sock *)csk; - return !sk->sk_lock.owned && !spin_is_locked(&sk->sk_lock.slock); + return !sock_owned_by_user_nocheck(sk) && + !spin_is_locked(&sk->sk_lock.slock); } struct sock *sk_alloc(struct net *net, int family, gfp_t priority, |