Message ID | 1642660946-60244-1-git-send-email-chenxiang66@hisilicon.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | aio: Adjust the position of get_reqs_available() in aio_get_req() | expand |
On Thu, Jan 20, 2022 at 02:42:26PM +0800, chenxiang wrote: > From: Xiang Chen <chenxiang66@hisilicon.com> > > Right now allocating aio_kiocb is in front of get_reqs_available(), > then need to free aio_kiocb if get_reqs_available() is failed. > Put get_reqs_availabe() in front of allocating aio_kiocb to avoid > freeing aio_kiocb if get_reqs_available() is failed. Except for the fact that this completely missed undoing get_reqs_available, how is that order any better?
在 2022/1/20 17:03, Christoph Hellwig 写道: > On Thu, Jan 20, 2022 at 02:42:26PM +0800, chenxiang wrote: >> From: Xiang Chen <chenxiang66@hisilicon.com> >> >> Right now allocating aio_kiocb is in front of get_reqs_available(), >> then need to free aio_kiocb if get_reqs_available() is failed. >> Put get_reqs_availabe() in front of allocating aio_kiocb to avoid >> freeing aio_kiocb if get_reqs_available() is failed. > Except for the fact that this completely missed undoing > get_reqs_available, how is that order any better? Forgot that put_reqs_avaiable() is required if so, and please ignore the patch.
diff --git a/fs/aio.c b/fs/aio.c index 9c81cf611d65..79f8ea31a696 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -1025,14 +1025,12 @@ static inline struct aio_kiocb *aio_get_req(struct kioctx *ctx) { struct aio_kiocb *req; - req = kmem_cache_alloc(kiocb_cachep, GFP_KERNEL); - if (unlikely(!req)) + if (unlikely(!get_reqs_available(ctx))) return NULL; - if (unlikely(!get_reqs_available(ctx))) { - kmem_cache_free(kiocb_cachep, req); + req = kmem_cache_alloc(kiocb_cachep, GFP_KERNEL); + if (unlikely(!req)) return NULL; - } percpu_ref_get(&ctx->reqs); req->ki_ctx = ctx;