* [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
* 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
* [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
* 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
* [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
* 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 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 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
* [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
* 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 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 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, linux-fsdevel, axboe, bcrl, tglx, mingo, pombredanne,
kstewart, gregkh, bigeasy, jack, darrick.wong, rgoldwyn,
linux-block, linux-kernel, linux-aio, linux-api, hch
On 5/21/18 2:04 PM, Jeff Moyer wrote:
> 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.
NP.
>
> -Jeff
>
^ permalink raw reply [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 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 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 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 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, linux-fsdevel, axboe, bcrl, tglx, mingo, pombredanne,
kstewart, gregkh, bigeasy, jack, darrick.wong, rgoldwyn,
linux-block, linux-kernel, linux-aio, linux-api, hch
On 5/21/18 1:57 PM, Jeff Moyer wrote:
> 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?
Hello Jeff,
I'll send out a man-pages update soon.
Thanks,
Adam
>
> Thanks!
> Jeff
>
^ permalink raw reply [flat|nested] 18+ messages in thread