Revision c7b285550544c22bc005ec20978472c9ac7138c6 authored by Al Viro on 08 March 2012, 17:51:19 UTC, committed by Linus Torvalds on 10 March 2012, 02:59:59 UTC
Current code has put_ioctx() called asynchronously from aio_fput_routine();
that's done *after* we have killed the request that used to pin ioctx,
so there's nothing to stop io_destroy() waiting in wait_for_all_aios()
from progressing.  As the result, we can end up with async call of
put_ioctx() being the last one and possibly happening during exit_mmap()
or elf_core_dump(), neither of which expects stray munmap() being done
to them...

We do need to prevent _freeing_ ioctx until aio_fput_routine() is done
with that, but that's all we care about - neither io_destroy() nor
exit_aio() will progress past wait_for_all_aios() until aio_fput_routine()
does really_put_req(), so the ioctx teardown won't be done until then
and we don't care about the contents of ioctx past that point.

Since actual freeing of these suckers is RCU-delayed, we don't need to
bump ioctx refcount when request goes into list for async removal.
All we need is rcu_read_lock held just over the ->ctx_lock-protected
area in aio_fput_routine().

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Reviewed-by: Jeff Moyer <jmoyer@redhat.com>
Acked-by: Benjamin LaHaise <bcrl@kvack.org>
Cc: stable@vger.kernel.org
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 86b62a2
History
File Mode Size
async_tx
Kconfig -rw-r--r-- 26.9 KB
Makefile -rw-r--r-- 3.3 KB
ablkcipher.c -rw-r--r-- 18.2 KB
aead.c -rw-r--r-- 14.0 KB
aes_generic.c -rw-r--r-- 61.9 KB
af_alg.c -rw-r--r-- 9.3 KB
ahash.c -rw-r--r-- 12.7 KB
algapi.c -rw-r--r-- 19.6 KB
algboss.c -rw-r--r-- 6.3 KB
algif_hash.c -rw-r--r-- 6.8 KB
algif_skcipher.c -rw-r--r-- 13.2 KB
ansi_cprng.c -rw-r--r-- 11.1 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.6 KB
authencesn.c -rw-r--r-- 23.4 KB
blkcipher.c -rw-r--r-- 19.4 KB
blowfish_common.c -rw-r--r-- 15.7 KB
blowfish_generic.c -rw-r--r-- 3.4 KB
camellia.c -rw-r--r-- 35.9 KB
cast5.c -rw-r--r-- 33.0 KB
cast6.c -rw-r--r-- 21.4 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-- 24.8 KB
crypto_null.c -rw-r--r-- 4.9 KB
crypto_user.c -rw-r--r-- 10.0 KB
crypto_wq.c -rw-r--r-- 968 bytes
ctr.c -rw-r--r-- 10.8 KB
cts.c -rw-r--r-- 9.8 KB
deflate.c -rw-r--r-- 5.4 KB
des_generic.c -rw-r--r-- 35.6 KB
ecb.c -rw-r--r-- 4.9 KB
eseqiv.c -rw-r--r-- 6.5 KB
fcrypt.c -rw-r--r-- 18.0 KB
fips.c -rw-r--r-- 705 bytes
gcm.c -rw-r--r-- 34.5 KB
gf128mul.c -rw-r--r-- 13.2 KB
ghash-generic.c -rw-r--r-- 3.8 KB
hmac.c -rw-r--r-- 6.9 KB
internal.h -rw-r--r-- 4.0 KB
khazad.c -rw-r--r-- 51.8 KB
krng.c -rw-r--r-- 1.5 KB
lrw.c -rw-r--r-- 9.2 KB
lzo.c -rw-r--r-- 2.5 KB
md4.c -rw-r--r-- 6.2 KB
md5.c -rw-r--r-- 3.9 KB
michael_mic.c -rw-r--r-- 3.6 KB
pcbc.c -rw-r--r-- 7.7 KB
pcompress.c -rw-r--r-- 3.0 KB
pcrypt.c -rw-r--r-- 14.7 KB
proc.c -rw-r--r-- 3.7 KB
ripemd.h -rw-r--r-- 974 bytes
rmd128.c -rw-r--r-- 10.2 KB
rmd160.c -rw-r--r-- 12.6 KB
rmd256.c -rw-r--r-- 10.5 KB
rmd320.c -rw-r--r-- 13.1 KB
rng.c -rw-r--r-- 3.3 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.6 KB
serpent_generic.c -rw-r--r-- 21.4 KB
sha1_generic.c -rw-r--r-- 3.5 KB
sha256_generic.c -rw-r--r-- 12.2 KB
sha512_generic.c -rw-r--r-- 8.7 KB
shash.c -rw-r--r-- 16.9 KB
tcrypt.c -rw-r--r-- 36.5 KB
tcrypt.h -rw-r--r-- 3.5 KB
tea.c -rw-r--r-- 7.1 KB
testmgr.c -rw-r--r-- 57.9 KB
testmgr.h -rw-r--r-- 456.4 KB
tgr192.c -rw-r--r-- 30.8 KB
twofish_common.c -rw-r--r-- 37.8 KB
twofish_generic.c -rw-r--r-- 6.3 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.9 KB
xts.c -rw-r--r-- 8.7 KB
zlib.c -rw-r--r-- 9.5 KB

back to top