aboutsummaryrefslogtreecommitdiffstats
path: root/fs/aio.c
diff options
context:
space:
mode:
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 b9d64d89a043..d09b56090aa5 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -248,6 +248,7 @@ static struct kioctx *ioctx_alloc(unsigned nr_events)
248 struct mm_struct *mm; 248 struct mm_struct *mm;
249 struct kioctx *ctx; 249 struct kioctx *ctx;
250 int did_sync = 0; 250 int did_sync = 0;
251 int err = -ENOMEM;
251 252
252 /* Prevent overflows */ 253 /* Prevent overflows */
253 if ((nr_events > (0x10000000U / sizeof(struct io_event))) || 254 if ((nr_events > (0x10000000U / sizeof(struct io_event))) ||
@@ -310,16 +311,13 @@ static struct kioctx *ioctx_alloc(unsigned nr_events)
310 return ctx; 311 return ctx;
311 312
312out_cleanup: 313out_cleanup:
313 __put_ioctx(ctx); 314 err = -EAGAIN;
314 return ERR_PTR(-EAGAIN); 315 aio_free_ring(ctx);
315
316out_freectx: 316out_freectx:
317 mmdrop(mm); 317 mmdrop(mm);
318 kmem_cache_free(kioctx_cachep, ctx); 318 kmem_cache_free(kioctx_cachep, ctx);
319 ctx = ERR_PTR(-ENOMEM); 319 dprintk("aio: error allocating ioctx %d\n", err);
320 320 return ERR_PTR(err);
321 dprintk("aio: error allocating ioctx %p\n", ctx);
322 return ctx;
323} 321}
324 322
325/* aio_cancel_all 323/* aio_cancel_all