Commit 3b7cb745 authored by Jens Axboe's avatar Jens Axboe
Browse files

block: move __get_task_ioprio() into header file



We call this once per IO, which can be millions of times per second.
Since nobody really uses io priorities, or at least it isn't very
common, this is all wasted time and can amount to as much as 3% of
the total kernel time.

Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 587371ed
Loading
Loading
Loading
Loading
+0 −26
Original line number Diff line number Diff line
@@ -139,32 +139,6 @@ SYSCALL_DEFINE3(ioprio_set, int, which, int, who, int, ioprio)
	return ret;
}

/*
 * If the task has set an I/O priority, use that. Otherwise, return
 * the default I/O priority.
 *
 * Expected to be called for current task or with task_lock() held to keep
 * io_context stable.
 */
int __get_task_ioprio(struct task_struct *p)
{
	struct io_context *ioc = p->io_context;
	int prio;

	if (p != current)
		lockdep_assert_held(&p->alloc_lock);
	if (ioc)
		prio = ioc->ioprio;
	else
		prio = IOPRIO_DEFAULT;

	if (IOPRIO_PRIO_CLASS(prio) == IOPRIO_CLASS_NONE)
		prio = IOPRIO_PRIO_VALUE(task_nice_ioclass(p),
					 task_nice_ioprio(p));
	return prio;
}
EXPORT_SYMBOL_GPL(__get_task_ioprio);

static int get_task_ioprio(struct task_struct *p)
{
	int ret;
+24 −1
Original line number Diff line number Diff line
@@ -47,7 +47,30 @@ static inline int task_nice_ioclass(struct task_struct *task)
}

#ifdef CONFIG_BLOCK
int __get_task_ioprio(struct task_struct *p);
/*
 * If the task has set an I/O priority, use that. Otherwise, return
 * the default I/O priority.
 *
 * Expected to be called for current task or with task_lock() held to keep
 * io_context stable.
 */
static inline int __get_task_ioprio(struct task_struct *p)
{
	struct io_context *ioc = p->io_context;
	int prio;

	if (p != current)
		lockdep_assert_held(&p->alloc_lock);
	if (ioc)
		prio = ioc->ioprio;
	else
		prio = IOPRIO_DEFAULT;

	if (IOPRIO_PRIO_CLASS(prio) == IOPRIO_CLASS_NONE)
		prio = IOPRIO_PRIO_VALUE(task_nice_ioclass(p),
					 task_nice_ioprio(p));
	return prio;
}
#else
static inline int __get_task_ioprio(struct task_struct *p)
{