Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755238AbYAYFhy (ORCPT ); Fri, 25 Jan 2008 00:37:54 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752461AbYAYFhn (ORCPT ); Fri, 25 Jan 2008 00:37:43 -0500 Received: from wx-out-0506.google.com ([66.249.82.232]:25518 "EHLO wx-out-0506.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750954AbYAYFhl (ORCPT ); Fri, 25 Jan 2008 00:37:41 -0500 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=VNx5ZOIob2EwPPniezXcRnG3ktwHOfPdMhXit47Ny1Y9KKRm5fUdl1CGuubcOtIz8XXNI9MwzwEem+rlApiMhQGPzHEAICeMIkh1YxVEZAC++c4WJmhdF56KEpglyLPJcPwtEf3NEGVMc9giulAVkQLXQVWowwhmn0SvoPpFmOU= Message-ID: Date: Fri, 25 Jan 2008 13:37:39 +0800 From: "Dave Young" To: LKML Subject: Re: bluetooth : lockdep warning on rfcomm Cc: "Marcel Holtmann" , "David Miller" , Netdev , bluez-devel@lists.sourceforge.net In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 7208 Lines: 168 On Jan 24, 2008 5:25 PM, Dave Young wrote: > > On Jan 24, 2008 11:02 AM, Dave Young wrote: > > ============================================= > > [ INFO: possible recursive locking detected ] > > 2.6.24-rc8-mm1 #8 > > --------------------------------------------- > > bluepush/3213 is trying to acquire lock: > > (sk_lock-AF_BLUETOOTH){--..}, at: [] > > l2cap_sock_bind+0x40/0x100 [l2cap] > > > > but task is already holding lock: > > (sk_lock-AF_BLUETOOTH){--..}, at: [] > > rfcomm_sock_connect+0x3e/0xe0 [rfcomm] > > > > other info that might help us debug this: > > 2 locks held by bluepush/3213: > > #0: (sk_lock-AF_BLUETOOTH){--..}, at: [] > > rfcomm_sock_connect+0x3e/0xe0 [rfcomm] > > #1: (rfcomm_mutex){--..}, at: [] rfcomm_dlc_open+0x26/0x60 [rfcomm] > > > > stack backtrace: > > Pid: 3213, comm: bluepush Not tainted 2.6.24-rc8-mm1 #8 > > [] ? printk+0x18/0x20 > > [] print_deadlock_bug+0xc7/0xe0 > > [] check_deadlock+0x6c/0x80 > > [] validate_chain+0x14c/0x320 > > [] __lock_acquire+0x1c1/0x730 > > [] lock_acquire+0x79/0xb0 > > [] ? l2cap_sock_bind+0x40/0x100 [l2cap] > > [] lock_sock_nested+0x55/0x70 > > [] ? l2cap_sock_bind+0x40/0x100 [l2cap] > > [] l2cap_sock_bind+0x40/0x100 [l2cap] > > [] kernel_bind+0xa/0x10 > > [] rfcomm_session_create+0x4c/0x110 [rfcomm] > > [] __rfcomm_dlc_open+0x129/0x150 [rfcomm] > > [] rfcomm_dlc_open+0x38/0x60 [rfcomm] > > [] rfcomm_sock_connect+0xb6/0xe0 [rfcomm] > > [] sys_connect+0x99/0xd0 > > [] ? cache_add_dev+0x39/0x1a0 > > [] ? put_lock_stats+0xd/0x30 > > [] ? lock_release_holdtime+0x60/0x80 > > [] ? fget+0x7c/0x100 > > [] ? __lock_release+0x47/0x70 > > [] ? fget+0x7c/0x100 > > [] ? copy_from_user+0x37/0x70 > > [] sys_socketcall+0xa5/0x230 > > [] ? trace_hardirqs_on+0xb9/0x130 > > [] ? restore_nocheck+0x12/0x15 > > > > While fixing this issue, another locking dependency confused me. Are > rfcomm_dev_lock and &d->lock in same lock class? > > The warnings as following: > > ======================================================= > [ INFO: possible circular locking dependency detected ] > 2.6.24-rc8-mm1 #8 > ------------------------------------------------------- > krfcommd/2912 is trying to acquire lock: > (rfcomm_dev_lock){-.--}, at: [] > rfcomm_dev_state_change+0x92/0x160 [rfcomm] > > but task is already holding lock: > (&d->lock){--..}, at: [] __rfcomm_dlc_close+0x43/0xd0 [rfcomm] > > which lock already depends on the new lock. Answer to myself, the reason is that lockdep think this as a lock order problem. in rfcomm_device_add the lock order is : rfcomm_dev_lock --> dlc lock but in __rfcomm_dlc_close is : dlc lock --> rfcomm_dev_lock (-> state_change->rfcomm_dev_get) > > > the existing dependency chain (in reverse order) is: > > -> #1 (&d->lock){--..}: > [] add_lock_to_list+0x33/0x70 > [] check_prev_add+0xd3/0x200 > [] rfcomm_dev_add+0x191/0x300 [rfcomm] > [] check_prevs_add+0x95/0xe0 > [] validate_chain+0x23f/0x320 > [] __lock_acquire+0x1c1/0x730 > [] mark_held_locks+0x39/0x80 > [] lock_acquire+0x79/0xb0 > [] rfcomm_dev_add+0x191/0x300 [rfcomm] > [] _spin_lock+0x39/0x80 > [] rfcomm_dev_add+0x191/0x300 [rfcomm] > [] rfcomm_dev_data_ready+0x0/0x50 [rfcomm] > [] rfcomm_dev_add+0x191/0x300 [rfcomm] > [] rfcomm_create_dev+0x6e/0x100 [rfcomm] > [] lock_sock_nested+0x5a/0x70 > [] rfcomm_dev_ioctl+0x33/0x60 [rfcomm] > [] rfcomm_sock_ioctl+0x2c/0x50 [rfcomm] > [] sock_ioctl+0xc1/0x220 > [] sock_ioctl+0x0/0x220 > [] vfs_ioctl+0x76/0x90 > [] do_vfs_ioctl+0x56/0x140 > [] sys_ioctl+0x62/0x70 > [] syscall_call+0x7/0xb > [] 0xffffffff > > -> #0 (rfcomm_dev_lock){-.--}: > [] check_prev_add+0x34/0x200 > [] default_wake_function+0xb/0x10 > [] check_prevs_add+0x95/0xe0 > [] validate_chain+0x23f/0x320 > [] __lock_acquire+0x1c1/0x730 > [] lock_acquire+0x79/0xb0 > [] rfcomm_dev_state_change+0x92/0x160 [rfcomm] > [] _read_lock+0x39/0x80 > [] rfcomm_dev_state_change+0x92/0x160 [rfcomm] > [] rfcomm_dev_state_change+0x92/0x160 [rfcomm] > [] __rfcomm_dlc_close+0x58/0xd0 [rfcomm] > [] rfcomm_recv_ua+0x73/0x140 [rfcomm] > [] rfcomm_recv_frame+0x171/0x1e0 [rfcomm] > [] trace_hardirqs_on+0xb9/0x130 > [] _spin_unlock_irqrestore+0x39/0x70 > [] rfcomm_run+0xe7/0x590 [rfcomm] > [] hpet_legacy_next_event+0x20/0x50 > [] rfcomm_run+0x0/0x590 [rfcomm] > [] kthread+0x5c/0xa0 > [] kthread+0x0/0xa0 > [] kernel_thread_helper+0x7/0x10 > [] 0xffffffff > > other info that might help us debug this: > > 2 locks held by krfcommd/2912: > #0: (rfcomm_mutex){--..}, at: [] rfcomm_run+0x7b/0x590 [rfcomm] > #1: (&d->lock){--..}, at: [] __rfcomm_dlc_close+0x43/0xd0 [rfcomm] > > stack backtrace: > Pid: 2912, comm: krfcommd Not tainted 2.6.24-rc8-mm1 #8 > [] ? printk+0x18/0x20 > [] print_circular_bug_tail+0x6f/0x80 > [] check_prev_add+0x34/0x200 > [] ? default_wake_function+0xb/0x10 > [] check_prevs_add+0x95/0xe0 > [] validate_chain+0x23f/0x320 > [] __lock_acquire+0x1c1/0x730 > [] lock_acquire+0x79/0xb0 > [] ? rfcomm_dev_state_change+0x92/0x160 [rfcomm] > [] _read_lock+0x39/0x80 > [] ? rfcomm_dev_state_change+0x92/0x160 [rfcomm] > [] rfcomm_dev_state_change+0x92/0x160 [rfcomm] > [] __rfcomm_dlc_close+0x58/0xd0 [rfcomm] > [] rfcomm_recv_ua+0x73/0x140 [rfcomm] > [] rfcomm_recv_frame+0x171/0x1e0 [rfcomm] > [] ? trace_hardirqs_on+0xb9/0x130 > [] ? _spin_unlock_irqrestore+0x39/0x70 > [] rfcomm_run+0xe7/0x590 [rfcomm] > [] ? hpet_legacy_next_event+0x20/0x50 > [] ? rfcomm_run+0x0/0x590 [rfcomm] > [] kthread+0x5c/0xa0 > [] ? kthread+0x0/0xa0 > [] kernel_thread_helper+0x7/0x10 > ======================= > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/