• Tejun Heo's avatar
    sched/core: Separate out io_schedule_prepare() and io_schedule_finish() · 10ab5643
    Tejun Heo authored
    Now that IO schedule accounting is done inside __schedule(),
    io_schedule() can be split into three steps - prep, schedule, and
    finish - where the schedule part doesn't need any special annotation.
    This allows marking a sleep as iowait by simply wrapping an existing
    blocking function with io_schedule_prepare() and io_schedule_finish().
    
    Because task_struct->in_iowait is single bit, the caller of
    io_schedule_prepare() needs to record and the pass its state to
    io_schedule_finish() to be safe regarding nesting.  While this isn't
    the prettiest, these functions are mostly gonna be used by core
    functions and we don't want to use more space for ->in_iowait.
    
    While at it, as it's simple to do now, reimplement io_schedule()
    without unnecessarily going through io_schedule_timeout().
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: adilger.kernel@dilger.ca
    Cc: jack@suse.com
    Cc: kernel-team@fb.com
    Cc: mingbo@fb.com
    Cc: tytso@mit.edu
    Link: http://lkml.kernel.org/r/1477673892-28940-3-git-send-email-tj@kernel.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    10ab5643
core.c 219 KB