block: Fix computation of merged request priority
Priority of a merged request is computed by ioprio_best(). If one of the
requests has undefined priority (IOPRIO_CLASS_NONE) and another request
has priority from IOPRIO_CLASS_BE, the function will return the
undefined priority which is wrong. Fix the function to properly return
priority of a request with the defined priority.
Fixes: d58cdfb89c
CC: stable@vger.kernel.org
Signed-off-by: Jan Kara <jack@suse.cz>
Reviewed-by: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
3a2f22b7d0
commit
ece9c72acc
|
@ -157,14 +157,16 @@ out:
|
||||||
|
|
||||||
int ioprio_best(unsigned short aprio, unsigned short bprio)
|
int ioprio_best(unsigned short aprio, unsigned short bprio)
|
||||||
{
|
{
|
||||||
unsigned short aclass = IOPRIO_PRIO_CLASS(aprio);
|
unsigned short aclass;
|
||||||
unsigned short bclass = IOPRIO_PRIO_CLASS(bprio);
|
unsigned short bclass;
|
||||||
|
|
||||||
if (aclass == IOPRIO_CLASS_NONE)
|
if (!ioprio_valid(aprio))
|
||||||
aclass = IOPRIO_CLASS_BE;
|
aprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, IOPRIO_NORM);
|
||||||
if (bclass == IOPRIO_CLASS_NONE)
|
if (!ioprio_valid(bprio))
|
||||||
bclass = IOPRIO_CLASS_BE;
|
bprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, IOPRIO_NORM);
|
||||||
|
|
||||||
|
aclass = IOPRIO_PRIO_CLASS(aprio);
|
||||||
|
bclass = IOPRIO_PRIO_CLASS(bprio);
|
||||||
if (aclass == bclass)
|
if (aclass == bclass)
|
||||||
return min(aprio, bprio);
|
return min(aprio, bprio);
|
||||||
if (aclass > bclass)
|
if (aclass > bclass)
|
||||||
|
|
Loading…
Reference in New Issue