• Ming Lei's avatar
    block: don't hold q->sysfs_lock in elevator_init_mq · c48dac13
    Ming Lei authored
    The original comment says:
    
    	q->sysfs_lock must be held to provide mutual exclusion between
    	elevator_switch() and here.
    
    Which is simply wrong. elevator_init_mq() is only called from
    blk_mq_init_allocated_queue, which is always called before the request
    queue is registered via blk_register_queue(), for dm-rq or normal rq
    based driver. However, queue's kobject is only exposed and added to sysfs
    in blk_register_queue(). So there isn't such race between elevator_switch()
    and elevator_init_mq().
    
    So avoid to hold q->sysfs_lock in elevator_init_mq().
    
    Cc: Christoph Hellwig <hch@infradead.org>
    Cc: Hannes Reinecke <hare@suse.com>
    Cc: Greg KH <gregkh@linuxfoundation.org>
    Cc: Mike Snitzer <snitzer@redhat.com>
    Cc: Bart Van Assche <bvanassche@acm.org>
    Cc: Damien Le Moal <damien.lemoal@wdc.com>
    Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
    Signed-off-by: default avatarMing Lei <ming.lei@redhat.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    c48dac13
elevator.c 16.3 KB