https://github.com/torvalds/linux
Revision 9398180097e359646d46083c3e079a54e20bee82 authored by Tejun Heo on 17 November 2009, 22:06:20 UTC, committed by Linus Torvalds on 18 November 2009, 01:40:33 UTC
Commit 65a64464349883891e21e74af16c05d6e1eeb4e9 ("HWPOISON: Allow
schedule_on_each_cpu() from keventd") which allows schedule_on_each_cpu()
to be called from keventd added a race condition.  schedule_on_each_cpu()
may race with cpu hotplug and end up executing the function twice on a
cpu.

Fix it by moving direct execution into the section protected with
get/put_online_cpus().  While at it, update code such that direct
execution is done after works have been scheduled for all other cpus and
drop unnecessary cpu != orig test from flush loop.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Andi Kleen <ak@linux.intel.com>
Acked-by: Oleg Nesterov <oleg@redhat.com>
Cc: Ingo Molnar <mingo@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent e131933
History
Tip revision: 9398180097e359646d46083c3e079a54e20bee82 authored by Tejun Heo on 17 November 2009, 22:06:20 UTC
workqueue: fix race condition in schedule_on_each_cpu()
Tip revision: 9398180
File Mode Size
async_tx
Kconfig -rw-r--r-- 22.9 KB
Makefile -rw-r--r-- 3.0 KB
ablkcipher.c -rw-r--r-- 9.9 KB
aead.c -rw-r--r-- 12.6 KB
aes_generic.c -rw-r--r-- 61.9 KB
ahash.c -rw-r--r-- 12.1 KB
algapi.c -rw-r--r-- 19.0 KB
algboss.c -rw-r--r-- 6.2 KB
ansi_cprng.c -rw-r--r-- 9.6 KB
anubis.c -rw-r--r-- 27.8 KB
api.c -rw-r--r-- 13.4 KB
arc4.c -rw-r--r-- 2.0 KB
authenc.c -rw-r--r-- 19.4 KB
blkcipher.c -rw-r--r-- 18.6 KB
blowfish.c -rw-r--r-- 17.5 KB
camellia.c -rw-r--r-- 35.1 KB
cast5.c -rw-r--r-- 34.1 KB
cast6.c -rw-r--r-- 21.5 KB
cbc.c -rw-r--r-- 7.4 KB
ccm.c -rw-r--r-- 21.5 KB
chainiv.c -rw-r--r-- 8.6 KB
cipher.c -rw-r--r-- 3.3 KB
compress.c -rw-r--r-- 1.3 KB
crc32c.c -rw-r--r-- 8.0 KB
cryptd.c -rw-r--r-- 18.9 KB
crypto_null.c -rw-r--r-- 4.9 KB
crypto_wq.c -rw-r--r-- 896 bytes
ctr.c -rw-r--r-- 10.8 KB
cts.c -rw-r--r-- 9.8 KB
deflate.c -rw-r--r-- 5.5 KB
des_generic.c -rw-r--r-- 35.4 KB
digest.c -rw-r--r-- 5.7 KB
ecb.c -rw-r--r-- 4.9 KB
eseqiv.c -rw-r--r-- 6.7 KB
fcrypt.c -rw-r--r-- 18.0 KB
fips.c -rw-r--r-- 705 bytes
gcm.c -rw-r--r-- 26.6 KB
gf128mul.c -rw-r--r-- 13.2 KB
ghash-generic.c -rw-r--r-- 3.7 KB
hash.c -rw-r--r-- 4.8 KB
hmac.c -rw-r--r-- 6.9 KB
internal.h -rw-r--r-- 3.9 KB
khazad.c -rw-r--r-- 51.8 KB
krng.c -rw-r--r-- 1.5 KB
lrw.c -rw-r--r-- 7.6 KB
lzo.c -rw-r--r-- 2.5 KB
md4.c -rw-r--r-- 6.1 KB
md5.c -rw-r--r-- 7.2 KB
michael_mic.c -rw-r--r-- 3.6 KB
pcbc.c -rw-r--r-- 7.7 KB
pcompress.c -rw-r--r-- 2.5 KB
proc.c -rw-r--r-- 4.0 KB
ripemd.h -rw-r--r-- 974 bytes
rmd128.c -rw-r--r-- 10.1 KB
rmd160.c -rw-r--r-- 12.6 KB
rmd256.c -rw-r--r-- 10.5 KB
rmd320.c -rw-r--r-- 13.0 KB
rng.c -rw-r--r-- 2.8 KB
salsa20_generic.c -rw-r--r-- 6.7 KB
scatterwalk.c -rw-r--r-- 2.9 KB
seed.c -rw-r--r-- 17.4 KB
seqiv.c -rw-r--r-- 8.5 KB
serpent.c -rw-r--r-- 19.8 KB
sha1_generic.c -rw-r--r-- 3.4 KB
sha256_generic.c -rw-r--r-- 12.2 KB
sha512_generic.c -rw-r--r-- 8.8 KB
shash.c -rw-r--r-- 16.1 KB
tcrypt.c -rw-r--r-- 20.0 KB
tcrypt.h -rw-r--r-- 2.3 KB
tea.c -rw-r--r-- 7.1 KB
testmgr.c -rw-r--r-- 51.4 KB
testmgr.h -rw-r--r-- 309.6 KB
tgr192.c -rw-r--r-- 30.8 KB
twofish.c -rw-r--r-- 6.3 KB
twofish_common.c -rw-r--r-- 37.7 KB
vmac.c -rw-r--r-- 17.9 KB
wp512.c -rw-r--r-- 60.1 KB
xcbc.c -rw-r--r-- 7.2 KB
xor.c -rw-r--r-- 3.8 KB
xts.c -rw-r--r-- 7.1 KB
zlib.c -rw-r--r-- 9.5 KB

back to top