aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/sock.h8
-rw-r--r--net/bluetooth/l2cap.c4
-rw-r--r--net/core/sock.c6
3 files changed, 12 insertions, 6 deletions
diff --git a/include/net/sock.h b/include/net/sock.h
index 9cdbae2a53a..35ffbdd35d3 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -745,7 +745,13 @@ static inline int sk_stream_wmem_schedule(struct sock *sk, int size)
745 */ 745 */
746#define sock_owned_by_user(sk) ((sk)->sk_lock.owner) 746#define sock_owned_by_user(sk) ((sk)->sk_lock.owner)
747 747
748extern void FASTCALL(lock_sock(struct sock *sk)); 748extern void FASTCALL(lock_sock_nested(struct sock *sk, int subclass));
749
750static inline void lock_sock(struct sock *sk)
751{
752 lock_sock_nested(sk, 0);
753}
754
749extern void FASTCALL(release_sock(struct sock *sk)); 755extern void FASTCALL(release_sock(struct sock *sk));
750 756
751/* BH context may only use the following locking interface. */ 757/* BH context may only use the following locking interface. */
diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
index bbf78e6a7bc..29a8fa4d372 100644
--- a/net/bluetooth/l2cap.c
+++ b/net/bluetooth/l2cap.c
@@ -770,7 +770,7 @@ static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int fl
770 long timeo; 770 long timeo;
771 int err = 0; 771 int err = 0;
772 772
773 lock_sock(sk); 773 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
774 774
775 if (sk->sk_state != BT_LISTEN) { 775 if (sk->sk_state != BT_LISTEN) {
776 err = -EBADFD; 776 err = -EBADFD;
@@ -792,7 +792,7 @@ static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int fl
792 792
793 release_sock(sk); 793 release_sock(sk);
794 timeo = schedule_timeout(timeo); 794 timeo = schedule_timeout(timeo);
795 lock_sock(sk); 795 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
796 796
797 if (sk->sk_state != BT_LISTEN) { 797 if (sk->sk_state != BT_LISTEN) {
798 err = -EBADFD; 798 err = -EBADFD;
diff --git a/net/core/sock.c b/net/core/sock.c
index ee6cd2541d3..32ff1c551d6 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -1527,7 +1527,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
1527 atomic_set(&sk->sk_refcnt, 1); 1527 atomic_set(&sk->sk_refcnt, 1);
1528} 1528}
1529 1529
1530void fastcall lock_sock(struct sock *sk) 1530void fastcall lock_sock_nested(struct sock *sk, int subclass)
1531{ 1531{
1532 might_sleep(); 1532 might_sleep();
1533 spin_lock_bh(&sk->sk_lock.slock); 1533 spin_lock_bh(&sk->sk_lock.slock);
@@ -1538,11 +1538,11 @@ void fastcall lock_sock(struct sock *sk)
1538 /* 1538 /*
1539 * The sk_lock has mutex_lock() semantics here: 1539 * The sk_lock has mutex_lock() semantics here:
1540 */ 1540 */
1541 mutex_acquire(&sk->sk_lock.dep_map, 0, 0, _RET_IP_); 1541 mutex_acquire(&sk->sk_lock.dep_map, subclass, 0, _RET_IP_);
1542 local_bh_enable(); 1542 local_bh_enable();
1543} 1543}
1544 1544
1545EXPORT_SYMBOL(lock_sock); 1545EXPORT_SYMBOL(lock_sock_nested);
1546 1546
1547void fastcall release_sock(struct sock *sk) 1547void fastcall release_sock(struct sock *sk)
1548{ 1548{