On 2022/06/01 23:51, Jan Kara wrote: > ioprio_get(2) can be asked to return the best IO priority from several > tasks (IOPRIO_WHO_PGRP, IOPRIO_WHO_USER). Currently the call treats > tasks without set IO priority as having priority > IOPRIO_CLASS_BE/IOPRIO_BE_NORM however this does not really reflect the > IO priority the task will get (which depends on task's nice value) and > with the following fix it will not even match returned IO priority for a > single task. So fix IO priority comparison to treat unset IO priority as > the lowest possible one. This way we will return IOPRIO_CLASS_NONE > priority only if none of the considered tasks has explicitely set IO > priority, otherwise we return the highest set IO priority. This changes > userspace visible behavior but hopefully the results are clearer and > nothing breaks. > > Signed-off-by: Jan Kara <jack@xxxxxxx> > --- > block/ioprio.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/block/ioprio.c b/block/ioprio.c > index 2fe068fcaad5..62890391fc80 100644 > --- a/block/ioprio.c > +++ b/block/ioprio.c > @@ -157,10 +157,9 @@ static int get_task_ioprio(struct task_struct *p) > int ioprio_best(unsigned short aprio, unsigned short bprio) > { > if (!ioprio_valid(aprio)) > - aprio = IOPRIO_DEFAULT; > + return bprio; bprio may not be valid... > if (!ioprio_valid(bprio)) > - bprio = IOPRIO_DEFAULT; > - > + return aprio; > return min(aprio, bprio); > } > -- Damien Le Moal Western Digital Research