[BLUETOOTH] lockdep: annotate sk_lock nesting in AF_BLUETOOTH
============================================= [ INFO: possible recursive locking detected ] 2.6.18-1.2726.fc6 #1
This commit is contained in:
parent
67f83cbf08
commit
fcc70d5fdc
3 changed files with 12 additions and 6 deletions
|
@ -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. */
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue