aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/aio.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/aio.c b/fs/aio.c
index d3837f607d09..eee4b4cfb66f 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -1033,6 +1033,11 @@ static inline struct aio_kiocb *aio_get_req(struct kioctx *ctx)
1033 if (unlikely(!req)) 1033 if (unlikely(!req))
1034 return NULL; 1034 return NULL;
1035 1035
1036 if (unlikely(!get_reqs_available(ctx))) {
1037 kfree(req);
1038 return NULL;
1039 }
1040
1036 percpu_ref_get(&ctx->reqs); 1041 percpu_ref_get(&ctx->reqs);
1037 req->ki_ctx = ctx; 1042 req->ki_ctx = ctx;
1038 INIT_LIST_HEAD(&req->ki_list); 1043 INIT_LIST_HEAD(&req->ki_list);
@@ -1793,13 +1798,9 @@ static int __io_submit_one(struct kioctx *ctx, const struct iocb *iocb,
1793 return -EINVAL; 1798 return -EINVAL;
1794 } 1799 }
1795 1800
1796 if (!get_reqs_available(ctx))
1797 return -EAGAIN;
1798
1799 ret = -EAGAIN;
1800 req = aio_get_req(ctx); 1801 req = aio_get_req(ctx);
1801 if (unlikely(!req)) 1802 if (unlikely(!req))
1802 goto out_put_reqs_available; 1803 return -EAGAIN;
1803 1804
1804 req->ki_filp = fget(iocb->aio_fildes); 1805 req->ki_filp = fget(iocb->aio_fildes);
1805 ret = -EBADF; 1806 ret = -EBADF;
@@ -1874,7 +1875,6 @@ static int __io_submit_one(struct kioctx *ctx, const struct iocb *iocb,
1874 1875
1875out_put_req: 1876out_put_req:
1876 iocb_destroy(req); 1877 iocb_destroy(req);
1877out_put_reqs_available:
1878 put_reqs_available(ctx, 1); 1878 put_reqs_available(ctx, 1);
1879 return ret; 1879 return ret;
1880} 1880}