summaryrefslogtreecommitdiff
path: root/fs/aio.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2012-03-06 19:33:22 (GMT)
committerAl Viro <viro@zeniv.linux.org.uk>2012-03-21 01:29:38 (GMT)
commite23754f880f10124f0a2848f9d17e361a295378e (patch)
treec4e3b11b21e24227179f04314ed0b774524f8c28 /fs/aio.c
parent5d026c7242201e7c9d0e12fcb2bcaffead9d59fd (diff)
downloadlinux-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.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/fs/aio.c b/fs/aio.c
index b9d64d8..d09b560 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -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