From: adam.manzanares@wdc.com To: viro@zeniv.linux.org.uk, bcrl@kvack.org Cc: linux-fsdevel@vger.kernel.org, linux-aio@kvack.org, linux-api@vger.kernel.org, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, Adam Manzanares <adam.manzanares@wdc.com> Subject: [PATCH v3 3/3] fs: Add aio iopriority support for block_dev Date: Tue, 8 May 2018 10:42:02 -0700 [thread overview] Message-ID: <20180508174202.2537-4-adam.manzanares@wdc.com> (raw) In-Reply-To: <20180508174202.2537-1-adam.manzanares@wdc.com> From: Adam Manzanares <adam.manzanares@wdc.com> When IOCB_FLAG_IOPRIO is set on the iocb aio_flags field, then we set the newly added kiocb ki_ioprio field to the value in the iocb aio_reqprio field. When a bio is created for an aio request by the block dev we set the priority value of the bio to the user supplied value. Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com> --- fs/aio.c | 16 ++++++++++++++++ fs/block_dev.c | 2 ++ include/linux/fs.h | 2 ++ include/uapi/linux/aio_abi.h | 1 + 4 files changed, 21 insertions(+) diff --git a/fs/aio.c b/fs/aio.c index 88d7927ffbc6..f43d1d3a2e39 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -1597,6 +1597,22 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, req->common.ki_flags |= IOCB_EVENTFD; } + if (iocb->aio_flags & IOCB_FLAG_IOPRIO) { + /* + * If the IOCB_FLAG_IOPRIO flag of aio_flags is set, then + * aio_reqprio is interpreted as an I/O scheduling + * class and priority. + */ + ret = ioprio_check_cap(iocb->aio_reqprio); + if (ret) { + pr_debug("aio ioprio check cap error\n"); + goto out_put_req; + } + + req->common.ki_ioprio = iocb->aio_reqprio; + req->common.ki_flags |= IOCB_IOPRIO; + } + ret = kiocb_set_rw_flags(&req->common, iocb->aio_rw_flags); if (unlikely(ret)) { pr_debug("EINVAL: aio_rw_flags\n"); diff --git a/fs/block_dev.c b/fs/block_dev.c index 7ec920e27065..970bef79caa6 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -355,6 +355,8 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages) bio->bi_write_hint = iocb->ki_hint; bio->bi_private = dio; bio->bi_end_io = blkdev_bio_end_io; + if (iocb->ki_flags & IOCB_IOPRIO) + bio->bi_ioprio = iocb->ki_ioprio; ret = bio_iov_iter_get_pages(bio, iter); if (unlikely(ret)) { diff --git a/include/linux/fs.h b/include/linux/fs.h index 7a90ce387e00..3415e83f6350 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -294,6 +294,7 @@ enum rw_hint { #define IOCB_SYNC (1 << 5) #define IOCB_WRITE (1 << 6) #define IOCB_NOWAIT (1 << 7) +#define IOCB_IOPRIO (1 << 8) struct kiocb { struct file *ki_filp; @@ -302,6 +303,7 @@ struct kiocb { void *private; int ki_flags; u16 ki_hint; + u16 ki_ioprio; /* See linux/ioprio.h */ } __randomize_layout; static inline bool is_sync_kiocb(struct kiocb *kiocb) diff --git a/include/uapi/linux/aio_abi.h b/include/uapi/linux/aio_abi.h index a04adbc70ddf..d4593a6062ef 100644 --- a/include/uapi/linux/aio_abi.h +++ b/include/uapi/linux/aio_abi.h @@ -54,6 +54,7 @@ enum { * is valid. */ #define IOCB_FLAG_RESFD (1 << 0) +#define IOCB_FLAG_IOPRIO (1 << 1) /* read() from /dev/aio returns these structures. */ struct io_event { -- 2.15.1 -- To unsubscribe, send a message with 'unsubscribe linux-aio' in the body to majordomo@kvack.org. For more info on Linux AIO, see: http://www.kvack.org/aio/ Don't email: <a href=mailto:"aart@kvack.org">aart@kvack.org</a>
WARNING: multiple messages have this Message-ID (diff)
From: adam.manzanares@wdc.com To: viro@zeniv.linux.org.uk, bcrl@kvack.org Cc: linux-fsdevel@vger.kernel.org, linux-aio@kvack.org, linux-api@vger.kernel.org, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, Adam Manzanares <adam.manzanares@wdc.com> Subject: [PATCH v3 3/3] fs: Add aio iopriority support for block_dev Date: Tue, 8 May 2018 10:42:02 -0700 [thread overview] Message-ID: <20180508174202.2537-4-adam.manzanares@wdc.com> (raw) In-Reply-To: <20180508174202.2537-1-adam.manzanares@wdc.com> From: Adam Manzanares <adam.manzanares@wdc.com> When IOCB_FLAG_IOPRIO is set on the iocb aio_flags field, then we set the newly added kiocb ki_ioprio field to the value in the iocb aio_reqprio field. When a bio is created for an aio request by the block dev we set the priority value of the bio to the user supplied value. Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com> --- fs/aio.c | 16 ++++++++++++++++ fs/block_dev.c | 2 ++ include/linux/fs.h | 2 ++ include/uapi/linux/aio_abi.h | 1 + 4 files changed, 21 insertions(+) diff --git a/fs/aio.c b/fs/aio.c index 88d7927ffbc6..f43d1d3a2e39 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -1597,6 +1597,22 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, req->common.ki_flags |= IOCB_EVENTFD; } + if (iocb->aio_flags & IOCB_FLAG_IOPRIO) { + /* + * If the IOCB_FLAG_IOPRIO flag of aio_flags is set, then + * aio_reqprio is interpreted as an I/O scheduling + * class and priority. + */ + ret = ioprio_check_cap(iocb->aio_reqprio); + if (ret) { + pr_debug("aio ioprio check cap error\n"); + goto out_put_req; + } + + req->common.ki_ioprio = iocb->aio_reqprio; + req->common.ki_flags |= IOCB_IOPRIO; + } + ret = kiocb_set_rw_flags(&req->common, iocb->aio_rw_flags); if (unlikely(ret)) { pr_debug("EINVAL: aio_rw_flags\n"); diff --git a/fs/block_dev.c b/fs/block_dev.c index 7ec920e27065..970bef79caa6 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -355,6 +355,8 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages) bio->bi_write_hint = iocb->ki_hint; bio->bi_private = dio; bio->bi_end_io = blkdev_bio_end_io; + if (iocb->ki_flags & IOCB_IOPRIO) + bio->bi_ioprio = iocb->ki_ioprio; ret = bio_iov_iter_get_pages(bio, iter); if (unlikely(ret)) { diff --git a/include/linux/fs.h b/include/linux/fs.h index 7a90ce387e00..3415e83f6350 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -294,6 +294,7 @@ enum rw_hint { #define IOCB_SYNC (1 << 5) #define IOCB_WRITE (1 << 6) #define IOCB_NOWAIT (1 << 7) +#define IOCB_IOPRIO (1 << 8) struct kiocb { struct file *ki_filp; @@ -302,6 +303,7 @@ struct kiocb { void *private; int ki_flags; u16 ki_hint; + u16 ki_ioprio; /* See linux/ioprio.h */ } __randomize_layout; static inline bool is_sync_kiocb(struct kiocb *kiocb) diff --git a/include/uapi/linux/aio_abi.h b/include/uapi/linux/aio_abi.h index a04adbc70ddf..d4593a6062ef 100644 --- a/include/uapi/linux/aio_abi.h +++ b/include/uapi/linux/aio_abi.h @@ -54,6 +54,7 @@ enum { * is valid. */ #define IOCB_FLAG_RESFD (1 << 0) +#define IOCB_FLAG_IOPRIO (1 << 1) /* read() from /dev/aio returns these structures. */ struct io_event { -- 2.15.1
next prev parent reply other threads:[~2018-05-08 17:42 UTC|newest] Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-05-08 17:41 [PATCH v3 0/3] AIO add per-command iopriority adam.manzanares 2018-05-08 17:41 ` adam.manzanares 2018-05-08 17:42 ` [PATCH v3 1/3] block: add ioprio_check_cap function adam.manzanares 2018-05-08 17:42 ` adam.manzanares 2018-05-08 17:42 ` [PATCH v3 2/3] fs: Convert kiocb rw_hint from enum to u16 adam.manzanares 2018-05-08 17:42 ` adam.manzanares 2018-05-09 13:34 ` Theodore Y. Ts'o 2018-05-09 13:34 ` Theodore Y. Ts'o 2018-05-09 14:23 ` Jens Axboe 2018-05-09 14:23 ` Jens Axboe 2018-05-09 15:21 ` Theodore Y. Ts'o 2018-05-09 15:21 ` Theodore Y. Ts'o 2018-05-09 15:29 ` Adam Manzanares 2018-05-09 15:29 ` Adam Manzanares 2018-05-08 17:42 ` adam.manzanares [this message] 2018-05-08 17:42 ` [PATCH v3 3/3] fs: Add aio iopriority support for block_dev adam.manzanares 2018-05-09 8:54 ` kbuild test robot 2018-05-09 8:54 ` kbuild test robot
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=20180508174202.2537-4-adam.manzanares@wdc.com \ --to=adam.manzanares@wdc.com \ --cc=bcrl@kvack.org \ --cc=linux-aio@kvack.org \ --cc=linux-api@vger.kernel.org \ --cc=linux-block@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@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: linkBe 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.