diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-06-08 13:00:20 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-06-08 13:00:20 -0400 |
| commit | 4a189982e293e662d719f5dd3ba6eec247d7bbc2 (patch) | |
| tree | a2384a2e4f56999a15fa80f0a07bff9fe23597f3 /include/linux | |
| parent | 4189b863ba327bac4a869773aea4995f7716945a (diff) | |
| parent | 9a6d9a62e0fd4b9927c3124db0f25fc6b4fb6576 (diff) | |
Merge branch 'work.aio' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull aio iopriority support from Al Viro:
"The rest of aio stuff for this cycle - Adam's aio ioprio series"
* 'work.aio' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
fs: aio ioprio use ioprio_check_cap ret val
fs: aio ioprio add explicit block layer dependence
fs: iomap dio set bio prio from kiocb prio
fs: blkdev set bio prio from kiocb prio
fs: Add aio iopriority support
fs: Convert kiocb rw_hint from enum to u16
block: add ioprio_check_cap function
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/fs.h | 16 | ||||
| -rw-r--r-- | include/linux/ioprio.h | 9 |
2 files changed, 23 insertions, 2 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 77333ed3a488..7207de8c4e9a 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -36,6 +36,7 @@ | |||
| 36 | #include <linux/delayed_call.h> | 36 | #include <linux/delayed_call.h> |
| 37 | #include <linux/uuid.h> | 37 | #include <linux/uuid.h> |
| 38 | #include <linux/errseq.h> | 38 | #include <linux/errseq.h> |
| 39 | #include <linux/ioprio.h> | ||
| 39 | 40 | ||
| 40 | #include <asm/byteorder.h> | 41 | #include <asm/byteorder.h> |
| 41 | #include <uapi/linux/fs.h> | 42 | #include <uapi/linux/fs.h> |
| @@ -299,7 +300,8 @@ struct kiocb { | |||
| 299 | void (*ki_complete)(struct kiocb *iocb, long ret, long ret2); | 300 | void (*ki_complete)(struct kiocb *iocb, long ret, long ret2); |
| 300 | void *private; | 301 | void *private; |
| 301 | int ki_flags; | 302 | int ki_flags; |
| 302 | enum rw_hint ki_hint; | 303 | u16 ki_hint; |
| 304 | u16 ki_ioprio; /* See linux/ioprio.h */ | ||
| 303 | } __randomize_layout; | 305 | } __randomize_layout; |
| 304 | 306 | ||
| 305 | static inline bool is_sync_kiocb(struct kiocb *kiocb) | 307 | static inline bool is_sync_kiocb(struct kiocb *kiocb) |
| @@ -1934,12 +1936,22 @@ static inline enum rw_hint file_write_hint(struct file *file) | |||
| 1934 | 1936 | ||
| 1935 | static inline int iocb_flags(struct file *file); | 1937 | static inline int iocb_flags(struct file *file); |
| 1936 | 1938 | ||
| 1939 | static inline u16 ki_hint_validate(enum rw_hint hint) | ||
| 1940 | { | ||
| 1941 | typeof(((struct kiocb *)0)->ki_hint) max_hint = -1; | ||
| 1942 | |||
| 1943 | if (hint <= max_hint) | ||
| 1944 | return hint; | ||
| 1945 | return 0; | ||
| 1946 | } | ||
| 1947 | |||
| 1937 | static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp) | 1948 | static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp) |
| 1938 | { | 1949 | { |
| 1939 | *kiocb = (struct kiocb) { | 1950 | *kiocb = (struct kiocb) { |
| 1940 | .ki_filp = filp, | 1951 | .ki_filp = filp, |
| 1941 | .ki_flags = iocb_flags(filp), | 1952 | .ki_flags = iocb_flags(filp), |
| 1942 | .ki_hint = file_write_hint(filp), | 1953 | .ki_hint = ki_hint_validate(file_write_hint(filp)), |
| 1954 | .ki_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0), | ||
| 1943 | }; | 1955 | }; |
| 1944 | } | 1956 | } |
| 1945 | 1957 | ||
diff --git a/include/linux/ioprio.h b/include/linux/ioprio.h index 627efac73e6d..9e30ed6443db 100644 --- a/include/linux/ioprio.h +++ b/include/linux/ioprio.h | |||
| @@ -77,4 +77,13 @@ extern int ioprio_best(unsigned short aprio, unsigned short bprio); | |||
| 77 | 77 | ||
| 78 | extern int set_task_ioprio(struct task_struct *task, int ioprio); | 78 | extern int set_task_ioprio(struct task_struct *task, int ioprio); |
| 79 | 79 | ||
| 80 | #ifdef CONFIG_BLOCK | ||
| 81 | extern int ioprio_check_cap(int ioprio); | ||
| 82 | #else | ||
| 83 | static inline int ioprio_check_cap(int ioprio) | ||
| 84 | { | ||
| 85 | return -ENOTBLK; | ||
| 86 | } | ||
| 87 | #endif /* CONFIG_BLOCK */ | ||
| 88 | |||
| 80 | #endif | 89 | #endif |
