
From: Mingming Cao <cmm@us.ibm.com>

Here is a trivial patch fixed a bug in ioctx_alloc(). If
aio_setup_ring() failed, ioctx_alloc() should pass the return error from
aio_setup_ring() back to sys_io_setup().



 fs/aio.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff -puN fs/aio.c~aio-retval-fix fs/aio.c
--- 25/fs/aio.c~aio-retval-fix	2003-04-23 00:16:24.000000000 -0700
+++ 25-akpm/fs/aio.c	2003-04-23 00:20:53.000000000 -0700
@@ -204,6 +204,7 @@ static struct kioctx *ioctx_alloc(unsign
 {
 	struct mm_struct *mm;
 	struct kioctx *ctx;
+	int ret = 0;
 
 	/* Prevent overflows */
 	if ((nr_events > (0x10000000U / sizeof(struct io_event))) ||
@@ -233,7 +234,8 @@ static struct kioctx *ioctx_alloc(unsign
 	INIT_LIST_HEAD(&ctx->run_list);
 	INIT_WORK(&ctx->wq, aio_kick_handler, ctx);
 
-	if (aio_setup_ring(ctx) < 0)
+	ret = aio_setup_ring(ctx);
+	if (unlikely(ret < 0))
 		goto out_freectx;
 
 	/* limit the number of system wide aios */
@@ -259,7 +261,7 @@ out_cleanup:
 
 out_freectx:
 	kmem_cache_free(kioctx_cachep, ctx);
-	ctx = ERR_PTR(-ENOMEM);
+	ctx = ERR_PTR(ret);
 
 	dprintk("aio: error allocating ioctx %p\n", ctx);
 	return ctx;

_
