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 Original line 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)
#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));
extern void FASTCALL(release_sock(struct sock *sk));


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


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


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


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


		if (sk->sk_state != BT_LISTEN) {
		if (sk->sk_state != BT_LISTEN) {
			err = -EBADFD;
			err = -EBADFD;
+3 −3
Original line number Original line 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);
	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();
	might_sleep();
	spin_lock_bh(&sk->sk_lock.slock);
	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:
	 * 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();
	local_bh_enable();
}
}


EXPORT_SYMBOL(lock_sock);
EXPORT_SYMBOL(lock_sock_nested);


void fastcall release_sock(struct sock *sk)
void fastcall release_sock(struct sock *sk)
{
{