From: Jens Axboe <axboe@kernel.dk>
To: linux-fsdevel@vger.kernel.org, linux-aio@kvack.org
Cc: hch@lst.de, viro@zeniv.linux.org.uk, Jens Axboe <axboe@kernel.dk>
Subject: [PATCH 14/22] aio: pass in user index to __io_submit_one()
Date: Tue, 18 Dec 2018 08:42:22 -0700 [thread overview]
Message-ID: <20181218154230.3120-15-axboe@kernel.dk> (raw)
In-Reply-To: <20181218154230.3120-1-axboe@kernel.dk>
This is used for the user iocb pointer right now, but in preparation
for having iocbs not reside in userspace, unionize with a ki_index
and pass that in instead.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
fs/aio.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/fs/aio.c b/fs/aio.c
index 4895b971150c..bec5df2108b2 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -207,7 +207,11 @@ struct aio_kiocb {
struct kioctx *ki_ctx;
kiocb_cancel_fn *ki_cancel;
- struct iocb __user *ki_user_iocb; /* user's aiocb */
+ union {
+ struct iocb __user *ki_user_iocb; /* user's aiocb */
+ unsigned long ki_index;
+ };
+
__u64 ki_user_data; /* user's data for completion */
struct list_head ki_list; /* the aio core uses this
@@ -1201,7 +1205,7 @@ static void iocb_put_many(struct kioctx *ctx, void **iocbs, int *nr)
static void aio_fill_event(struct io_event *ev, struct aio_kiocb *iocb,
long res, long res2)
{
- ev->obj = (u64)(unsigned long)iocb->ki_user_iocb;
+ ev->obj = iocb->ki_index;
ev->data = iocb->ki_user_data;
ev->res = res;
ev->res2 = res2;
@@ -2303,7 +2307,7 @@ static ssize_t aio_poll(struct aio_kiocb *aiocb, const struct iocb *iocb)
}
static int __io_submit_one(struct kioctx *ctx, const struct iocb *iocb,
- struct iocb __user *user_iocb,
+ unsigned long ki_index,
struct aio_submit_state *state, bool compat)
{
struct aio_kiocb *req;
@@ -2350,14 +2354,17 @@ static int __io_submit_one(struct kioctx *ctx, const struct iocb *iocb,
}
if (aio_ctx_supports_cancel(ctx)) {
+ struct iocb __user *user_iocb = (struct iocb __user *) ki_index;
+
ret = put_user(KIOCB_KEY, &user_iocb->aio_key);
if (unlikely(ret)) {
pr_debug("EFAULT: aio_key\n");
goto out_put_req;
}
- }
+ req->ki_user_iocb = user_iocb;
+ } else
+ req->ki_index = ki_index;
- req->ki_user_iocb = user_iocb;
req->ki_user_data = iocb->aio_data;
ret = -EINVAL;
@@ -2423,12 +2430,13 @@ static int __io_submit_one(struct kioctx *ctx, const struct iocb *iocb,
static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
struct aio_submit_state *state, bool compat)
{
+ unsigned long ki_index = (unsigned long) user_iocb;
struct iocb iocb;
if (unlikely(copy_from_user(&iocb, user_iocb, sizeof(iocb))))
return -EFAULT;
- return __io_submit_one(ctx, &iocb, user_iocb, state, compat);
+ return __io_submit_one(ctx, &iocb, ki_index, state, compat);
}
#ifdef CONFIG_BLOCK
--
2.17.1
next prev parent reply other threads:[~2018-12-18 15:43 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-18 15:42 [PATCHSET v9] Support for polled and buffered aio (and more) Jens Axboe
2018-12-18 15:42 ` [PATCH 01/22] fs: add an iopoll method to struct file_operations Jens Axboe
2018-12-18 15:42 ` [PATCH 02/22] block: add REQ_HIPRI_ASYNC Jens Axboe
2018-12-21 11:20 ` Christoph Hellwig
2018-12-21 14:33 ` Jens Axboe
2018-12-18 15:42 ` [PATCH 03/22] block: wire up block device iopoll method Jens Axboe
2018-12-18 15:42 ` [PATCH 04/22] block: use REQ_HIPRI_ASYNC for non-sync polled IO Jens Axboe
2018-12-18 15:42 ` [PATCH 05/22] iomap: wire up the iopoll method Jens Axboe
2018-12-18 15:42 ` [PATCH 06/22] aio: add io_setup2() system call Jens Axboe
2018-12-21 11:21 ` Christoph Hellwig
2018-12-18 15:42 ` [PATCH 07/22] aio: support for IO polling Jens Axboe
2018-12-21 11:25 ` Christoph Hellwig
2018-12-21 14:28 ` Jens Axboe
2018-12-18 15:42 ` [PATCH 08/22] aio: add submission side request cache Jens Axboe
2018-12-21 11:28 ` Christoph Hellwig
2018-12-21 15:37 ` Jens Axboe
2018-12-21 15:42 ` Jens Axboe
2018-12-18 15:42 ` [PATCH 09/22] fs: add fget_many() and fput_many() Jens Axboe
2018-12-18 15:42 ` [PATCH 10/22] aio: use fget/fput_many() for file references Jens Axboe
2018-12-18 15:42 ` [PATCH 11/22] aio: split iocb init from allocation Jens Axboe
2018-12-18 15:42 ` [PATCH 12/22] aio: batch aio_kiocb allocation Jens Axboe
2018-12-18 15:42 ` [PATCH 13/22] aio: split old ring complete out from aio_complete() Jens Axboe
2018-12-18 15:42 ` Jens Axboe [this message]
2018-12-18 15:42 ` [PATCH 15/22] aio: add support for submission/completion rings Jens Axboe
2018-12-18 15:42 ` [PATCH 16/22] block: add BIO_HOLD_PAGES flag Jens Axboe
2018-12-21 11:30 ` Christoph Hellwig
2018-12-21 14:22 ` Jens Axboe
2018-12-18 15:42 ` [PATCH 17/22] block: implement bio helper to add iter bvec pages to bio Jens Axboe
2018-12-21 11:32 ` Christoph Hellwig
2018-12-21 14:21 ` Jens Axboe
2018-12-18 15:42 ` [PATCH 18/22] aio: add support for pre-mapped user IO buffers Jens Axboe
2018-12-18 15:42 ` [PATCH 19/22] aio: support kernel side submission for aio with SCQRING Jens Axboe
2018-12-18 15:42 ` [PATCH 20/22] aio: enable polling for IOCTX_FLAG_SQTHREAD Jens Axboe
2018-12-18 15:42 ` [PATCH 21/22] aio: utilize io_event->res2 for CQ ring Jens Axboe
2018-12-18 15:42 ` [PATCH 22/22] aio: add my copyright Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181218154230.3120-15-axboe@kernel.dk \
--to=axboe@kernel.dk \
--cc=hch@lst.de \
--cc=linux-aio@kvack.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.