53 lines
1.6 KiB
Diff
53 lines
1.6 KiB
Diff
From: Jens Axboe <axboe@kernel.dk>
|
|
Date: Tue, 4 Dec 2018 09:44:49 -0700
|
|
Subject: [04/14] aio: don't zero entire aio_kiocb aio_get_req()
|
|
Origin: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit?id=ef529eead8cfc11c051b90d239e7137f7141ea94
|
|
|
|
commit 2bc4ca9bb600cbe36941da2b2a67189fc4302a04 upstream.
|
|
|
|
It's 192 bytes, fairly substantial. Most items don't need to be cleared,
|
|
especially not upfront. Clear the ones we do need to clear, and leave
|
|
the other ones for setup when the iocb is prepared and submitted.
|
|
|
|
Reviewed-by: Christoph Hellwig <hch@lst.de>
|
|
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
|
Cc: Guenter Roeck <linux@roeck-us.net>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
---
|
|
fs/aio.c | 9 +++++++--
|
|
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/fs/aio.c b/fs/aio.c
|
|
index b9e0df08277b..2547f17b4fef 100644
|
|
--- a/fs/aio.c
|
|
+++ b/fs/aio.c
|
|
@@ -1010,14 +1010,15 @@ static inline struct aio_kiocb *aio_get_req(struct kioctx *ctx)
|
|
{
|
|
struct aio_kiocb *req;
|
|
|
|
- req = kmem_cache_alloc(kiocb_cachep, GFP_KERNEL|__GFP_ZERO);
|
|
+ req = kmem_cache_alloc(kiocb_cachep, GFP_KERNEL);
|
|
if (unlikely(!req))
|
|
return NULL;
|
|
|
|
percpu_ref_get(&ctx->reqs);
|
|
+ req->ki_ctx = ctx;
|
|
INIT_LIST_HEAD(&req->ki_list);
|
|
refcount_set(&req->ki_refcnt, 0);
|
|
- req->ki_ctx = ctx;
|
|
+ req->ki_eventfd = NULL;
|
|
return req;
|
|
}
|
|
|
|
@@ -1738,6 +1739,10 @@ static ssize_t aio_poll(struct aio_kiocb *aiocb, struct iocb *iocb)
|
|
if (unlikely(!req->file))
|
|
return -EBADF;
|
|
|
|
+ req->head = NULL;
|
|
+ req->woken = false;
|
|
+ req->cancelled = false;
|
|
+
|
|
apt.pt._qproc = aio_poll_queue_proc;
|
|
apt.pt._key = req->events;
|
|
apt.iocb = aiocb;
|