> Jan, could you crunch on this one please? Yep. I've actually seen one similar report too. It looks like a false warning. i_mutex (from some inode in sysfs) is acquired under tty_mutex. And in quota code it's possible we need to acquire tty_mutex under i_mutex (when writing quota warning). Because quota should never deal with sysfs inodes, it should be harmless but still it's ugly, I agree. Definitely, it would be tough to get rid of acquiring tty_mutex under i_mutex in the quota code. From a quick look I also don't see an easy way how to get rid of the other dependency as tty layer needs to serialize device removal... Hmm, how hard would it be to teach lockdep that i_mutex's for inodes of different fs-types are different? That would not add too many lock-types to the system, also most possible problems will be still catched and it would solve at least this problem. Sysfs, proc and similar virtual filesystems *are* really different from the real ones and perhaps it makes sence to also threat their locking differently. What do you think?
Honza > Begin forwarded message: > > Date: Fri, 27 Apr 2007 15:39:12 +0200 > From: Folkert van Heusden <[EMAIL PROTECTED]> > To: linux-kernel@vger.kernel.org > Cc: [EMAIL PROTECTED] > Subject: [2.6.21] possible circular locking dependency detected IN FILESYSTEM > CODE (ext3) > > > Hi, > > Running 2.6.21 on a P4 with HT and 2GB of ram. One filesystem which is > ext3. After 2+ hours of uptime I got the following circular locking > dependency in my dmesg output: > > [ 7429.853775] ======================================================= > [ 7429.853884] [ INFO: possible circular locking dependency detected ] > [ 7429.853939] 2.6.21 #1 > [ 7429.854005] ------------------------------------------------------- > [ 7429.854058] moo/5453 is trying to acquire lock: > [ 7429.854112] (tty_mutex){--..}, at: [<c120d37f>] mutex_lock+0x8/0xa > [ 7429.854286] > [ 7429.854287] but task is already holding lock: > [ 7429.854413] (&s->s_dquot.dqptr_sem){----}, at: [<c109e3e4>] > dquot_alloc_space+0x50/0x189 > [ 7429.854423] > [ 7429.854424] which lock already depends on the new lock. > [ 7429.854426] > [ 7429.854427] > [ 7429.854428] the existing dependency chain (in reverse order) is: > [ 7429.854431] > [ 7429.854432] -> #4 (&s->s_dquot.dqptr_sem){----}: > [ 7429.854437] [<c103983e>] check_prev_add+0x15b/0x281 > [ 7429.854445] [<c10399ef>] check_prevs_add+0x8b/0xe8 > [ 7429.854452] [<c103b3bf>] __lock_acquire+0x692/0xb81 > [ 7429.854460] [<c103bd16>] lock_acquire+0x62/0x81 > [ 7429.854468] [<c1033dbf>] down_read+0x2b/0x3d > [ 7429.854477] [<c109e3e4>] dquot_alloc_space+0x50/0x189 > [ 7429.854490] [<c10af496>] ext3_new_blocks+0x44b/0x5a2 > [ 7429.854497] [<c10b1a28>] ext3_alloc_blocks+0x40/0xdf > [ 7429.854505] [<c10b1b17>] ext3_alloc_branch+0x50/0x21b > [ 7429.854512] [<c10b1ff5>] ext3_get_blocks_handle+0x1b8/0x367 > [ 7429.854519] [<c10b231e>] ext3_getblk+0x97/0x228 > [ 7429.854530] [<c10b24c9>] ext3_bread+0x1a/0x78 > [ 7429.854536] [<c10b760a>] ext3_mkdir+0xf4/0x270 > [ 7429.854545] [<c1077cb6>] vfs_mkdir+0xb3/0x161 > [ 7429.854553] [<c1077df0>] sys_mkdirat+0x8c/0xc4 > [ 7429.854560] [<c1077e48>] sys_mkdir+0x20/0x22 > [ 7429.854570] [<c1003f74>] syscall_call+0x7/0xb > [ 7429.854578] [<ffffffff>] 0xffffffff > [ 7429.854600] > [ 7429.854600] -> #3 (&ei->truncate_mutex){--..}: > [ 7429.854608] [<c103983e>] check_prev_add+0x15b/0x281 > [ 7429.854616] [<c10399ef>] check_prevs_add+0x8b/0xe8 > [ 7429.854623] [<c103b3bf>] __lock_acquire+0x692/0xb81 > [ 7429.854630] [<c103bd16>] lock_acquire+0x62/0x81 > [ 7429.854637] [<c120d400>] __mutex_lock_slowpath+0x75/0x28c > [ 7429.854647] [<c120d37f>] mutex_lock+0x8/0xa > [ 7429.854654] [<c10b3b97>] ext3_truncate+0x170/0x468 > [ 7429.854661] [<c105dea4>] vmtruncate+0xa6/0x116 > [ 7429.854669] [<c108276f>] inode_setattr+0x145/0x16c > [ 7429.854678] [<c10b4ab9>] ext3_setattr+0x150/0x22f > [ 7429.854690] [<c1082ae8>] notify_change+0x352/0x386 > [ 7429.854697] [<c106ccf6>] do_truncate+0x52/0x75 > [ 7429.854705] [<c10771aa>] may_open+0x1ec/0x231 > [ 7429.854713] [<c1077368>] open_namei+0xda/0x59b > [ 7429.854720] [<c106d95e>] do_filp_open+0x2c/0x53 > [ 7429.854731] [<c106dc93>] do_sys_open+0x52/0xd8 > [ 7429.854738] [<c106dd35>] sys_open+0x1c/0x1e > [ 7429.854745] [<c1003f74>] syscall_call+0x7/0xb > [ 7429.854752] [<ffffffff>] 0xffffffff > [ 7429.854760] > [ 7429.854761] -> #2 (&inode->i_alloc_sem){--..}: > [ 7429.854770] [<c103983e>] check_prev_add+0x15b/0x281 > [ 7429.854777] [<c10399ef>] check_prevs_add+0x8b/0xe8 > [ 7429.854784] [<c103b3bf>] __lock_acquire+0x692/0xb81 > [ 7429.854792] [<c103bd16>] lock_acquire+0x62/0x81 > [ 7429.854798] [<c1033e55>] down_write+0x2b/0x45 > [ 7429.854808] [<c1082a6f>] notify_change+0x2d9/0x386 > [ 7429.854818] [<c106ccf6>] do_truncate+0x52/0x75 > [ 7429.854826] [<c10771aa>] may_open+0x1ec/0x231 > [ 7429.854834] [<c1077368>] open_namei+0xda/0x59b > [ 7429.854842] [<c106d95e>] do_filp_open+0x2c/0x53 > [ 7429.854850] [<c106dc93>] do_sys_open+0x52/0xd8 > [ 7429.854860] [<c106dd35>] sys_open+0x1c/0x1e > [ 7429.854867] [<c1003f74>] syscall_call+0x7/0xb > [ 7429.854874] [<ffffffff>] 0xffffffff > [ 7429.854882] > [ 7429.854883] -> #1 (&sysfs_inode_imutex_key){--..}: > [ 7429.854887] [<c103983e>] check_prev_add+0x15b/0x281 > [ 7429.854895] [<c10399ef>] check_prevs_add+0x8b/0xe8 > [ 7429.854902] [<c103b3bf>] __lock_acquire+0x692/0xb81 > [ 7429.854910] [<c103bd16>] lock_acquire+0x62/0x81 > [ 7429.854917] [<c120d400>] __mutex_lock_slowpath+0x75/0x28c > [ 7429.854924] [<c120d37f>] mutex_lock+0x8/0xa > [ 7429.854934] [<c10ac0b7>] remove_dir+0x2c/0xf1 > [ 7429.854942] [<c10ac184>] sysfs_remove_subdir+0x8/0xa > [ 7429.854950] [<c10ad58b>] sysfs_remove_group+0x67/0x78 > [ 7429.854957] [<c1154f44>] dpm_sysfs_remove+0x12/0x16 > [ 7429.854966] [<c11546b3>] device_pm_remove+0x21/0x62 > [ 7429.854977] [<c114e700>] device_del+0x89/0x1dd > [ 7429.854984] [<c114e85f>] device_unregister+0xb/0x15 > [ 7429.854992] [<c114ea5a>] device_destroy+0x8d/0x9a > [ 7429.854999] [<c113a453>] vcs_remove_sysfs+0x1c/0x39 > [ 7429.855007] [<c1140bd9>] con_close+0x5e/0x6b > [ 7429.855017] [<c11329d6>] release_dev+0x4c4/0x6ce > [ 7429.855025] [<c1133059>] tty_release+0x12/0x1c > [ 7429.855033] [<c106f67d>] __fput+0x145/0x16e > [ 7429.855040] [<c106f536>] fput+0x19/0x1b > [ 7429.855046] [<c106ddb6>] filp_close+0x3c/0x75 > [ 7429.855056] [<c106de58>] sys_close+0x69/0xb4 > [ 7429.855064] [<c1003f74>] syscall_call+0x7/0xb > [ 7429.855070] [<ffffffff>] 0xffffffff > [ 7429.855081] > [ 7429.855082] -> #0 (tty_mutex){--..}: > [ 7429.855085] [<c1039717>] check_prev_add+0x34/0x281 > [ 7429.855098] [<c10399ef>] check_prevs_add+0x8b/0xe8 > [ 7429.855105] [<c103b3bf>] __lock_acquire+0x692/0xb81 > [ 7429.855112] [<c103bd16>] lock_acquire+0x62/0x81 > [ 7429.855120] [<c120d400>] __mutex_lock_slowpath+0x75/0x28c > [ 7429.855127] [<c120d37f>] mutex_lock+0x8/0xa > [ 7429.855134] [<c109dd5a>] print_warning+0x8c/0x15d > [ 7429.855144] [<c109e518>] dquot_alloc_space+0x184/0x189 > [ 7429.855151] [<c10af496>] ext3_new_blocks+0x44b/0x5a2 > [ 7429.855162] [<c10b1a28>] ext3_alloc_blocks+0x40/0xdf > [ 7429.855169] [<c10b1b17>] ext3_alloc_branch+0x50/0x21b > [ 7429.855177] [<c10b1ff5>] ext3_get_blocks_handle+0x1b8/0x367 > [ 7429.855184] [<c10b221c>] ext3_get_block+0x78/0xe3 > [ 7429.855195] [<c108f265>] __block_prepare_write+0x168/0x408 > [ 7429.855202] [<c108fd47>] block_prepare_write+0x28/0x3b > [ 7429.855210] [<c10b26c8>] ext3_prepare_write+0xe3/0x17e > [ 7429.855218] [<c1052a29>] generic_file_buffered_write+0x1b1/0x611 > [ 7429.855226] [<c1053137>] __generic_file_aio_write_nolock+0x2ae/0x5ad > [ 7429.855239] [<c105353f>] generic_file_aio_write+0x58/0xc4 > [ 7429.855246] [<c10b02d3>] ext3_file_write+0x2d/0xba > [ 7429.855253] [<c106e73f>] do_sync_write+0xc7/0x116 > [ 7429.855260] [<c106e8e6>] vfs_write+0x158/0x15d > [ 7429.855266] [<c106e98c>] sys_write+0x3d/0x64 > [ 7429.855275] [<c1003f74>] syscall_call+0x7/0xb > [ 7429.855282] [<ffffffff>] 0xffffffff > [ 7429.855290] > [ 7429.855291] other info that might help us debug this: > [ 7429.855293] > [ 7429.855296] 3 locks held by moo/5453: > [ 7429.855297] #0: (&inode->i_mutex){--..}, at: [<c120d37f>] > mutex_lock+0x8/0xa > [ 7429.855305] #1: (&ei->truncate_mutex){--..}, at: [<c120d37f>] > mutex_lock+0x8/0xa > [ 7429.855312] #2: (&s->s_dquot.dqptr_sem){----}, at: [<c109e3e4>] > dquot_alloc_space+0x50/0x189 > [ 7429.855323] > [ 7429.855324] stack backtrace: > [ 7429.855326] [<c1004d53>] show_trace_log_lvl+0x1a/0x30 > [ 7429.855331] [<c1004d7b>] show_trace+0x12/0x14 > [ 7429.855335] [<c1004e75>] dump_stack+0x16/0x18 > [ 7429.855339] [<c103908e>] print_circular_bug_tail+0x6f/0x71 > [ 7429.855343] [<c1039717>] check_prev_add+0x34/0x281 > [ 7429.855347] [<c10399ef>] check_prevs_add+0x8b/0xe8 > [ 7429.855350] [<c103b3bf>] __lock_acquire+0x692/0xb81 > [ 7429.855355] [<c103bd16>] lock_acquire+0x62/0x81 > [ 7429.855362] [<c120d400>] __mutex_lock_slowpath+0x75/0x28c > [ 7429.855366] [<c120d37f>] mutex_lock+0x8/0xa > [ 7429.855370] [<c109dd5a>] print_warning+0x8c/0x15d > [ 7429.855374] [<c109e518>] dquot_alloc_space+0x184/0x189 > [ 7429.855378] [<c10af496>] ext3_new_blocks+0x44b/0x5a2 > [ 7429.855382] [<c10b1a28>] ext3_alloc_blocks+0x40/0xdf > [ 7429.855386] [<c10b1b17>] ext3_alloc_branch+0x50/0x21b > [ 7429.855007] [<c1140bd9>] con_close+0x5e/0x6b > [ 7429.855017] [<c11329d6>] release_dev+0x4c4/0x6ce > [ 7429.855025] [<c1133059>] tty_release+0x12/0x1c > [ 7429.855033] [<c106f67d>] __fput+0x145/0x16e > [ 7429.855040] [<c106f536>] fput+0x19/0x1b > [ 7429.855046] [<c106ddb6>] filp_close+0x3c/0x75 > [ 7429.855056] [<c106de58>] sys_close+0x69/0xb4 > [ 7429.855064] [<c1003f74>] syscall_call+0x7/0xb > [ 7429.855070] [<ffffffff>] 0xffffffff > [ 7429.855081] > [ 7429.855082] -> #0 (tty_mutex){--..}: > [ 7429.855085] [<c1039717>] check_prev_add+0x34/0x281 > [ 7429.855098] [<c10399ef>] check_prevs_add+0x8b/0xe8 > [ 7429.855105] [<c103b3bf>] __lock_acquire+0x692/0xb81 > [ 7429.855112] [<c103bd16>] lock_acquire+0x62/0x81 > [ 7429.855120] [<c120d400>] __mutex_lock_slowpath+0x75/0x28c > [ 7429.855127] [<c120d37f>] mutex_lock+0x8/0xa > [ 7429.855134] [<c109dd5a>] print_warning+0x8c/0x15d > [ 7429.855144] [<c109e518>] dquot_alloc_space+0x184/0x189 > [ 7429.855151] [<c10af496>] ext3_new_blocks+0x44b/0x5a2 > [ 7429.855162] [<c10b1a28>] ext3_alloc_blocks+0x40/0xdf > [ 7429.855169] [<c10b1b17>] ext3_alloc_branch+0x50/0x21b > [ 7429.855177] [<c10b1ff5>] ext3_get_blocks_handle+0x1b8/0x367 > [ 7429.855184] [<c10b221c>] ext3_get_block+0x78/0xe3 > [ 7429.855195] [<c108f265>] __block_prepare_write+0x168/0x408 > [ 7429.855202] [<c108fd47>] block_prepare_write+0x28/0x3b > [ 7429.855210] [<c10b26c8>] ext3_prepare_write+0xe3/0x17e > [ 7429.855218] [<c1052a29>] generic_file_buffered_write+0x1b1/0x611 > [ 7429.855226] [<c1053137>] __generic_file_aio_write_nolock+0x2ae/0x5ad > [ 7429.855239] [<c105353f>] generic_file_aio_write+0x58/0xc4 > [ 7429.855246] [<c10b02d3>] ext3_file_write+0x2d/0xba > [ 7429.855253] [<c106e73f>] do_sync_write+0xc7/0x116 > [ 7429.855260] [<c106e8e6>] vfs_write+0x158/0x15d > [ 7429.855266] [<c106e98c>] sys_write+0x3d/0x64 > [ 7429.855275] [<c1003f74>] syscall_call+0x7/0xb > [ 7429.855282] [<ffffffff>] 0xffffffff > [ 7429.855290] > [ 7429.855291] other info that might help us debug this: > [ 7429.855293] > [ 7429.855296] 3 locks held by moo/5453: > [ 7429.855297] #0: (&inode->i_mutex){--..}, at: [<c120d37f>] > mutex_lock+0x8/0xa > [ 7429.855305] #1: (&ei->truncate_mutex){--..}, at: [<c120d37f>] > mutex_lock+0x8/0xa > [ 7429.855312] #2: (&s->s_dquot.dqptr_sem){----}, at: [<c109e3e4>] > dquot_alloc_space+0x50/0x189 > [ 7429.855323] > [ 7429.855324] stack backtrace: > [ 7429.855326] [<c1004d53>] show_trace_log_lvl+0x1a/0x30 > [ 7429.855331] [<c1004d7b>] show_trace+0x12/0x14 > [ 7429.855335] [<c1004e75>] dump_stack+0x16/0x18 > [ 7429.855339] [<c103908e>] print_circular_bug_tail+0x6f/0x71 > [ 7429.855343] [<c1039717>] check_prev_add+0x34/0x281 > [ 7429.855347] [<c10399ef>] check_prevs_add+0x8b/0xe8 > [ 7429.855350] [<c103b3bf>] __lock_acquire+0x692/0xb81 > [ 7429.855355] [<c103bd16>] lock_acquire+0x62/0x81 > [ 7429.855362] [<c120d400>] __mutex_lock_slowpath+0x75/0x28c > [ 7429.855366] [<c120d37f>] mutex_lock+0x8/0xa > [ 7429.855370] [<c109dd5a>] print_warning+0x8c/0x15d > [ 7429.855374] [<c109e518>] dquot_alloc_space+0x184/0x189 > [ 7429.855378] [<c10af496>] ext3_new_blocks+0x44b/0x5a2 > [ 7429.855382] [<c10b1a28>] ext3_alloc_blocks+0x40/0xdf > [ 7429.855386] [<c10b1b17>] ext3_alloc_branch+0x50/0x21b > [ 7429.855389] [<c10b1ff5>] ext3_get_blocks_handle+0x1b8/0x367 > [ 7429.855393] [<c10b221c>] ext3_get_block+0x78/0xe3 > [ 7429.855400] [<c108f265>] __block_prepare_write+0x168/0x408 > [ 7429.855405] [<c108fd47>] block_prepare_write+0x28/0x3b > [ 7429.855409] [<c10b26c8>] ext3_prepare_write+0xe3/0x17e > [ 7429.855412] [<c1052a29>] generic_file_buffered_write+0x1b1/0x611 > [ 7429.855417] [<c1053137>] __generic_file_aio_write_nolock+0x2ae/0x5ad > [ 7429.855422] [<c105353f>] generic_file_aio_write+0x58/0xc4 > [ 7429.855426] [<c10b02d3>] ext3_file_write+0x2d/0xba > [ 7429.855430] [<c106e73f>] do_sync_write+0xc7/0x116 > [ 7429.855433] [<c106e8e6>] vfs_write+0x158/0x15d > [ 7429.855440] [<c106e98c>] sys_write+0x3d/0x64 > [ 7429.855445] [<c1003f74>] syscall_call+0x7/0xb > [ 7429.855449] ======================= > > > Folkert van Heusden > > -- > www.biglumber.com <- site where one can exchange PGP key signatures > ---------------------------------------------------------------------- > Phone: +31-6-41278122, PGP-key: 1F28D8AE, www.vanheusden.com > - > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to [EMAIL PROTECTED] > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/