* [PATCH v5 0/5] AIO add per-command iopriority
@ 2018-05-21 16:01 adam.manzanares
2018-05-21 16:01 ` [PATCH v5 1/5] block: add ioprio_check_cap function adam.manzanares
` (5 more replies)
0 siblings, 6 replies; 18+ messages in thread
From: adam.manzanares @ 2018-05-21 16:01 UTC (permalink / raw)
To: viro, linux-fsdevel, axboe, bcrl
Cc: tglx, mingo, pombredanne, kstewart, gregkh, bigeasy, jack,
darrick.wong, rgoldwyn, linux-block, linux-kernel, linux-aio,
linux-api, hch, Adam Manzanares
From: Adam Manzanares <adam.manzanares@wdc.com>
This is the per-I/O equivalent of the ioprio_set system call.
See the following link for performance implications on a SATA HDD:
https://lkml.org/lkml/2016/12/6/495
First patch factors ioprio_check_cap function out of ioprio_set system call to
also be used by the aio ioprio interface.
Second patch converts kiocb ki_hint field to a u16 to avoid kiocb bloat.
Third patch passes ioprio hint from aio iocb to kiocb and inititalizes kiocb
ioprio value appropriately when it is not explicitly set.
Fourth patch enables the feature for blkdev.
Fifth patch enables the feature for iomap direct IO
Note: this work is based on top of linux-vfs/for-next
v2: merge patches
use IOCB_FLAG_IOPRIO
validate intended use with IOCB_IOPRIO
add linux-api and linux-block to cc
v3: add ioprio_check_cap function
convert kiocb ki_hint to u16
use ioprio_check_cap when adding ioprio to kiocb in aio.c
v4: handle IOCB_IOPRIO in aio_prep_rw
note patch 3 depends on patch 1 in commit msg
v5: rename ki_hint_valid -> ki_hint_validate
remove ki_hint_validate comment and whitespace
remove IOCB_IOPRIO flag
initialize kiocb to have no priority
Adam Manzanares (5):
block: add ioprio_check_cap function
fs: Convert kiocb rw_hint from enum to u16
fs: Add aio iopriority support
fs: blkdev set bio prio from kiocb prio
fs: iomap dio set bio prio from kiocb prio
block/ioprio.c | 22 ++++++++++++++++------
drivers/block/loop.c | 3 +++
fs/aio.c | 16 ++++++++++++++++
fs/block_dev.c | 1 +
fs/iomap.c | 1 +
include/linux/fs.h | 16 ++++++++++++++--
include/linux/ioprio.h | 2 ++
include/uapi/linux/aio_abi.h | 1 +
8 files changed, 54 insertions(+), 8 deletions(-)
--
2.15.1
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v5 1/5] block: add ioprio_check_cap function
2018-05-21 16:01 [PATCH v5 0/5] AIO add per-command iopriority adam.manzanares
@ 2018-05-21 16:01 ` adam.manzanares
2018-05-21 20:58 ` Jeff Moyer
2018-05-21 16:01 ` [PATCH v5 2/5] fs: Convert kiocb rw_hint from enum to u16 adam.manzanares
` (4 subsequent siblings)
5 siblings, 1 reply; 18+ messages in thread
From: adam.manzanares @ 2018-05-21 16:01 UTC (permalink / raw)
To: viro, linux-fsdevel, axboe, bcrl
Cc: tglx, mingo, pombredanne, kstewart, gregkh, bigeasy, jack,
darrick.wong, rgoldwyn, linux-block, linux-kernel, linux-aio,
linux-api, hch, Adam Manzanares
From: Adam Manzanares <adam.manzanares@wdc.com>
Aio per command iopriority support introduces a second interface between
userland and the kernel capable of passing iopriority. The aio interface also
needs the ability to verify that the submitting context has sufficient
priviledges to submit IOPRIO_RT commands. This patch creates the
ioprio_check_cap function to be used by the ioprio_set system call and also by
the aio interface.
Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
---
block/ioprio.c | 22 ++++++++++++++++------
include/linux/ioprio.h | 2 ++
2 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/block/ioprio.c b/block/ioprio.c
index 6f5d0b6625e3..f9821080c92c 100644
--- a/block/ioprio.c
+++ b/block/ioprio.c
@@ -61,15 +61,10 @@ int set_task_ioprio(struct task_struct *task, int ioprio)
}
EXPORT_SYMBOL_GPL(set_task_ioprio);
-SYSCALL_DEFINE3(ioprio_set, int, which, int, who, int, ioprio)
+int ioprio_check_cap(int ioprio)
{
int class = IOPRIO_PRIO_CLASS(ioprio);
int data = IOPRIO_PRIO_DATA(ioprio);
- struct task_struct *p, *g;
- struct user_struct *user;
- struct pid *pgrp;
- kuid_t uid;
- int ret;
switch (class) {
case IOPRIO_CLASS_RT:
@@ -92,6 +87,21 @@ SYSCALL_DEFINE3(ioprio_set, int, which, int, who, int, ioprio)
return -EINVAL;
}
+ return 0;
+}
+
+SYSCALL_DEFINE3(ioprio_set, int, which, int, who, int, ioprio)
+{
+ struct task_struct *p, *g;
+ struct user_struct *user;
+ struct pid *pgrp;
+ kuid_t uid;
+ int ret;
+
+ ret = ioprio_check_cap(ioprio);
+ if (ret)
+ return ret;
+
ret = -ESRCH;
rcu_read_lock();
switch (which) {
diff --git a/include/linux/ioprio.h b/include/linux/ioprio.h
index 627efac73e6d..4a28cec49ec3 100644
--- a/include/linux/ioprio.h
+++ b/include/linux/ioprio.h
@@ -77,4 +77,6 @@ extern int ioprio_best(unsigned short aprio, unsigned short bprio);
extern int set_task_ioprio(struct task_struct *task, int ioprio);
+extern int ioprio_check_cap(int ioprio);
+
#endif
--
2.15.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v5 2/5] fs: Convert kiocb rw_hint from enum to u16
2018-05-21 16:01 [PATCH v5 0/5] AIO add per-command iopriority adam.manzanares
2018-05-21 16:01 ` [PATCH v5 1/5] block: add ioprio_check_cap function adam.manzanares
@ 2018-05-21 16:01 ` adam.manzanares
2018-05-22 10:04 ` Christoph Hellwig
2018-05-21 16:01 ` [PATCH v5 3/5] fs: Add aio iopriority support adam.manzanares
` (3 subsequent siblings)
5 siblings, 1 reply; 18+ messages in thread
From: adam.manzanares @ 2018-05-21 16:01 UTC (permalink / raw)
To: viro, linux-fsdevel, axboe, bcrl
Cc: tglx, mingo, pombredanne, kstewart, gregkh, bigeasy, jack,
darrick.wong, rgoldwyn, linux-block, linux-kernel, linux-aio,
linux-api, hch, Adam Manzanares
From: Adam Manzanares <adam.manzanares@wdc.com>
In order to avoid kiocb bloat for per command iopriority support, rw_hint
is converted from enum to a u16. Added a guard around ki_hint assigment.
Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
---
include/linux/fs.h | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 7f07977bdfd7..50de40dbbb85 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -284,6 +284,8 @@ enum rw_hint {
WRITE_LIFE_EXTREME = RWH_WRITE_LIFE_EXTREME,
};
+#define MAX_KI_HINT ((1 << 16) - 1) /* ki_hint type is u16 */
+
#define IOCB_EVENTFD (1 << 0)
#define IOCB_APPEND (1 << 1)
#define IOCB_DIRECT (1 << 2)
@@ -299,7 +301,7 @@ struct kiocb {
void (*ki_complete)(struct kiocb *iocb, long ret, long ret2);
void *private;
int ki_flags;
- enum rw_hint ki_hint;
+ u16 ki_hint;
} __randomize_layout;
static inline bool is_sync_kiocb(struct kiocb *kiocb)
@@ -1927,12 +1929,19 @@ static inline enum rw_hint file_write_hint(struct file *file)
static inline int iocb_flags(struct file *file);
+static inline u16 ki_hint_validate(enum rw_hint hint)
+{
+ if (hint > MAX_KI_HINT)
+ return 0;
+ return hint;
+}
+
static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp)
{
*kiocb = (struct kiocb) {
.ki_filp = filp,
.ki_flags = iocb_flags(filp),
- .ki_hint = file_write_hint(filp),
+ .ki_hint = ki_hint_validate(file_write_hint(filp)),
};
}
--
2.15.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v5 3/5] fs: Add aio iopriority support
2018-05-21 16:01 [PATCH v5 0/5] AIO add per-command iopriority adam.manzanares
2018-05-21 16:01 ` [PATCH v5 1/5] block: add ioprio_check_cap function adam.manzanares
2018-05-21 16:01 ` [PATCH v5 2/5] fs: Convert kiocb rw_hint from enum to u16 adam.manzanares
@ 2018-05-21 16:01 ` adam.manzanares
2018-05-21 20:58 ` Jeff Moyer
` (2 more replies)
2018-05-21 16:01 ` [PATCH v5 4/5] fs: blkdev set bio prio from kiocb prio adam.manzanares
` (2 subsequent siblings)
5 siblings, 3 replies; 18+ messages in thread
From: adam.manzanares @ 2018-05-21 16:01 UTC (permalink / raw)
To: viro, linux-fsdevel, axboe, bcrl
Cc: tglx, mingo, pombredanne, kstewart, gregkh, bigeasy, jack,
darrick.wong, rgoldwyn, linux-block, linux-kernel, linux-aio,
linux-api, hch, Adam Manzanares
From: Adam Manzanares <adam.manzanares@wdc.com>
This is the per-I/O equivalent of the ioprio_set system call.
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.
We set the blkdev bio iopriority unconditionally, so we need to guarantee the
kiocb is initialized properly. Added changes to the loopback driver and
init_sync_kiocb to achieve this.
This patch depends on block: add ioprio_check_cap function.
Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
---
drivers/block/loop.c | 3 +++
fs/aio.c | 16 ++++++++++++++++
include/linux/fs.h | 3 +++
include/uapi/linux/aio_abi.h | 1 +
4 files changed, 23 insertions(+)
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 5d4e31655d96..dd98dfd97f5e 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -76,6 +76,8 @@
#include <linux/miscdevice.h>
#include <linux/falloc.h>
#include <linux/uio.h>
+#include <linux/ioprio.h>
+
#include "loop.h"
#include <linux/uaccess.h>
@@ -559,6 +561,7 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd,
cmd->iocb.ki_filp = file;
cmd->iocb.ki_complete = lo_rw_aio_complete;
cmd->iocb.ki_flags = IOCB_DIRECT;
+ cmd->iocb.ki_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0);
if (cmd->css)
kthread_associate_blkcg(cmd->css);
diff --git a/fs/aio.c b/fs/aio.c
index f3eae5d5771b..44b4572be524 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -1451,6 +1451,22 @@ static int aio_prep_rw(struct kiocb *req, struct iocb *iocb)
if (iocb->aio_flags & IOCB_FLAG_RESFD)
req->ki_flags |= IOCB_EVENTFD;
req->ki_hint = file_write_hint(req->ki_filp);
+ 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");
+ return -EINVAL;
+ }
+
+ req->ki_ioprio = iocb->aio_reqprio;
+ } else
+ req->ki_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0);
+
ret = kiocb_set_rw_flags(req, iocb->aio_rw_flags);
if (unlikely(ret))
fput(req->ki_filp);
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 50de40dbbb85..73b749ed3ea1 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -36,6 +36,7 @@
#include <linux/delayed_call.h>
#include <linux/uuid.h>
#include <linux/errseq.h>
+#include <linux/ioprio.h>
#include <asm/byteorder.h>
#include <uapi/linux/fs.h>
@@ -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)
@@ -1942,6 +1944,7 @@ static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp)
.ki_filp = filp,
.ki_flags = iocb_flags(filp),
.ki_hint = ki_hint_validate(file_write_hint(filp)),
+ .ki_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0),
};
}
diff --git a/include/uapi/linux/aio_abi.h b/include/uapi/linux/aio_abi.h
index 2c0a3415beee..d4e768d55d14 100644
--- a/include/uapi/linux/aio_abi.h
+++ b/include/uapi/linux/aio_abi.h
@@ -55,6 +55,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
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v5 4/5] fs: blkdev set bio prio from kiocb prio
2018-05-21 16:01 [PATCH v5 0/5] AIO add per-command iopriority adam.manzanares
` (2 preceding siblings ...)
2018-05-21 16:01 ` [PATCH v5 3/5] fs: Add aio iopriority support adam.manzanares
@ 2018-05-21 16:01 ` adam.manzanares
2018-05-21 20:59 ` Jeff Moyer
2018-05-21 21:04 ` Jeff Moyer
2018-05-21 16:01 ` [PATCH v5 5/5] fs: iomap dio " adam.manzanares
2018-05-21 20:57 ` [PATCH v5 0/5] AIO add per-command iopriority Jeff Moyer
5 siblings, 2 replies; 18+ messages in thread
From: adam.manzanares @ 2018-05-21 16:01 UTC (permalink / raw)
To: viro, linux-fsdevel, axboe, bcrl
Cc: tglx, mingo, pombredanne, kstewart, gregkh, bigeasy, jack,
darrick.wong, rgoldwyn, linux-block, linux-kernel, linux-aio,
linux-api, hch, Adam Manzanares
From: Adam Manzanares <adam.manzanares@wdc.com>
Now that kiocb has an ioprio field copy this over to the bio when it is
created from the kiocb.
Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
---
fs/block_dev.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/fs/block_dev.c b/fs/block_dev.c
index 7ec920e27065..da1e94d2bb75 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -355,6 +355,7 @@ __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;
+ bio->bi_ioprio = iocb->ki_ioprio;
ret = bio_iov_iter_get_pages(bio, iter);
if (unlikely(ret)) {
--
2.15.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v5 5/5] fs: iomap dio set bio prio from kiocb prio
2018-05-21 16:01 [PATCH v5 0/5] AIO add per-command iopriority adam.manzanares
` (3 preceding siblings ...)
2018-05-21 16:01 ` [PATCH v5 4/5] fs: blkdev set bio prio from kiocb prio adam.manzanares
@ 2018-05-21 16:01 ` adam.manzanares
2018-05-21 20:59 ` Jeff Moyer
2018-05-22 10:05 ` Christoph Hellwig
2018-05-21 20:57 ` [PATCH v5 0/5] AIO add per-command iopriority Jeff Moyer
5 siblings, 2 replies; 18+ messages in thread
From: adam.manzanares @ 2018-05-21 16:01 UTC (permalink / raw)
To: viro, linux-fsdevel, axboe, bcrl
Cc: tglx, mingo, pombredanne, kstewart, gregkh, bigeasy, jack,
darrick.wong, rgoldwyn, linux-block, linux-kernel, linux-aio,
linux-api, hch, Adam Manzanares
From: Adam Manzanares <adam.manzanares@wdc.com>
Now that kiocb has an ioprio field copy this over to the bio when it is
created from the kiocb during direct IO.
Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
---
fs/iomap.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/fs/iomap.c b/fs/iomap.c
index afd163586aa0..65aae194aeca 100644
--- a/fs/iomap.c
+++ b/fs/iomap.c
@@ -919,6 +919,7 @@ iomap_dio_actor(struct inode *inode, loff_t pos, loff_t length,
bio->bi_iter.bi_sector =
(iomap->addr + pos - iomap->offset) >> 9;
bio->bi_write_hint = dio->iocb->ki_hint;
+ bio->bi_ioprio = dio->iocb->ki_ioprio;
bio->bi_private = dio;
bio->bi_end_io = iomap_dio_bio_end_io;
--
2.15.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH v5 0/5] AIO add per-command iopriority
2018-05-21 16:01 [PATCH v5 0/5] AIO add per-command iopriority adam.manzanares
` (4 preceding siblings ...)
2018-05-21 16:01 ` [PATCH v5 5/5] fs: iomap dio " adam.manzanares
@ 2018-05-21 20:57 ` Jeff Moyer
2018-05-21 21:42 ` Adam Manzanares
5 siblings, 1 reply; 18+ messages in thread
From: Jeff Moyer @ 2018-05-21 20:57 UTC (permalink / raw)
To: adam.manzanares
Cc: viro, linux-fsdevel, axboe, bcrl, tglx, mingo, pombredanne,
kstewart, gregkh, bigeasy, jack, darrick.wong, rgoldwyn,
linux-block, linux-kernel, linux-aio, linux-api, hch
Hi, Adam,
adam.manzanares@wdc.com writes:
> From: Adam Manzanares <adam.manzanares@wdc.com>
>
> This is the per-I/O equivalent of the ioprio_set system call.
> See the following link for performance implications on a SATA HDD:
> https://lkml.org/lkml/2016/12/6/495
>
> First patch factors ioprio_check_cap function out of ioprio_set system call to
> also be used by the aio ioprio interface.
>
> Second patch converts kiocb ki_hint field to a u16 to avoid kiocb bloat.
>
> Third patch passes ioprio hint from aio iocb to kiocb and inititalizes kiocb
> ioprio value appropriately when it is not explicitly set.
>
> Fourth patch enables the feature for blkdev.
>
> Fifth patch enables the feature for iomap direct IO
>
> Note: this work is based on top of linux-vfs/for-next
I'll cook up a libaio test case. Can you put together a man-pages
update for this?
Thanks!
Jeff
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 1/5] block: add ioprio_check_cap function
2018-05-21 16:01 ` [PATCH v5 1/5] block: add ioprio_check_cap function adam.manzanares
@ 2018-05-21 20:58 ` Jeff Moyer
0 siblings, 0 replies; 18+ messages in thread
From: Jeff Moyer @ 2018-05-21 20:58 UTC (permalink / raw)
To: adam.manzanares
Cc: viro, linux-fsdevel, axboe, bcrl, tglx, mingo, pombredanne,
kstewart, gregkh, bigeasy, jack, darrick.wong, rgoldwyn,
linux-block, linux-kernel, linux-aio, linux-api, hch
adam.manzanares@wdc.com writes:
> From: Adam Manzanares <adam.manzanares@wdc.com>
>
> Aio per command iopriority support introduces a second interface between
> userland and the kernel capable of passing iopriority. The aio interface also
> needs the ability to verify that the submitting context has sufficient
> priviledges to submit IOPRIO_RT commands. This patch creates the
> ioprio_check_cap function to be used by the ioprio_set system call and also by
> the aio interface.
>
> Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jeff Moyer <jmoyer@redhat.com>
> ---
> block/ioprio.c | 22 ++++++++++++++++------
> include/linux/ioprio.h | 2 ++
> 2 files changed, 18 insertions(+), 6 deletions(-)
>
> diff --git a/block/ioprio.c b/block/ioprio.c
> index 6f5d0b6625e3..f9821080c92c 100644
> --- a/block/ioprio.c
> +++ b/block/ioprio.c
> @@ -61,15 +61,10 @@ int set_task_ioprio(struct task_struct *task, int ioprio)
> }
> EXPORT_SYMBOL_GPL(set_task_ioprio);
>
> -SYSCALL_DEFINE3(ioprio_set, int, which, int, who, int, ioprio)
> +int ioprio_check_cap(int ioprio)
> {
> int class = IOPRIO_PRIO_CLASS(ioprio);
> int data = IOPRIO_PRIO_DATA(ioprio);
> - struct task_struct *p, *g;
> - struct user_struct *user;
> - struct pid *pgrp;
> - kuid_t uid;
> - int ret;
>
> switch (class) {
> case IOPRIO_CLASS_RT:
> @@ -92,6 +87,21 @@ SYSCALL_DEFINE3(ioprio_set, int, which, int, who, int, ioprio)
> return -EINVAL;
> }
>
> + return 0;
> +}
> +
> +SYSCALL_DEFINE3(ioprio_set, int, which, int, who, int, ioprio)
> +{
> + struct task_struct *p, *g;
> + struct user_struct *user;
> + struct pid *pgrp;
> + kuid_t uid;
> + int ret;
> +
> + ret = ioprio_check_cap(ioprio);
> + if (ret)
> + return ret;
> +
> ret = -ESRCH;
> rcu_read_lock();
> switch (which) {
> diff --git a/include/linux/ioprio.h b/include/linux/ioprio.h
> index 627efac73e6d..4a28cec49ec3 100644
> --- a/include/linux/ioprio.h
> +++ b/include/linux/ioprio.h
> @@ -77,4 +77,6 @@ extern int ioprio_best(unsigned short aprio, unsigned short bprio);
>
> extern int set_task_ioprio(struct task_struct *task, int ioprio);
>
> +extern int ioprio_check_cap(int ioprio);
> +
> #endif
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 3/5] fs: Add aio iopriority support
2018-05-21 16:01 ` [PATCH v5 3/5] fs: Add aio iopriority support adam.manzanares
@ 2018-05-21 20:58 ` Jeff Moyer
2018-05-22 10:05 ` Christoph Hellwig
2018-05-22 17:43 ` kbuild test robot
2 siblings, 0 replies; 18+ messages in thread
From: Jeff Moyer @ 2018-05-21 20:58 UTC (permalink / raw)
To: adam.manzanares
Cc: viro, linux-fsdevel, axboe, bcrl, tglx, mingo, pombredanne,
kstewart, gregkh, bigeasy, jack, darrick.wong, rgoldwyn,
linux-block, linux-kernel, linux-aio, linux-api, hch
adam.manzanares@wdc.com writes:
> From: Adam Manzanares <adam.manzanares@wdc.com>
>
> This is the per-I/O equivalent of the ioprio_set system call.
>
> 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.
>
> We set the blkdev bio iopriority unconditionally, so we need to guarantee the
> kiocb is initialized properly. Added changes to the loopback driver and
> init_sync_kiocb to achieve this.
>
> This patch depends on block: add ioprio_check_cap function.
>
> Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
Reviewed-by: Jeff Moyer <jmoyer@redhat.com>
> ---
> drivers/block/loop.c | 3 +++
> fs/aio.c | 16 ++++++++++++++++
> include/linux/fs.h | 3 +++
> include/uapi/linux/aio_abi.h | 1 +
> 4 files changed, 23 insertions(+)
>
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index 5d4e31655d96..dd98dfd97f5e 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -76,6 +76,8 @@
> #include <linux/miscdevice.h>
> #include <linux/falloc.h>
> #include <linux/uio.h>
> +#include <linux/ioprio.h>
> +
> #include "loop.h"
>
> #include <linux/uaccess.h>
> @@ -559,6 +561,7 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd,
> cmd->iocb.ki_filp = file;
> cmd->iocb.ki_complete = lo_rw_aio_complete;
> cmd->iocb.ki_flags = IOCB_DIRECT;
> + cmd->iocb.ki_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0);
> if (cmd->css)
> kthread_associate_blkcg(cmd->css);
>
> diff --git a/fs/aio.c b/fs/aio.c
> index f3eae5d5771b..44b4572be524 100644
> --- a/fs/aio.c
> +++ b/fs/aio.c
> @@ -1451,6 +1451,22 @@ static int aio_prep_rw(struct kiocb *req, struct iocb *iocb)
> if (iocb->aio_flags & IOCB_FLAG_RESFD)
> req->ki_flags |= IOCB_EVENTFD;
> req->ki_hint = file_write_hint(req->ki_filp);
> + 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");
> + return -EINVAL;
> + }
> +
> + req->ki_ioprio = iocb->aio_reqprio;
> + } else
> + req->ki_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0);
> +
> ret = kiocb_set_rw_flags(req, iocb->aio_rw_flags);
> if (unlikely(ret))
> fput(req->ki_filp);
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 50de40dbbb85..73b749ed3ea1 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -36,6 +36,7 @@
> #include <linux/delayed_call.h>
> #include <linux/uuid.h>
> #include <linux/errseq.h>
> +#include <linux/ioprio.h>
>
> #include <asm/byteorder.h>
> #include <uapi/linux/fs.h>
> @@ -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)
> @@ -1942,6 +1944,7 @@ static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp)
> .ki_filp = filp,
> .ki_flags = iocb_flags(filp),
> .ki_hint = ki_hint_validate(file_write_hint(filp)),
> + .ki_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0),
> };
> }
>
> diff --git a/include/uapi/linux/aio_abi.h b/include/uapi/linux/aio_abi.h
> index 2c0a3415beee..d4e768d55d14 100644
> --- a/include/uapi/linux/aio_abi.h
> +++ b/include/uapi/linux/aio_abi.h
> @@ -55,6 +55,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 {
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 4/5] fs: blkdev set bio prio from kiocb prio
2018-05-21 16:01 ` [PATCH v5 4/5] fs: blkdev set bio prio from kiocb prio adam.manzanares
@ 2018-05-21 20:59 ` Jeff Moyer
2018-05-21 21:04 ` Jeff Moyer
1 sibling, 0 replies; 18+ messages in thread
From: Jeff Moyer @ 2018-05-21 20:59 UTC (permalink / raw)
To: adam.manzanares
Cc: viro, linux-fsdevel, axboe, bcrl, tglx, mingo, pombredanne,
kstewart, gregkh, bigeasy, jack, darrick.wong, rgoldwyn,
linux-block, linux-kernel, linux-aio, linux-api, hch
adam.manzanares@wdc.com writes:
> From: Adam Manzanares <adam.manzanares@wdc.com>
>
> Now that kiocb has an ioprio field copy this over to the bio when it is
> created from the kiocb.
>
> Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
Reviewed-by: Jeff Moyer <jmoyer@redhat.com>
> ---
> fs/block_dev.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/fs/block_dev.c b/fs/block_dev.c
> index 7ec920e27065..da1e94d2bb75 100644
> --- a/fs/block_dev.c
> +++ b/fs/block_dev.c
> @@ -355,6 +355,7 @@ __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;
> + bio->bi_ioprio = iocb->ki_ioprio;
>
> ret = bio_iov_iter_get_pages(bio, iter);
> if (unlikely(ret)) {
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 5/5] fs: iomap dio set bio prio from kiocb prio
2018-05-21 16:01 ` [PATCH v5 5/5] fs: iomap dio " adam.manzanares
@ 2018-05-21 20:59 ` Jeff Moyer
2018-05-22 10:05 ` Christoph Hellwig
1 sibling, 0 replies; 18+ messages in thread
From: Jeff Moyer @ 2018-05-21 20:59 UTC (permalink / raw)
To: adam.manzanares
Cc: viro, linux-fsdevel, axboe, bcrl, tglx, mingo, pombredanne,
kstewart, gregkh, bigeasy, jack, darrick.wong, rgoldwyn,
linux-block, linux-kernel, linux-aio, linux-api, hch
adam.manzanares@wdc.com writes:
> From: Adam Manzanares <adam.manzanares@wdc.com>
>
> Now that kiocb has an ioprio field copy this over to the bio when it is
> created from the kiocb during direct IO.
>
> Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
Reviewed-by: Jeff Moyer <jmoyer@redhat.com>
> ---
> fs/iomap.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/fs/iomap.c b/fs/iomap.c
> index afd163586aa0..65aae194aeca 100644
> --- a/fs/iomap.c
> +++ b/fs/iomap.c
> @@ -919,6 +919,7 @@ iomap_dio_actor(struct inode *inode, loff_t pos, loff_t length,
> bio->bi_iter.bi_sector =
> (iomap->addr + pos - iomap->offset) >> 9;
> bio->bi_write_hint = dio->iocb->ki_hint;
> + bio->bi_ioprio = dio->iocb->ki_ioprio;
> bio->bi_private = dio;
> bio->bi_end_io = iomap_dio_bio_end_io;
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 4/5] fs: blkdev set bio prio from kiocb prio
2018-05-21 16:01 ` [PATCH v5 4/5] fs: blkdev set bio prio from kiocb prio adam.manzanares
2018-05-21 20:59 ` Jeff Moyer
@ 2018-05-21 21:04 ` Jeff Moyer
2018-05-21 21:43 ` Adam Manzanares
1 sibling, 1 reply; 18+ messages in thread
From: Jeff Moyer @ 2018-05-21 21:04 UTC (permalink / raw)
To: adam.manzanares
Cc: viro, linux-fsdevel, axboe, bcrl, tglx, mingo, pombredanne,
kstewart, gregkh, bigeasy, jack, darrick.wong, rgoldwyn,
linux-block, linux-kernel, linux-aio, linux-api, hch
adam.manzanares@wdc.com writes:
> From: Adam Manzanares <adam.manzanares@wdc.com>
>
> Now that kiocb has an ioprio field copy this over to the bio when it is
> created from the kiocb.
>
> Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
> ---
> fs/block_dev.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/fs/block_dev.c b/fs/block_dev.c
> index 7ec920e27065..da1e94d2bb75 100644
> --- a/fs/block_dev.c
> +++ b/fs/block_dev.c
> @@ -355,6 +355,7 @@ __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;
> + bio->bi_ioprio = iocb->ki_ioprio;
>
> ret = bio_iov_iter_get_pages(bio, iter);
> if (unlikely(ret)) {
Forgot to mention, you should also convert __blkdev_direct_IO_simple.
-Jeff
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 0/5] AIO add per-command iopriority
2018-05-21 20:57 ` [PATCH v5 0/5] AIO add per-command iopriority Jeff Moyer
@ 2018-05-21 21:42 ` Adam Manzanares
0 siblings, 0 replies; 18+ messages in thread
From: Adam Manzanares @ 2018-05-21 21:42 UTC (permalink / raw)
To: Jeff Moyer
Cc: viro@zeniv.linux.org.uk, linux-fsdevel@vger.kernel.org,
axboe@kernel.dk, bcrl@kvack.org, tglx@linutronix.de,
mingo@kernel.org, pombredanne@nexb.com,
kstewart@linuxfoundation.org, gregkh@linuxfoundation.org,
bigeasy@linutronix.de, jack@suse.cz, darrick.wong@oracle.com,
rgoldwyn@suse.com, linux-block@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-aio@kvack.org,
linux-api@vger.kernel.org, hch@infradead.org
DQoNCk9uIDUvMjEvMTggMTo1NyBQTSwgSmVmZiBNb3llciB3cm90ZToNCj4gSGksIEFkYW0sDQo+
IA0KPiBhZGFtLm1hbnphbmFyZXNAd2RjLmNvbSB3cml0ZXM6DQo+IA0KPj4gRnJvbTogQWRhbSBN
YW56YW5hcmVzIDxhZGFtLm1hbnphbmFyZXNAd2RjLmNvbT4NCj4+DQo+PiBUaGlzIGlzIHRoZSBw
ZXItSS9PIGVxdWl2YWxlbnQgb2YgdGhlIGlvcHJpb19zZXQgc3lzdGVtIGNhbGwuDQo+PiBTZWUg
dGhlIGZvbGxvd2luZyBsaW5rIGZvciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb24gYSBTQVRB
IEhERDoNCj4+IGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDE2LzEyLzYvNDk1DQo+Pg0KPj4gRmly
c3QgcGF0Y2ggZmFjdG9ycyBpb3ByaW9fY2hlY2tfY2FwIGZ1bmN0aW9uIG91dCBvZiBpb3ByaW9f
c2V0IHN5c3RlbSBjYWxsIHRvDQo+PiBhbHNvIGJlIHVzZWQgYnkgdGhlIGFpbyBpb3ByaW8gaW50
ZXJmYWNlLg0KPj4NCj4+IFNlY29uZCBwYXRjaCBjb252ZXJ0cyBraW9jYiBraV9oaW50IGZpZWxk
IHRvIGEgdTE2IHRvIGF2b2lkIGtpb2NiIGJsb2F0Lg0KPj4NCj4+IFRoaXJkIHBhdGNoIHBhc3Nl
cyBpb3ByaW8gaGludCBmcm9tIGFpbyBpb2NiIHRvIGtpb2NiIGFuZCBpbml0aXRhbGl6ZXMga2lv
Y2INCj4+IGlvcHJpbyB2YWx1ZSBhcHByb3ByaWF0ZWx5IHdoZW4gaXQgaXMgbm90IGV4cGxpY2l0
bHkgc2V0Lg0KPj4NCj4+IEZvdXJ0aCBwYXRjaCBlbmFibGVzIHRoZSBmZWF0dXJlIGZvciBibGtk
ZXYuDQo+Pg0KPj4gRmlmdGggcGF0Y2ggZW5hYmxlcyB0aGUgZmVhdHVyZSBmb3IgaW9tYXAgZGly
ZWN0IElPDQo+Pg0KPj4gTm90ZTogdGhpcyB3b3JrIGlzIGJhc2VkIG9uIHRvcCBvZiBsaW51eC12
ZnMvZm9yLW5leHQNCj4gDQo+IEknbGwgY29vayB1cCBhIGxpYmFpbyB0ZXN0IGNhc2UuICBDYW4g
eW91IHB1dCB0b2dldGhlciBhIG1hbi1wYWdlcw0KPiB1cGRhdGUgZm9yIHRoaXM/DQoNCkhlbGxv
IEplZmYsDQoNCkknbGwgc2VuZCBvdXQgYSBtYW4tcGFnZXMgdXBkYXRlIHNvb24uDQoNClRoYW5r
cywNCkFkYW0NCg0KPiANCj4gVGhhbmtzIQ0KPiBKZWZmDQo+IA==
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 4/5] fs: blkdev set bio prio from kiocb prio
2018-05-21 21:04 ` Jeff Moyer
@ 2018-05-21 21:43 ` Adam Manzanares
0 siblings, 0 replies; 18+ messages in thread
From: Adam Manzanares @ 2018-05-21 21:43 UTC (permalink / raw)
To: Jeff Moyer
Cc: viro@zeniv.linux.org.uk, linux-fsdevel@vger.kernel.org,
axboe@kernel.dk, bcrl@kvack.org, tglx@linutronix.de,
mingo@kernel.org, pombredanne@nexb.com,
kstewart@linuxfoundation.org, gregkh@linuxfoundation.org,
bigeasy@linutronix.de, jack@suse.cz, darrick.wong@oracle.com,
rgoldwyn@suse.com, linux-block@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-aio@kvack.org,
linux-api@vger.kernel.org, hch@infradead.org
DQoNCk9uIDUvMjEvMTggMjowNCBQTSwgSmVmZiBNb3llciB3cm90ZToNCj4gYWRhbS5tYW56YW5h
cmVzQHdkYy5jb20gd3JpdGVzOg0KPiANCj4+IEZyb206IEFkYW0gTWFuemFuYXJlcyA8YWRhbS5t
YW56YW5hcmVzQHdkYy5jb20+DQo+Pg0KPj4gTm93IHRoYXQga2lvY2IgaGFzIGFuIGlvcHJpbyBm
aWVsZCBjb3B5IHRoaXMgb3ZlciB0byB0aGUgYmlvIHdoZW4gaXQgaXMNCj4+IGNyZWF0ZWQgZnJv
bSB0aGUga2lvY2IuDQo+Pg0KPj4gU2lnbmVkLW9mZi1ieTogQWRhbSBNYW56YW5hcmVzIDxhZGFt
Lm1hbnphbmFyZXNAd2RjLmNvbT4NCj4+IC0tLQ0KPj4gICBmcy9ibG9ja19kZXYuYyB8IDEgKw0K
Pj4gICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykNCj4+DQo+PiBkaWZmIC0tZ2l0IGEv
ZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYw0KPj4gaW5kZXggN2VjOTIwZTI3MDY1Li5k
YTFlOTRkMmJiNzUgMTAwNjQ0DQo+PiAtLS0gYS9mcy9ibG9ja19kZXYuYw0KPj4gKysrIGIvZnMv
YmxvY2tfZGV2LmMNCj4+IEBAIC0zNTUsNiArMzU1LDcgQEAgX19ibGtkZXZfZGlyZWN0X0lPKHN0
cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLCBpbnQgbnJfcGFnZXMpDQo+
PiAgIAkJYmlvLT5iaV93cml0ZV9oaW50ID0gaW9jYi0+a2lfaGludDsNCj4+ICAgCQliaW8tPmJp
X3ByaXZhdGUgPSBkaW87DQo+PiAgIAkJYmlvLT5iaV9lbmRfaW8gPSBibGtkZXZfYmlvX2VuZF9p
bzsNCj4+ICsJCWJpby0+YmlfaW9wcmlvID0gaW9jYi0+a2lfaW9wcmlvOw0KPj4gICANCj4+ICAg
CQlyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlcik7DQo+PiAgIAkJaWYgKHVu
bGlrZWx5KHJldCkpIHsNCj4gDQo+IEZvcmdvdCB0byBtZW50aW9uLCB5b3Ugc2hvdWxkIGFsc28g
Y29udmVydCBfX2Jsa2Rldl9kaXJlY3RfSU9fc2ltcGxlLg0KDQpOUC4NCg0KPiANCj4gLUplZmYN
Cj4g
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 2/5] fs: Convert kiocb rw_hint from enum to u16
2018-05-21 16:01 ` [PATCH v5 2/5] fs: Convert kiocb rw_hint from enum to u16 adam.manzanares
@ 2018-05-22 10:04 ` Christoph Hellwig
0 siblings, 0 replies; 18+ messages in thread
From: Christoph Hellwig @ 2018-05-22 10:04 UTC (permalink / raw)
To: adam.manzanares
Cc: viro, linux-fsdevel, axboe, bcrl, tglx, mingo, pombredanne,
kstewart, gregkh, bigeasy, jack, darrick.wong, rgoldwyn,
linux-block, linux-kernel, linux-aio, linux-api
On Mon, May 21, 2018 at 09:01:44AM -0700, adam.manzanares@wdc.com wrote:
> From: Adam Manzanares <adam.manzanares@wdc.com>
>
> In order to avoid kiocb bloat for per command iopriority support, rw_hint
> is converted from enum to a u16. Added a guard around ki_hint assigment.
>
> Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
Looks good,
Reviewed-by: Christoph Hellwig <hch@lst.de>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 3/5] fs: Add aio iopriority support
2018-05-21 16:01 ` [PATCH v5 3/5] fs: Add aio iopriority support adam.manzanares
2018-05-21 20:58 ` Jeff Moyer
@ 2018-05-22 10:05 ` Christoph Hellwig
2018-05-22 17:43 ` kbuild test robot
2 siblings, 0 replies; 18+ messages in thread
From: Christoph Hellwig @ 2018-05-22 10:05 UTC (permalink / raw)
To: adam.manzanares
Cc: viro, linux-fsdevel, axboe, bcrl, tglx, mingo, pombredanne,
kstewart, gregkh, bigeasy, jack, darrick.wong, rgoldwyn,
linux-block, linux-kernel, linux-aio, linux-api
Looks good,
Reviewed-by: Christoph Hellwig <hch@lst.de>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 5/5] fs: iomap dio set bio prio from kiocb prio
2018-05-21 16:01 ` [PATCH v5 5/5] fs: iomap dio " adam.manzanares
2018-05-21 20:59 ` Jeff Moyer
@ 2018-05-22 10:05 ` Christoph Hellwig
1 sibling, 0 replies; 18+ messages in thread
From: Christoph Hellwig @ 2018-05-22 10:05 UTC (permalink / raw)
To: adam.manzanares
Cc: viro, linux-fsdevel, axboe, bcrl, tglx, mingo, pombredanne,
kstewart, gregkh, bigeasy, jack, darrick.wong, rgoldwyn,
linux-block, linux-kernel, linux-aio, linux-api
Looks good,
Reviewed-by: Christoph Hellwig <hch@lst.de>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 3/5] fs: Add aio iopriority support
2018-05-21 16:01 ` [PATCH v5 3/5] fs: Add aio iopriority support adam.manzanares
2018-05-21 20:58 ` Jeff Moyer
2018-05-22 10:05 ` Christoph Hellwig
@ 2018-05-22 17:43 ` kbuild test robot
2 siblings, 0 replies; 18+ messages in thread
From: kbuild test robot @ 2018-05-22 17:43 UTC (permalink / raw)
To: adam.manzanares
Cc: kbuild-all, viro, linux-fsdevel, axboe, bcrl, tglx, mingo,
pombredanne, kstewart, gregkh, bigeasy, jack, darrick.wong,
rgoldwyn, linux-block, linux-kernel, linux-aio, linux-api, hch,
Adam Manzanares
[-- Attachment #1: Type: text/plain, Size: 2115 bytes --]
Hi Adam,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on next-20180517]
[cannot apply to linus/master block/for-next v4.17-rc6 v4.17-rc5 v4.17-rc4 v4.17-rc6]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/adam-manzanares-wdc-com/AIO-add-per-command-iopriority/20180522-232203
config: x86_64-randconfig-s0-05230027 (attached as .config)
compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
All errors (new ones prefixed by >>):
fs/aio.o: In function `aio_prep_rw':
>> fs/aio.c:1460: undefined reference to `ioprio_check_cap'
vim +1460 fs/aio.c
1440
1441 static int aio_prep_rw(struct kiocb *req, struct iocb *iocb)
1442 {
1443 int ret;
1444
1445 req->ki_filp = fget(iocb->aio_fildes);
1446 if (unlikely(!req->ki_filp))
1447 return -EBADF;
1448 req->ki_complete = aio_complete_rw;
1449 req->ki_pos = iocb->aio_offset;
1450 req->ki_flags = iocb_flags(req->ki_filp);
1451 if (iocb->aio_flags & IOCB_FLAG_RESFD)
1452 req->ki_flags |= IOCB_EVENTFD;
1453 req->ki_hint = file_write_hint(req->ki_filp);
1454 if (iocb->aio_flags & IOCB_FLAG_IOPRIO) {
1455 /*
1456 * If the IOCB_FLAG_IOPRIO flag of aio_flags is set, then
1457 * aio_reqprio is interpreted as an I/O scheduling
1458 * class and priority.
1459 */
> 1460 ret = ioprio_check_cap(iocb->aio_reqprio);
1461 if (ret) {
1462 pr_debug("aio ioprio check cap error\n");
1463 return -EINVAL;
1464 }
1465
1466 req->ki_ioprio = iocb->aio_reqprio;
1467 } else
1468 req->ki_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0);
1469
1470 ret = kiocb_set_rw_flags(req, iocb->aio_rw_flags);
1471 if (unlikely(ret))
1472 fput(req->ki_filp);
1473 return ret;
1474 }
1475
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 25075 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2018-05-22 17:43 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-05-21 16:01 [PATCH v5 0/5] AIO add per-command iopriority adam.manzanares
2018-05-21 16:01 ` [PATCH v5 1/5] block: add ioprio_check_cap function adam.manzanares
2018-05-21 20:58 ` Jeff Moyer
2018-05-21 16:01 ` [PATCH v5 2/5] fs: Convert kiocb rw_hint from enum to u16 adam.manzanares
2018-05-22 10:04 ` Christoph Hellwig
2018-05-21 16:01 ` [PATCH v5 3/5] fs: Add aio iopriority support adam.manzanares
2018-05-21 20:58 ` Jeff Moyer
2018-05-22 10:05 ` Christoph Hellwig
2018-05-22 17:43 ` kbuild test robot
2018-05-21 16:01 ` [PATCH v5 4/5] fs: blkdev set bio prio from kiocb prio adam.manzanares
2018-05-21 20:59 ` Jeff Moyer
2018-05-21 21:04 ` Jeff Moyer
2018-05-21 21:43 ` Adam Manzanares
2018-05-21 16:01 ` [PATCH v5 5/5] fs: iomap dio " adam.manzanares
2018-05-21 20:59 ` Jeff Moyer
2018-05-22 10:05 ` Christoph Hellwig
2018-05-21 20:57 ` [PATCH v5 0/5] AIO add per-command iopriority Jeff Moyer
2018-05-21 21:42 ` Adam Manzanares
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).