diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-03-06 19:33:22 (GMT) |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-03-21 01:29:38 (GMT) |
commit | e23754f880f10124f0a2848f9d17e361a295378e (patch) | |
tree | c4e3b11b21e24227179f04314ed0b774524f8c28 /fs/aio.c | |
parent | 5d026c7242201e7c9d0e12fcb2bcaffead9d59fd (diff) | |
download | linux-e23754f880f10124f0a2848f9d17e361a295378e.tar.xz |
aio: don't bother with async freeing on failure in ioctx_alloc()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/aio.c')
-rw-r--r-- | fs/aio.c | 12 |
1 files changed, 5 insertions, 7 deletions
@@ -248,6 +248,7 @@ static struct kioctx *ioctx_alloc(unsigned nr_events) struct mm_struct *mm; struct kioctx *ctx; int did_sync = 0; + int err = -ENOMEM; /* Prevent overflows */ if ((nr_events > (0x10000000U / sizeof(struct io_event))) || @@ -310,16 +311,13 @@ static struct kioctx *ioctx_alloc(unsigned nr_events) return ctx; out_cleanup: - __put_ioctx(ctx); - return ERR_PTR(-EAGAIN); - + err = -EAGAIN; + aio_free_ring(ctx); out_freectx: mmdrop(mm); kmem_cache_free(kioctx_cachep, ctx); - ctx = ERR_PTR(-ENOMEM); - - dprintk("aio: error allocating ioctx %p\n", ctx); - return ctx; + dprintk("aio: error allocating ioctx %d\n", err); + return ERR_PTR(err); } /* aio_cancel_all |