• T
    elevator: clear auxiliary data earlier during elevator switch · 5a5bafdc
    Tejun Heo 提交于
    Elevator switch tries hard to keep as much as context until new
    elevator is ready so that it can revert to the original state if
    initializing the new elevator fails for some reason.  Unfortunately,
    with more auxiliary contexts to manage, this makes elevator init and
    exit paths too complex and fragile.
    
    This patch makes elevator_switch() unregister the current elevator and
    flush icq's before start initializing the new one.  As we still keep
    the old elevator itself, the only difference is that we lose icq's on
    rare occassions of switching failure, which isn't critical at all.
    
    Note that this makes explicit elevator parameter to
    elevator_init_queue() and __elv_register_queue() unnecessary as they
    always can use the current elevator.
    
    This patch enables block cgroup cleanups.
    
    -v2: blk_add_trace_msg() prints elevator name from @new_e instead of
         @e->type as the local variable no longer exists.  This caused
         build failure on CONFIG_BLK_DEV_IO_TRACE.
    Signed-off-by: NTejun Heo <tj@kernel.org>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    5a5bafdc
elevator.c 23.6 KB