Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fcc70d5f authored by Peter Zijlstra's avatar Peter Zijlstra Committed by David S. Miller
Browse files

[BLUETOOTH] lockdep: annotate sk_lock nesting in AF_BLUETOOTH

=============================================
[ INFO: possible recursive locking detected ]
2.6.18-1.2726.fc6 #1
parent 67f83cbf
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -745,7 +745,13 @@ static inline int sk_stream_wmem_schedule(struct sock *sk, int size)
 */
#define sock_owned_by_user(sk)	((sk)->sk_lock.owner)

extern void FASTCALL(lock_sock(struct sock *sk));
extern void FASTCALL(lock_sock_nested(struct sock *sk, int subclass));

static inline void lock_sock(struct sock *sk)
{
	lock_sock_nested(sk, 0);
}

extern void FASTCALL(release_sock(struct sock *sk));

/* BH context may only use the following locking interface. */
+2 −2
Original line number Diff line number Diff line
@@ -770,7 +770,7 @@ static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int fl
	long timeo;
	int err = 0;

	lock_sock(sk);
	lock_sock_nested(sk, SINGLE_DEPTH_NESTING);

	if (sk->sk_state != BT_LISTEN) {
		err = -EBADFD;
@@ -792,7 +792,7 @@ static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int fl

		release_sock(sk);
		timeo = schedule_timeout(timeo);
		lock_sock(sk);
		lock_sock_nested(sk, SINGLE_DEPTH_NESTING);

		if (sk->sk_state != BT_LISTEN) {
			err = -EBADFD;
+3 −3
Original line number Diff line number Diff line
@@ -1527,7 +1527,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
	atomic_set(&sk->sk_refcnt, 1);
}

void fastcall lock_sock(struct sock *sk)
void fastcall lock_sock_nested(struct sock *sk, int subclass)
{
	might_sleep();
	spin_lock_bh(&sk->sk_lock.slock);
@@ -1538,11 +1538,11 @@ void fastcall lock_sock(struct sock *sk)
	/*
	 * The sk_lock has mutex_lock() semantics here:
	 */
	mutex_acquire(&sk->sk_lock.dep_map, 0, 0, _RET_IP_);
	mutex_acquire(&sk->sk_lock.dep_map, subclass, 0, _RET_IP_);
	local_bh_enable();
}

EXPORT_SYMBOL(lock_sock);
EXPORT_SYMBOL(lock_sock_nested);

void fastcall release_sock(struct sock *sk)
{