kernel_optimize_test/fs
Oleg Nesterov bb6f6dbaa4 [PATCH] do_coredump() should reset group_stop_count earlier
__group_complete_signal() sets ->group_stop_count in sig_kernel_coredump()
path and marks the target thread as ->group_exit_task.  So any thread
except group_exit_task will go to handle_group_stop()->finish_stop().

However, when group_exit_task actually starts do_coredump(), it sets
SIGNAL_GROUP_EXIT, but does not reset ->group_stop_count while killing
other threads.  If we have not yet stopped threads in the same thread
group, they all will spin in kernel mode until group_exit_task sends them
SIGKILL, because ->group_stop_count > 0 means:

	recalc_sigpending_tsk() never clears TIF_SIGPENDING

	get_signal_to_deliver() goes to handle_group_stop()

	handle_group_stop() returns when SIGNAL_GROUP_EXIT set

	syscall_exit/resume_userspace notice TIF_SIGPENDING,
	call get_signal_to_deliver() again.

So we are wasting cpu cycles, and if one of these threads is rt_task() this
may be a serious problem.

NOTE: do_coredump() holds ->mmap_sem, so not stopped threads can't escape
coredumping after clearing ->group_stop_count.

See also this thread: http://marc.theaimsgroup.com/?t=112739139900002

Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-01-08 20:13:55 -08:00
..
9p [PATCH] Fix and add EXPORT_SYMBOL(filemap_write_and_wait) 2006-01-08 20:13:47 -08:00
adfs [PATCH] changing CONFIG_LOCALVERSION rebuilds too much, for no good reason 2005-11-09 07:55:57 -08:00
affs [PATCH] kfree cleanup: fs 2005-11-07 07:54:06 -08:00
afs [PATCH] fix possible PAGE_CACHE_SHIFT overflows 2006-01-08 20:13:54 -08:00
autofs [PATCH] kfree cleanup: fs 2005-11-07 07:54:06 -08:00
autofs4 [PATCH] kfree cleanup: fs 2005-11-07 07:54:06 -08:00
befs remove unused fs/befs/attribute.c 2005-11-08 16:54:53 +01:00
bfs [PATCH] bfs iget() abuses 2005-10-04 13:22:01 -07:00
cifs [PATCH] Fix and add EXPORT_SYMBOL(filemap_write_and_wait) 2006-01-08 20:13:47 -08:00
coda [PATCH] Driver Core: fix up all callers of class_device_create() 2005-10-28 09:52:52 -07:00
configfs [PATCH] configfs: User-driven configuration filesystem 2006-01-03 11:45:28 -08:00
cramfs [PATCH] fs/cramfs/uncompress.c should #include <linux/cramfs_fs.h> 2005-09-10 10:06:35 -07:00
debugfs [PATCH] remove duplicate get_dentry functions in various places 2005-06-23 09:45:20 -07:00
devfs [PATCH] kfree cleanup: fs 2005-11-07 07:54:06 -08:00
devpts [PATCH] Generic VFS fallback for security xattrs 2005-09-05 00:05:52 -07:00
efs Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
exportfs Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ext2 [PATCH] ext2: remove duplicate newlines in ext2_fill_super 2005-11-13 18:14:17 -08:00
ext3 [PATCH] ext3: Wrong return value for EXT3_IOC_GROUP_ADD 2005-11-28 14:42:24 -08:00
fat [PATCH] fat: support a truncate() for expanding size (generic_cont_expand) 2006-01-08 20:13:47 -08:00
freevxfs [PATCH] fix possible PAGE_CACHE_SHIFT overflows 2006-01-08 20:13:54 -08:00
fuse [PATCH] fuse: check file type in lookup 2006-01-06 08:33:56 -08:00
hfs [PATCH] changing CONFIG_LOCALVERSION rebuilds too much, for no good reason 2005-11-09 07:55:57 -08:00
hfsplus [PATCH] hfsplus oops fix 2006-01-06 08:33:20 -08:00
hostfs [PATCH] uml: hostfs - fix possible PAGE_CACHE_SHIFT overflows 2005-12-29 09:48:15 -08:00
hpfs [PATCH] hpfs: remove spurious mtime update 2005-11-09 07:55:57 -08:00
hppfs [PATCH] hppfs: fix symlink error path 2005-08-26 11:39:19 -07:00
hugetlbfs [PATCH] Hugetlb: Copy on Write support 2006-01-06 08:33:23 -08:00
isofs [PATCH] kfree cleanup: fs 2005-11-07 07:54:06 -08:00
jbd [PATCH] jbd: split checkpoint lists 2006-01-06 08:33:59 -08:00
jffs [PATCH] fix possible PAGE_CACHE_SHIFT overflows 2006-01-08 20:13:54 -08:00
jffs2 [JFFS2] Fix the slab cache constructor of 'struct jffs2_inode_info' objects. 2005-11-29 16:57:17 +01:00
jfs [PATCH] Fix and add EXPORT_SYMBOL(filemap_write_and_wait) 2006-01-08 20:13:47 -08:00
lockd SUNRPC: get rid of cl_chatty 2006-01-06 14:58:56 -05:00
minix [PATCH] update filesystems for new delete_inode behavior 2005-09-09 13:57:27 -07:00
msdos [PATCH] fat: remove the unneeded vfat_find() in vfat_rename() 2005-10-30 17:37:32 -08:00
ncpfs [PATCH] add a file_permission helper 2005-11-09 07:55:59 -08:00
nfs [PATCH] Fix and add EXPORT_SYMBOL(filemap_write_and_wait) 2006-01-08 20:13:47 -08:00
nfs_common [PATCH] nfsacl: Solaris VxFS compatibility fix 2005-10-11 09:46:54 -07:00
nfsd SUNRPC: get rid of cl_chatty 2006-01-06 14:58:56 -05:00
nls [PATCH] make some things static 2005-05-05 16:36:47 -07:00
ntfs update the email address of Randy Dunlap 2006-01-03 13:37:51 +01:00
ocfs2 [PATCH] This patch contains the following cleanups: 2006-01-03 11:45:55 -08:00
openpromfs [PATCH] kfree cleanup: fs 2005-11-07 07:54:06 -08:00
partitions [PATCH] s390: cleanup Kconfig 2006-01-06 08:33:53 -08:00
proc [PATCH] slob: introduce the SLOB allocator 2006-01-08 20:13:41 -08:00
qnx4 fs/qnx4/bitmap.c: #if 0 qnx4_new_block() 2006-01-03 13:21:37 +01:00
ramfs [PATCH] NOMMU: Provide shared-writable mmap support on ramfs 2006-01-06 08:33:32 -08:00
reiserfs s/retreiv/retriev/g 2006-01-03 13:27:11 +01:00
relayfs [PATCH] relayfs: cleanup, change relayfs_file_* to relay_file_* 2006-01-08 20:13:51 -08:00
romfs [PATCH] fix possible PAGE_CACHE_SHIFT overflows 2006-01-08 20:13:54 -08:00
smbfs [PATCH] fix possible PAGE_CACHE_SHIFT overflows 2006-01-08 20:13:54 -08:00
sysfs [PATCH] sysfs: handle failures in sysfs_make_dirent 2006-01-04 16:18:09 -08:00
sysv [PATCH] fix possible PAGE_CACHE_SHIFT overflows 2006-01-08 20:13:54 -08:00
udf [PATCH] udf: remove bogus inode == NULL check in inode_bmap 2006-01-08 20:13:51 -08:00
ufs [PATCH] fs/ufs: debug mode compilation failure 2006-01-06 15:22:28 -08:00
vfat [PATCH] fat: remove the unneeded vfat_find() in vfat_rename() 2005-10-30 17:37:32 -08:00
xfs [PATCH] Fix and add EXPORT_SYMBOL(filemap_write_and_wait) 2006-01-08 20:13:47 -08:00
aio.c [PATCH] rcu file: use atomic primitives 2006-01-08 20:13:48 -08:00
attr.c [PATCH] Fix some problems with truncate and mtime semantics. 2006-01-08 20:13:52 -08:00
bad_inode.c [PATCH] make some things static 2005-05-05 16:36:47 -07:00
binfmt_aout.c [PATCH] mm: mm_init set_mm_counters 2005-10-29 21:40:38 -07:00
binfmt_elf_fdpic.c [PATCH] kfree cleanup: fs 2005-11-07 07:54:06 -08:00
binfmt_elf.c [PATCH] kfree cleanup: fs 2005-11-07 07:54:06 -08:00
binfmt_em86.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
binfmt_flat.c [PATCH] mm: mm_init set_mm_counters 2005-10-29 21:40:38 -07:00
binfmt_misc.c [PATCH] add a file_permission helper 2005-11-09 07:55:59 -08:00
binfmt_script.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
binfmt_som.c [PATCH] mm: mm_init set_mm_counters 2005-10-29 21:40:38 -07:00
bio.c [BLOCK] bio: check for same page merge possibilities in __bio_add_page() 2006-01-06 09:43:28 +01:00
block_dev.c [PATCH] block: add unlocked_ioctl support for block devices 2005-06-23 09:45:32 -07:00
buffer.c [PATCH] fix possible PAGE_CACHE_SHIFT overflows 2006-01-08 20:13:54 -08:00
char_dev.c [PATCH] cdev: cdev_put oops 2005-07-12 16:01:02 -07:00
compat_ioctl.c [COMPAT] net: SIOCGIFCONF data corruption 2005-11-20 13:41:59 -08:00
compat.c [PATCH] Fix overflow tests for compat_sys_fcntl64 locking 2006-01-08 20:13:52 -08:00
dcache.c [PATCH] Remove hlist_for_each_rcu() API, convert existing use to hlist_for_each_entry_rcu 2005-11-07 07:53:35 -08:00
dcookies.c [PATCH] dcookies.c: use proper refcounting functions 2005-07-07 18:23:52 -07:00
direct-io.c [PATCH] core remove PageReserved 2005-10-29 21:40:39 -07:00
dnotify.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dquot.c [PATCH] Fix oops in vfs_quotaon_mount() 2005-11-28 14:42:26 -08:00
drop_caches.c [PATCH] drop-pagecache 2006-01-08 20:12:40 -08:00
eventpoll.c [PATCH] epoll: handle timeout overflow 2005-09-28 07:46:41 -07:00
exec.c [PATCH] do_coredump() should reset group_stop_count earlier 2006-01-08 20:13:55 -08:00
fcntl.c [PATCH] files: lock-free fd look-up 2005-09-09 13:57:55 -07:00
fifo.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
file_table.c [PATCH] rcu file: use atomic primitives 2006-01-08 20:13:48 -08:00
file.c [PATCH] Fix the fdtable freeing in the case of vmalloced fdset/arrays 2005-09-14 12:38:26 -07:00
filesystems.c [PATCH] fix missing includes 2005-10-30 17:37:32 -08:00
fs-writeback.c [PATCH] kernel-docs: fix kernel-doc format problems 2005-11-07 07:53:55 -08:00
inode.c [PATCH] fix nr_unused accounting, and avoid recursing in iput with I_WILL_FREE set 2005-10-30 17:37:26 -08:00
inotify.c [PATCH] inotify: add two inotify_add_watch flags 2005-12-12 08:57:43 -08:00
ioctl.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ioprio.c fs/ioprio.c should #include <linux/syscalls.h> 2005-11-08 16:57:02 +01:00
Kconfig [PATCH] o Update Kconfig documentation to reflect support for readonly mounts. 2006-01-03 11:45:57 -08:00
Kconfig.binfmt [PATCH] frv: suppress configuration of certain features for FRV 2006-01-08 20:13:36 -08:00
libfs.c [PATCH] fix fsync(dir) return value for ram-based filesystems 2005-06-25 16:24:38 -07:00
locks.c NLM: Further cancel fixes 2006-01-06 14:58:54 -05:00
Makefile [PATCH] drop-pagecache 2006-01-08 20:12:40 -08:00
mbcache.c [PATCH] kfree cleanup: fs 2005-11-07 07:54:06 -08:00
mpage.c [PATCH] fix possible PAGE_CACHE_SHIFT overflows 2006-01-08 20:13:54 -08:00
namei.c [PATCH] Fix some problems with truncate and mtime semantics. 2006-01-08 20:13:52 -08:00
namespace.c [PATCH] add a vfs_permission helper 2005-11-09 07:55:58 -08:00
nfsctl.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
open.c [PATCH] Fix some problems with truncate and mtime semantics. 2006-01-08 20:13:52 -08:00
pipe.c [PATCH] sched: TASK_NONINTERACTIVE 2005-09-10 10:06:22 -07:00
pnode.c [PATCH] unbindable mounts 2005-11-07 18:18:11 -08:00
pnode.h [PATCH] unbindable mounts 2005-11-07 18:18:11 -08:00
posix_acl.c [PATCH] gfp flags annotations - part 1 2005-10-08 15:00:57 -07:00
quota_v1.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
quota_v2.c [PATCH] quota: possible bug in quota format v2 support 2005-04-16 15:25:47 -07:00
quota.c [PATCH] quota: small cleanups 2005-11-07 07:53:39 -08:00
read_write.c Relax the rw_verify_area() error checking. 2006-01-04 16:20:40 -08:00
readdir.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
select.c [PATCH] files: lock-free fd look-up 2005-09-09 13:57:55 -07:00
seq_file.c [PATCH] allow callers of seq_open do allocation themselves 2005-11-07 18:18:09 -08:00
stat.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
super.c [PATCH] remove mount/umount uevents from superblock handling 2006-01-04 16:18:07 -08:00
xattr_acl.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
xattr.c [PATCH] Fix listxattr() for generic security attributes 2005-12-12 08:57:42 -08:00