lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20080414214102.GB7097@atrey.karlin.mff.cuni.cz>
Date:	Mon, 14 Apr 2008 23:41:02 +0200
From:	Jan Kara <jack@...e.cz>
To:	Dave Jones <davej@...hat.com>,
	Linux Kernel <linux-kernel@...r.kernel.org>
Subject: Re: ext3 truncate/quota lockdep trace.

> =======================================================
> [ INFO: possible circular locking dependency detected ]
> 2.6.25-0.195.rc8.git1.fc9.x86_64 #1
> -------------------------------------------------------
> tar/4243 is trying to acquire lock:
>  (&ei->truncate_mutex){--..}, at: [_end+107219435/2109740072] ext3_get_blocks_handle+0x143/0x8b1 [ext3]
> 
> but task is already holding lock:
>  (&sb->s_type->i_mutex_key#9/4){--..}, at: [_end+107246718/2109740072] ext3_quota_write+0xb4/0x239 [ext3]
> 
> which lock already depends on the new lock.
  Thanks for sending the trace. This is actually a false positive
because fs locks on quota files rank differently from locks on other
files. I'll try to think how to fix this in a nice way... Maybe we could
give i_mutex and i_truncate_sem a separate lock class for quota files.

								Honza

> the existing dependency chain (in reverse order) is:
> 
> -> #4 (&sb->s_type->i_mutex_key#9/4){--..}:
>        [__lock_acquire+3027/3427] __lock_acquire+0xbd3/0xd63
>        [lock_acquire+94/120] lock_acquire+0x5e/0x78
>        [mutex_lock_nested+247/661] mutex_lock_nested+0xf7/0x295
>        [_end+107246718/2109740072] ext3_quota_write+0xb4/0x239 [ext3]
>        [v2_write_dquot+280/359] v2_write_dquot+0x118/0x167
>        [dquot_commit+160/243] dquot_commit+0xa0/0xf3
>        [_end+107256471/2109740072] ext3_write_dquot+0x64/0x89 [ext3]
>        [dqput+304/458] dqput+0x130/0x1ca
>        [dquot_drop+48/112] dquot_drop+0x30/0x70
>        [_end+107256657/2109740072] ext3_dquot_drop+0x4c/0x6c [ext3]
>        [_end+107210573/2109740072] ext3_free_inode+0xf9/0x2dc [ext3]
>        [_end+107226100/2109740072] ext3_delete_inode+0xba/0xda [ext3]
>        [generic_delete_inode+184/325] generic_delete_inode+0xb8/0x145
>        [generic_drop_inode+21/362] generic_drop_inode+0x15/0x16a
>        [iput+124/128] iput+0x7c/0x80
>        [do_unlinkat+254/340] do_unlinkat+0xfe/0x154
>        [sys_unlinkat+36/38] sys_unlinkat+0x24/0x26
>        [system_call_after_swapgs+123/128] system_call_after_swapgs+0x7b/0x80
>        [<ffffffffffffffff>] 0xffffffffffffffff
> 
> -> #3 (&s->s_dquot.dqio_mutex){--..}:
>        [__lock_acquire+3027/3427] __lock_acquire+0xbd3/0xd63
>        [lock_acquire+94/120] lock_acquire+0x5e/0x78
>        [mutex_lock_nested+247/661] mutex_lock_nested+0xf7/0x295
>        [dquot_acquire+65/276] dquot_acquire+0x41/0x114
>        [_end+107256334/2109740072] ext3_acquire_dquot+0x64/0x89 [ext3]
>        [dqget+665/712] dqget+0x299/0x2c8
>        [dquot_initialize+136/188] dquot_initialize+0x88/0xbc
>        [_end+107256769/2109740072] ext3_dquot_initialize+0x50/0x73 [ext3]
>        [vfs_quota_on_inode+876/1118] vfs_quota_on_inode+0x36c/0x45e
>        [vfs_quota_on+111/143] vfs_quota_on+0x6f/0x8f
>        [_end+107242277/2109740072] ext3_quota_on+0xd9/0xeb [ext3]
>        [sys_quotactl+918/1582] sys_quotactl+0x396/0x62e
>        [system_call_after_swapgs+123/128] system_call_after_swapgs+0x7b/0x80
>        [<ffffffffffffffff>] 0xffffffffffffffff
> 
> -> #2 (&dquot->dq_lock){--..}:
>        [__lock_acquire+3027/3427] __lock_acquire+0xbd3/0xd63
>        [lock_acquire+94/120] lock_acquire+0x5e/0x78
>        [mutex_lock_nested+247/661] mutex_lock_nested+0xf7/0x295
>        [dqget+636/712] dqget+0x27c/0x2c8
>        [dquot_initialize+136/188] dquot_initialize+0x88/0xbc
>        [_end+107256769/2109740072] ext3_dquot_initialize+0x50/0x73 [ext3]
>        [vfs_quota_on_inode+876/1118] vfs_quota_on_inode+0x36c/0x45e
>        [vfs_quota_on+111/143] vfs_quota_on+0x6f/0x8f
>        [_end+107242277/2109740072] ext3_quota_on+0xd9/0xeb [ext3]
>        [sys_quotactl+918/1582] sys_quotactl+0x396/0x62e
>        [system_call_after_swapgs+123/128] system_call_after_swapgs+0x7b/0x80
>        [<ffffffffffffffff>] 0xffffffffffffffff
> 
> -> #1 (&s->s_dquot.dqptr_sem){----}:
>        [__lock_acquire+3027/3427] __lock_acquire+0xbd3/0xd63
>        [lock_acquire+94/120] lock_acquire+0x5e/0x78
>        [down_read+64/109] down_read+0x40/0x6d
>        [dquot_free_space+57/412] dquot_free_space+0x39/0x19c
>        [_end+107200960/2109740072] ext3_free_blocks+0x5e/0x7c [ext3]
>        [_end+107222729/2109740072] ext3_clear_blocks+0x180/0x19a [ext3]
>        [_end+107222931/2109740072] ext3_free_data+0xb0/0xd6 [ext3]
>        [_end+107225000/2109740072] ext3_truncate+0x589/0x91b [ext3]
>        [vmtruncate+194/228] vmtruncate+0xc2/0xe4
>        [inode_setattr+43/293] inode_setattr+0x2b/0x125
>        [_end+107215384/2109740072] ext3_setattr+0x1bc/0x223 [ext3]
>        [notify_change+383/782] notify_change+0x17f/0x30e
>        [do_truncate+101/131] do_truncate+0x65/0x83
>        [may_open+443/529] may_open+0x1bb/0x211
>        [open_namei+719/1726] open_namei+0x2cf/0x6be
>        [do_filp_open+40/75] do_filp_open+0x28/0x4b
>        [do_sys_open+81/210] do_sys_open+0x51/0xd2
>        [sys_open+27/29] sys_open+0x1b/0x1d
>        [system_call_after_swapgs+123/128] system_call_after_swapgs+0x7b/0x80
>        [<ffffffffffffffff>] 0xffffffffffffffff
> 
> -> #0 (&ei->truncate_mutex){--..}:
>        [__lock_acquire+2774/3427] __lock_acquire+0xad6/0xd63
>        [lock_acquire+94/120] lock_acquire+0x5e/0x78
>        [mutex_lock_nested+247/661] mutex_lock_nested+0xf7/0x295
>        [_end+107219435/2109740072] ext3_get_blocks_handle+0x143/0x8b1 [ext3]
>        [_end+107221689/2109740072] ext3_getblk+0x64/0x194 [ext3]
>        [_end+107222015/2109740072] ext3_bread+0x16/0x82 [ext3]
>        [_end+107246762/2109740072] ext3_quota_write+0xe0/0x239 [ext3]
>        [get_free_dqblk+181/231] get_free_dqblk+0xb5/0xe7
>        [do_insert_tree+505/1069] do_insert_tree+0x1f9/0x42d
>        [do_insert_tree+876/1069] do_insert_tree+0x36c/0x42d
>        [do_insert_tree+876/1069] do_insert_tree+0x36c/0x42d
>        [do_insert_tree+876/1069] do_insert_tree+0x36c/0x42d
>        [v2_write_dquot+54/359] v2_write_dquot+0x36/0x167
>        [dquot_acquire+164/276] dquot_acquire+0xa4/0x114
>        [_end+107256334/2109740072] ext3_acquire_dquot+0x64/0x89 [ext3]
>        [dqget+665/712] dqget+0x299/0x2c8
>        [dquot_transfer+227/949] dquot_transfer+0xe3/0x3b5
>        [_end+107215161/2109740072] ext3_setattr+0xdd/0x223 [ext3]
>        [notify_change+383/782] notify_change+0x17f/0x30e
>        [chown_common+171/196] chown_common+0xab/0xc4
>        [sys_chown+76/105] sys_chown+0x4c/0x69
>        [tracesys+213/218] tracesys+0xd5/0xda
>        [<ffffffffffffffff>] 0xffffffffffffffff
> 
> other info that might help us debug this:
> 
> 6 locks held by tar/4243:
>  #0:  (&sb->s_type->i_mutex_key#9){--..}, at: [chown_common+159/196] chown_common+0x9f/0xc4
>  #1:  (jbd_handle){--..}, at: [_end+107143484/2109740072] journal_start+0xef/0x115 [jbd]
>  #2:  (&s->s_dquot.dqptr_sem){----}, at: [dquot_transfer+154/949] dquot_transfer+0x9a/0x3b5
>  #3:  (&dquot->dq_lock){--..}, at: [dquot_acquire+48/276] dquot_acquire+0x30/0x114
>  #4:  (&s->s_dquot.dqio_mutex){--..}, at: [dquot_acquire+65/276] dquot_acquire+0x41/0x114
>  #5:  (&sb->s_type->i_mutex_key#9/4){--..}, at: [_end+107246718/2109740072] ext3_quota_write+0xb4/0x239 [ext3]
> 
> stack backtrace:
> Pid: 4243, comm: tar Not tainted 2.6.25-0.195.rc8.git1.fc9.x86_64 #1
> 
> Call Trace:
>  [print_circular_bug_tail+112/123] print_circular_bug_tail+0x70/0x7b
>  [print_circular_bug_entry+72/79] ? print_circular_bug_entry+0x48/0x4f
>  [__lock_acquire+2774/3427] __lock_acquire+0xad6/0xd63
>  [_spin_unlock_irqrestore+56/71] ? _spin_unlock_irqrestore+0x38/0x47
>  [sched_clock+80/109] ? native_sched_clock+0x50/0x6d
>  [lock_acquire+94/120] lock_acquire+0x5e/0x78
>  [_end+107219435/2109740072] ? :ext3:ext3_get_blocks_handle+0x143/0x8b1
>  [mutex_lock_nested+247/661] mutex_lock_nested+0xf7/0x295
>  [_end+107219435/2109740072] ? :ext3:ext3_get_blocks_handle+0x143/0x8b1
>  [sched_clock+80/109] ? native_sched_clock+0x50/0x6d
>  [sched_clock+80/109] ? native_sched_clock+0x50/0x6d
>  [_end+107219435/2109740072] :ext3:ext3_get_blocks_handle+0x143/0x8b1
>  [sched_clock+80/109] ? native_sched_clock+0x50/0x6d
>  [sched_clock+80/109] ? native_sched_clock+0x50/0x6d
>  [_end+107221689/2109740072] :ext3:ext3_getblk+0x64/0x194
>  [mark_held_locks+92/119] ? mark_held_locks+0x5c/0x77
>  [mutex_lock_nested+634/661] ? mutex_lock_nested+0x27a/0x295
>  [trace_hardirqs_on+241/277] ? trace_hardirqs_on+0xf1/0x115
>  [mutex_lock_nested+646/661] ? mutex_lock_nested+0x286/0x295
>  [_end+107246718/2109740072] ? :ext3:ext3_quota_write+0xb4/0x239
>  [_end+107222015/2109740072] :ext3:ext3_bread+0x16/0x82
>  [_end+107246762/2109740072] :ext3:ext3_quota_write+0xe0/0x239
>  [get_free_dqblk+181/231] get_free_dqblk+0xb5/0xe7
>  [do_insert_tree+505/1069] do_insert_tree+0x1f9/0x42d
>  [_end+107247324/2109740072] ? :ext3:ext3_quota_read+0xd9/0xfe
>  [do_insert_tree+876/1069] do_insert_tree+0x36c/0x42d
>  [_end+107247324/2109740072] ? :ext3:ext3_quota_read+0xd9/0xfe
>  [do_insert_tree+876/1069] do_insert_tree+0x36c/0x42d
>  [_end+107247324/2109740072] ? :ext3:ext3_quota_read+0xd9/0xfe
>  [do_insert_tree+876/1069] do_insert_tree+0x36c/0x42d
>  [find_tree_dqentry+487/505] ? find_tree_dqentry+0x1e7/0x1f9
>  [v2_write_dquot+54/359] v2_write_dquot+0x36/0x167
>  [v2_read_dquot+91/459] ? v2_read_dquot+0x5b/0x1cb
>  [mutex_lock_nested+646/661] ? mutex_lock_nested+0x286/0x295
>  [dquot_acquire+65/276] ? dquot_acquire+0x41/0x114
>  [dquot_acquire+164/276] dquot_acquire+0xa4/0x114
>  [_end+107256334/2109740072] :ext3:ext3_acquire_dquot+0x64/0x89
>  [dqget+665/712] dqget+0x299/0x2c8
>  [dquot_transfer+227/949] dquot_transfer+0xe3/0x3b5
>  [_end+107215161/2109740072] :ext3:ext3_setattr+0xdd/0x223
>  [notify_change+383/782] notify_change+0x17f/0x30e
>  [chown_common+171/196] chown_common+0xab/0xc4
>  [sys_chown+76/105] sys_chown+0x4c/0x69
>  [audit_syscall_exit+817/851] ? audit_syscall_exit+0x331/0x353
>  [syscall_trace_enter+181/185] ? syscall_trace_enter+0xb5/0xb9
>  [tracesys+113/218] ? tracesys+0x71/0xda
>  [tracesys+213/218] tracesys+0xd5/0xda
> 
> 
> 
> -- 
> http://www.codemonkey.org.uk
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
-- 
Jan Kara <jack@...e.cz>
SuSE CR Labs
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ