Revision ee297209bf0a25c6717b7c063e76795142d32f37 authored by Xiaotian Feng on 20 December 2012, 23:05:44 UTC, committed by Linus Torvalds on 21 December 2012, 01:40:20 UTC
Lockdep found an inconsistent lock state when rcu is processing delayed work in softirq. Currently, kernel is using spin_lock/spin_unlock to protect proc_inum_ida, but proc_free_inum is called by rcu in softirq context. Use spin_lock_bh/spin_unlock_bh fix following lockdep warning. ================================= [ INFO: inconsistent lock state ] 3.7.0 #36 Not tainted --------------------------------- inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage. swapper/1/0 [HC0[0]:SC1[1]:HE1:SE0] takes: (proc_inum_lock){+.?...}, at: proc_free_inum+0x1c/0x50 {SOFTIRQ-ON-W} state was registered at: __lock_acquire+0x8ae/0xca0 lock_acquire+0x199/0x200 _raw_spin_lock+0x41/0x50 proc_alloc_inum+0x4c/0xd0 alloc_mnt_ns+0x49/0xc0 create_mnt_ns+0x25/0x70 mnt_init+0x161/0x1c7 vfs_caches_init+0x107/0x11a start_kernel+0x348/0x38c x86_64_start_reservations+0x131/0x136 x86_64_start_kernel+0x103/0x112 irq event stamp: 2993422 hardirqs last enabled at (2993422): _raw_spin_unlock_irqrestore+0x55/0x80 hardirqs last disabled at (2993421): _raw_spin_lock_irqsave+0x29/0x70 softirqs last enabled at (2993394): _local_bh_enable+0x13/0x20 softirqs last disabled at (2993395): call_softirq+0x1c/0x30 other info that might help us debug this: Possible unsafe locking scenario: CPU0 ---- lock(proc_inum_lock); <Interrupt> lock(proc_inum_lock); *** DEADLOCK *** no locks held by swapper/1/0. stack backtrace: Pid: 0, comm: swapper/1 Not tainted 3.7.0 #36 Call Trace: <IRQ> [<ffffffff810a40f1>] ? vprintk_emit+0x471/0x510 print_usage_bug+0x2a5/0x2c0 mark_lock+0x33b/0x5e0 __lock_acquire+0x813/0xca0 lock_acquire+0x199/0x200 _raw_spin_lock+0x41/0x50 proc_free_inum+0x1c/0x50 free_pid_ns+0x1c/0x50 put_pid_ns+0x2e/0x50 put_pid+0x4a/0x60 delayed_put_pid+0x12/0x20 rcu_process_callbacks+0x462/0x790 __do_softirq+0x1b4/0x3b0 call_softirq+0x1c/0x30 do_softirq+0x59/0xd0 irq_exit+0x54/0xd0 smp_apic_timer_interrupt+0x95/0xa3 apic_timer_interrupt+0x72/0x80 cpuidle_enter_tk+0x10/0x20 cpuidle_enter_state+0x17/0x50 cpuidle_idle_call+0x287/0x520 cpu_idle+0xba/0x130 start_secondary+0x2b3/0x2bc Signed-off-by: Xiaotian Feng <dannyfeng@tencent.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent c4e1849
File | Mode | Size |
---|---|---|
9p | ||
adfs | ||
affs | ||
afs | ||
autofs4 | ||
befs | ||
bfs | ||
btrfs | ||
cachefiles | ||
ceph | ||
cifs | ||
coda | ||
configfs | ||
cramfs | ||
debugfs | ||
devpts | ||
dlm | ||
ecryptfs | ||
efs | ||
exofs | ||
exportfs | ||
ext2 | ||
ext3 | ||
ext4 | ||
fat | ||
freevxfs | ||
fscache | ||
fuse | ||
gfs2 | ||
hfs | ||
hfsplus | ||
hostfs | ||
hpfs | ||
hppfs | ||
hugetlbfs | ||
isofs | ||
jbd | ||
jbd2 | ||
jffs2 | ||
jfs | ||
lockd | ||
logfs | ||
minix | ||
ncpfs | ||
nfs | ||
nfs_common | ||
nfsd | ||
nilfs2 | ||
nls | ||
notify | ||
ntfs | ||
ocfs2 | ||
omfs | ||
openpromfs | ||
proc | ||
pstore | ||
qnx4 | ||
qnx6 | ||
quota | ||
ramfs | ||
reiserfs | ||
romfs | ||
squashfs | ||
sysfs | ||
sysv | ||
ubifs | ||
udf | ||
ufs | ||
xfs | ||
Kconfig | -rw-r--r-- | 6.2 KB |
Kconfig.binfmt | -rw-r--r-- | 6.7 KB |
Makefile | -rw-r--r-- | 4.1 KB |
aio.c | -rw-r--r-- | 45.7 KB |
anon_inodes.c | -rw-r--r-- | 6.4 KB |
attr.c | -rw-r--r-- | 7.0 KB |
bad_inode.c | -rw-r--r-- | 7.7 KB |
binfmt_aout.c | -rw-r--r-- | 11.7 KB |
binfmt_elf.c | -rw-r--r-- | 57.8 KB |
binfmt_elf_fdpic.c | -rw-r--r-- | 48.5 KB |
binfmt_em86.c | -rw-r--r-- | 2.7 KB |
binfmt_flat.c | -rw-r--r-- | 26.7 KB |
binfmt_misc.c | -rw-r--r-- | 15.0 KB |
binfmt_script.c | -rw-r--r-- | 2.7 KB |
binfmt_som.c | -rw-r--r-- | 7.1 KB |
bio-integrity.c | -rw-r--r-- | 20.5 KB |
bio.c | -rw-r--r-- | 40.2 KB |
block_dev.c | -rw-r--r-- | 42.0 KB |
buffer.c | -rw-r--r-- | 87.0 KB |
char_dev.c | -rw-r--r-- | 14.0 KB |
compat.c | -rw-r--r-- | 44.7 KB |
compat_binfmt_elf.c | -rw-r--r-- | 3.6 KB |
compat_ioctl.c | -rw-r--r-- | 45.5 KB |
coredump.c | -rw-r--r-- | 16.5 KB |
coredump.h | -rw-r--r-- | 106 bytes |
dcache.c | -rw-r--r-- | 80.5 KB |
dcookies.c | -rw-r--r-- | 6.8 KB |
direct-io.c | -rw-r--r-- | 37.4 KB |
drop_caches.c | -rw-r--r-- | 1.5 KB |
eventfd.c | -rw-r--r-- | 11.3 KB |
eventpoll.c | -rw-r--r-- | 54.0 KB |
exec.c | -rw-r--r-- | 39.6 KB |
fcntl.c | -rw-r--r-- | 16.3 KB |
fhandle.c | -rw-r--r-- | 6.4 KB |
fifo.c | -rw-r--r-- | 3.2 KB |
file.c | -rw-r--r-- | 23.5 KB |
file_table.c | -rw-r--r-- | 12.2 KB |
filesystems.c | -rw-r--r-- | 6.4 KB |
fs-writeback.c | -rw-r--r-- | 39.4 KB |
fs_struct.c | -rw-r--r-- | 3.2 KB |
generic_acl.c | -rw-r--r-- | 3.9 KB |
inode.c | -rw-r--r-- | 48.7 KB |
internal.h | -rw-r--r-- | 3.0 KB |
ioctl.c | -rw-r--r-- | 15.6 KB |
ioprio.c | -rw-r--r-- | 5.0 KB |
libfs.c | -rw-r--r-- | 25.8 KB |
locks.c | -rw-r--r-- | 58.7 KB |
mbcache.c | -rw-r--r-- | 16.4 KB |
mount.h | -rw-r--r-- | 2.3 KB |
mpage.c | -rw-r--r-- | 20.0 KB |
namei.c | -rw-r--r-- | 99.0 KB |
namespace.c | -rw-r--r-- | 68.2 KB |
no-block.c | -rw-r--r-- | 688 bytes |
open.c | -rw-r--r-- | 24.3 KB |
pipe.c | -rw-r--r-- | 28.9 KB |
pnode.c | -rw-r--r-- | 8.8 KB |
pnode.h | -rw-r--r-- | 1.5 KB |
posix_acl.c | -rw-r--r-- | 9.2 KB |
proc_namespace.c | -rw-r--r-- | 7.5 KB |
read_write.c | -rw-r--r-- | 21.6 KB |
read_write.h | -rw-r--r-- | 632 bytes |
readdir.c | -rw-r--r-- | 6.8 KB |
select.c | -rw-r--r-- | 24.0 KB |
seq_file.c | -rw-r--r-- | 19.6 KB |
signalfd.c | -rw-r--r-- | 8.3 KB |
splice.c | -rw-r--r-- | 46.3 KB |
stack.c | -rw-r--r-- | 2.5 KB |
stat.c | -rw-r--r-- | 11.1 KB |
statfs.c | -rw-r--r-- | 5.2 KB |
super.c | -rw-r--r-- | 34.6 KB |
sync.c | -rw-r--r-- | 10.6 KB |
timerfd.c | -rw-r--r-- | 8.5 KB |
utimes.c | -rw-r--r-- | 5.6 KB |
xattr.c | -rw-r--r-- | 22.3 KB |
xattr_acl.c | -rw-r--r-- | 4.3 KB |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...