]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
22e2c507 JA |
2 | #ifndef IOPRIO_H |
3 | #define IOPRIO_H | |
4 | ||
5 | #include <linux/sched.h> | |
36436440 | 6 | #include <linux/sched/rt.h> |
fd0928df | 7 | #include <linux/iocontext.h> |
22e2c507 | 8 | |
06447ae5 | 9 | #include <uapi/linux/ioprio.h> |
c2dea2d1 | 10 | |
e70344c0 DLM |
11 | /* |
12 | * Default IO priority. | |
13 | */ | |
0c368a1d | 14 | #define IOPRIO_DEFAULT IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0) |
e70344c0 | 15 | |
a553a835 DLM |
16 | /* |
17 | * Check that a priority value has a valid class. | |
18 | */ | |
19 | static inline bool ioprio_valid(unsigned short ioprio) | |
20 | { | |
21 | unsigned short class = IOPRIO_PRIO_CLASS(ioprio); | |
22 | ||
23 | return class > IOPRIO_CLASS_NONE && class <= IOPRIO_CLASS_IDLE; | |
24 | } | |
25 | ||
598971bf TH |
26 | /* |
27 | * if process has set io priority explicitly, use that. if not, convert | |
28 | * the cpu scheduler nice value to an io priority | |
29 | */ | |
22e2c507 JA |
30 | static inline int task_nice_ioprio(struct task_struct *task) |
31 | { | |
32 | return (task_nice(task) + 20) / 5; | |
33 | } | |
34 | ||
6d63c275 JA |
35 | /* |
36 | * This is for the case where the task hasn't asked for a specific IO class. | |
37 | * Check for idle and rt task process, and return appropriate IO class. | |
38 | */ | |
39 | static inline int task_nice_ioclass(struct task_struct *task) | |
40 | { | |
41 | if (task->policy == SCHED_IDLE) | |
42 | return IOPRIO_CLASS_IDLE; | |
36436440 | 43 | else if (task_is_realtime(task)) |
6d63c275 JA |
44 | return IOPRIO_CLASS_RT; |
45 | else | |
46 | return IOPRIO_CLASS_BE; | |
47 | } | |
48 | ||
64845a1d DLM |
49 | /* |
50 | * If the calling process has set an I/O priority, use that. Otherwise, return | |
51 | * the default I/O priority. | |
52 | */ | |
53 | static inline int get_current_ioprio(void) | |
54 | { | |
55 | struct io_context *ioc = current->io_context; | |
56 | ||
57 | if (ioc) | |
58 | return ioc->ioprio; | |
e70344c0 | 59 | return IOPRIO_DEFAULT; |
64845a1d DLM |
60 | } |
61 | ||
22e2c507 JA |
62 | /* |
63 | * For inheritance, return the highest of the two given priorities | |
64 | */ | |
e014ff8d | 65 | extern int ioprio_best(unsigned short aprio, unsigned short bprio); |
22e2c507 | 66 | |
b3881f74 TT |
67 | extern int set_task_ioprio(struct task_struct *task, int ioprio); |
68 | ||
b0966e7b | 69 | #ifdef CONFIG_BLOCK |
aa434577 | 70 | extern int ioprio_check_cap(int ioprio); |
b0966e7b AM |
71 | #else |
72 | static inline int ioprio_check_cap(int ioprio) | |
73 | { | |
74 | return -ENOTBLK; | |
75 | } | |
76 | #endif /* CONFIG_BLOCK */ | |
aa434577 | 77 | |
22e2c507 | 78 | #endif |