From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexander Beregalov Subject: 20090529: sysfs/reiserfs: possible circular locking dependency Date: Sat, 30 May 2009 19:33:03 +0400 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Return-path: Received: from mail-bw0-f222.google.com ([209.85.218.222]:46122 "EHLO mail-bw0-f222.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932277AbZE3PdD (ORCPT ); Sat, 30 May 2009 11:33:03 -0400 Received: by bwz22 with SMTP id 22so6669251bwz.37 for ; Sat, 30 May 2009 08:33:04 -0700 (PDT) Sender: linux-next-owner@vger.kernel.org List-ID: To: linux-next , Greg Kroah-Hartman , Frederic Weisbecker Hi Here is a boot process. udev: starting version 141 [ INFO: possible circular locking dependency detected ] 2.6.30-rc7-next-20090529-06589-g7701864 #6 ------------------------------------------------------- udevadm/708 is trying to acquire lock: (&mm->mmap_sem){++++++}, at: [] might_fault+0x52/0xa0 but task is already holding lock: (sysfs_mutex){+.+.+.}, at: [] sysfs_readdir+0x56/0x200 which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #3 (sysfs_mutex){+.+.+.}: [] __lock_acquire+0xcca/0x10b0 [] lock_acquire+0x74/0x90 [] __mutex_lock_common+0x50/0x430 [] mutex_lock_nested+0x33/0x40 [] sysfs_addrm_start+0x2c/0xb0 [] create_dir+0x40/0x80 [] sysfs_create_dir+0x2b/0x50 [] kobject_add_internal+0xc1/0x220 [] kobject_add_varg+0x31/0x50 [] kobject_add+0x2c/0x60 [] device_add+0xf1/0x560 [] add_partition+0x135/0x240 [] rescan_partitions+0x23f/0x320 [] __blkdev_get+0x153/0x330 [] blkdev_get+0xa/0x10 [] register_disk+0x10a/0x130 [] add_disk+0xd9/0x130 [] sd_probe_async+0x19a/0x280 [] async_thread+0xd0/0x230 [] kthread+0x43/0x80 [] kernel_thread_helper+0x7/0x10 [] 0xffffffff -> #2 (&bdev->bd_mutex){+.+.+.}: [] __lock_acquire+0xcca/0x10b0 [] lock_acquire+0x74/0x90 [] __mutex_lock_common+0x50/0x430 [] mutex_lock_nested+0x33/0x40 [] __blkdev_get+0x33/0x330 [] blkdev_get+0xa/0x10 [] open_by_devnum+0x21/0x50 [] journal_init+0x22e/0x19a0 [] reiserfs_fill_super+0x3b1/0x1020 [] get_sb_bdev+0x12b/0x150 [] get_super_block+0x21/0x30 [] vfs_kern_mount+0x3a/0xa0 [] do_kern_mount+0x39/0xd0 [] do_mount+0x3b8/0x770 [] sys_mount+0x84/0xb0 [] mount_block_root+0xd1/0x25e [] mount_root+0x59/0x5f [] prepare_namespace+0xf0/0x16c [] kernel_init+0xd8/0xf1 [] kernel_thread_helper+0x7/0x10 [] 0xffffffff -> #1 (&REISERFS_SB(s)->lock){+.+.+.}: [] __lock_acquire+0xcca/0x10b0 [] lock_acquire+0x74/0x90 [] __mutex_lock_common+0x50/0x430 [] mutex_lock_nested+0x33/0x40 [] reiserfs_write_lock_once+0x1e/0x40 [] reiserfs_get_block+0x66/0x1530 [] do_mpage_readpage+0x340/0x490 [] mpage_readpages+0xa6/0xe0 [] reiserfs_readpages+0x19/0x20 [] __do_page_cache_readahead+0x13f/0x200 [] do_page_cache_readahead+0x4e/0x70 [] filemap_fault+0x30f/0x430 [] __do_fault+0x3d/0x3a0 [] handle_mm_fault+0x100/0x590 [] do_page_fault+0x121/0x280 [] error_code+0x6a/0x70 [] load_elf_binary+0x9d0/0x19f0 [] search_binary_handler+0x163/0x2f0 [] do_execve+0x1fd/0x270 [] sys_execve+0x3e/0x70 [] syscall_call+0x7/0xb [] 0xffffffff -> #0 (&mm->mmap_sem){++++++}: [] __lock_acquire+0xd7e/0x10b0 [] lock_acquire+0x74/0x90 [] might_fault+0x83/0xa0 [] copy_to_user+0x36/0x130 [] filldir64+0xa4/0xf0 [] sysfs_readdir+0x116/0x200 [] vfs_readdir+0x7e/0xa0 [] sys_getdents64+0x69/0xb0 [] sysenter_do_call+0x12/0x36 [] 0xffffffff other info that might help us debug this: 2 locks held by udevadm/708: #0: (&type->i_mutex_dir_key){+.+.+.}, at: [] vfs_readdir+0x4f/0xa0 #1: (sysfs_mutex){+.+.+.}, at: [] sysfs_readdir+0x56/0x200 stack backtrace: Pid: 708, comm: udevadm Not tainted 2.6.30-rc7-next-20090529-06589-g7701864 #6 Call Trace: [] ? printk+0x18/0x1e [] print_circular_bug_tail+0x8c/0xe0 [] ? print_circular_bug_entry+0x4b/0x50 [] __lock_acquire+0xd7e/0x10b0 [] ? might_fault+0x52/0xa0 [] lock_acquire+0x74/0x90 [] ? might_fault+0x52/0xa0 [] might_fault+0x83/0xa0 [] ? might_fault+0x52/0xa0 [] copy_to_user+0x36/0x130 [] filldir64+0xa4/0xf0 [] sysfs_readdir+0x116/0x200 [] ? filldir64+0x0/0xf0 [] vfs_readdir+0x7e/0xa0 [] ? filldir64+0x0/0xf0 [] sys_getdents64+0x69/0xb0 [] sysenter_do_call+0x12/0x36