aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/aio.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/fs/aio.c b/fs/aio.c
index fe37a94127e7..da887604dfc5 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -1270,7 +1270,6 @@ static void io_destroy(struct kioctx *ioctx)
1270 * locking done by the above calls to ensure this consistency. 1270 * locking done by the above calls to ensure this consistency.
1271 */ 1271 */
1272 wake_up_all(&ioctx->wait); 1272 wake_up_all(&ioctx->wait);
1273 put_ioctx(ioctx); /* once for the lookup */
1274} 1273}
1275 1274
1276/* sys_io_setup: 1275/* sys_io_setup:
@@ -1307,11 +1306,9 @@ SYSCALL_DEFINE2(io_setup, unsigned, nr_events, aio_context_t __user *, ctxp)
1307 ret = PTR_ERR(ioctx); 1306 ret = PTR_ERR(ioctx);
1308 if (!IS_ERR(ioctx)) { 1307 if (!IS_ERR(ioctx)) {
1309 ret = put_user(ioctx->user_id, ctxp); 1308 ret = put_user(ioctx->user_id, ctxp);
1310 if (!ret) { 1309 if (ret)
1311 put_ioctx(ioctx); 1310 io_destroy(ioctx);
1312 return 0; 1311 put_ioctx(ioctx);
1313 }
1314 io_destroy(ioctx);
1315 } 1312 }
1316 1313
1317out: 1314out:
@@ -1329,6 +1326,7 @@ SYSCALL_DEFINE1(io_destroy, aio_context_t, ctx)
1329 struct kioctx *ioctx = lookup_ioctx(ctx); 1326 struct kioctx *ioctx = lookup_ioctx(ctx);
1330 if (likely(NULL != ioctx)) { 1327 if (likely(NULL != ioctx)) {
1331 io_destroy(ioctx); 1328 io_destroy(ioctx);
1329 put_ioctx(ioctx);
1332 return 0; 1330 return 0;
1333 } 1331 }
1334 pr_debug("EINVAL: io_destroy: invalid context id\n"); 1332 pr_debug("EINVAL: io_destroy: invalid context id\n");