• Dean Jenkins's avatar
    Bluetooth: Reorganize mutex lock in l2cap_sock_shutdown() · 04ba72e6
    Dean Jenkins authored
    This commit reorganizes the mutex lock and is now
    only protecting l2cap_chan_close(). This is now consistent
    with other places where l2cap_chan_close() is called.
    
    If a conn connection exists, call
    mutex_lock(&conn->chan_lock) before calling l2cap_chan_close()
    to ensure other L2CAP protocol operations do not interfere.
    
    Note that the conn structure has to be protected from being
    freed as it is possible for the connection to be disconnected
    whilst the locks are not held. This solution allows the mutex
    lock to be used even when the connection has just been
    disconnected.
    
    This commit also reduces the scope of chan locking.
    
    The only place where chan locking is needed is the call to
    l2cap_chan_close(chan, 0) which if necessary closes the channel.
    Therefore, move the l2cap_chan_lock(chan) and
    l2cap_chan_lock(chan) locking calls to around
    l2cap_chan_close(chan, 0).
    
    This allows __l2cap_wait_ack(sk, chan) to be called with no
    chan locks being held so L2CAP messaging over the ACL link
    can be done unimpaired.
    Signed-off-by: default avatarDean Jenkins <Dean_Jenkins@mentor.com>
    Signed-off-by: default avatarHarish Jenny K N <harish_kandiga@mentor.com>
    Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
    04ba72e6
l2cap_sock.c 36.1 KB