Message ID | 20220623074840.5960-1-jack@suse.cz (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | block: Fix IO priority mess | expand |
Looks good:
Reviewed-by: Christoph Hellwig <hch@lst.de>
On Thu, 23 Jun 2022 09:48:26 +0200, Jan Kara wrote: > Commit e70344c05995 ("block: fix default IO priority handling") > introduced an inconsistency in get_current_ioprio() that tasks without > IO context return IOPRIO_DEFAULT priority while tasks with freshly > allocated IO context will return 0 (IOPRIO_CLASS_NONE/0) IO priority. > Tasks without IO context used to be rare before 5a9d041ba2f6 ("block: > move io_context creation into where it's needed") but after this commit > they became common because now only BFQ IO scheduler setups task's IO > context. Similar inconsistency is there for get_task_ioprio() so this > inconsistency is now exposed to userspace and userspace will see > different IO priority for tasks operating on devices with BFQ compared > to devices without BFQ. Furthemore the changes done by commit > e70344c05995 change the behavior when no IO priority is set for BFQ IO > scheduler which is also documented in ioprio_set(2) manpage: > > [...] Applied, thanks! [1/9] block: fix default IO priority handling again commit: f0f5a5e24fa5412f187f429232334ad6832d1a66 [2/9] block: Return effective IO priority from get_current_ioprio() commit: 93fd10125cd702d86f1c4005349b54eeb3c02af3 [3/9] block: Generalize get_current_ioprio() for any task commit: 86f80bd5f639921c59afb113fa3ebb3ccb46be84 [4/9] block: Make ioprio_best() static commit: c85fb98c51a66ff7346f2e12f6c20fb4f60de812 [5/9] block: Fix handling of tasks without ioprio in ioprio_get(2) commit: caf2c269be20c536009ccd815a4e493d0c6c6634 [6/9] blk-ioprio: Remove unneeded field commit: d2adb01a5bcbe36bc05fbb383028da755f7a919b [7/9] blk-ioprio: Convert from rqos policy to direct call commit: 8f3d8d7f56aba4c6171e48b107b9167255044653 [8/9] block: Initialize bio priority earlier commit: 92c3dfe1cfce7dd7cf6cd32b78b05885d824656e [9/9] block: Always initialize bio IO priority on submit commit: 71ad7aabb8968164b1963fff7216b225fdd80f84 Best regards,
diff --git a/block/blk-ioc.c b/block/blk-ioc.c index df9cfe4ca532..63fc02042408 100644 --- a/block/blk-ioc.c +++ b/block/blk-ioc.c @@ -247,6 +247,8 @@ static struct io_context *alloc_io_context(gfp_t gfp_flags, int node) INIT_HLIST_HEAD(&ioc->icq_list); INIT_WORK(&ioc->release_work, ioc_release_fn); #endif + ioc->ioprio = IOPRIO_DEFAULT; + return ioc; } diff --git a/block/ioprio.c b/block/ioprio.c index 2fe068fcaad5..2a34cbca18ae 100644 --- a/block/ioprio.c +++ b/block/ioprio.c @@ -157,9 +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; + aprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, IOPRIO_BE_NORM); if (!ioprio_valid(bprio)) - bprio = IOPRIO_DEFAULT; + bprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, IOPRIO_BE_NORM); return min(aprio, bprio); } diff --git a/include/linux/ioprio.h b/include/linux/ioprio.h index 3f53bc27a19b..3d088a88f832 100644 --- a/include/linux/ioprio.h +++ b/include/linux/ioprio.h @@ -11,7 +11,7 @@ /* * Default IO priority. */ -#define IOPRIO_DEFAULT IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, IOPRIO_BE_NORM) +#define IOPRIO_DEFAULT IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0) /* * Check that a priority value has a valid class.