Messages in this thread Patch in this message | | | From | Kent Overstreet <> | Subject | [PATCH 2/3] aio-kill-ki_retry-fix-fix | Date | Thu, 24 Jan 2013 13:43:52 -0800 |
| |
The "aio: kill ki-retry" patch was assuming that we didn't touch struct kiocb after passing it off to something that would call aio_complete() - which was wrong. So, revert the refcounting changes.
Signed-off-by: Kent Overstreet <koverstreet@google.com> --- fs/aio.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/fs/aio.c b/fs/aio.c index 0d2f39d..85d1b38 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -592,7 +592,7 @@ static inline struct kiocb *aio_get_req(struct kioctx *ctx) memset(req, 0, offsetof(struct kiocb, ki_ctx)); req->ki_ctx = ctx; - atomic_set(&req->ki_users, 1); + atomic_set(&req->ki_users, 2); return req; out_put: put_reqs_available(ctx, 1); @@ -1291,10 +1291,12 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, if (ret) goto out_put_req; + aio_put_req(req); /* drop extra ref to req */ return 0; out_put_req: put_reqs_available(ctx, 1); - aio_put_req(req); + aio_put_req(req); /* drop extra ref to req */ + aio_put_req(req); /* drop i/o ref to req */ return ret; } -- 1.7.12
| |