• Ming Lei's avatar
    blk-mq: initialize mq kobjects in blk_mq_init_allocated_queue() · bc885917
    Ming Lei authored
    
    [ Upstream commit 737f98cf ]
    
    Both q->mq_kobj and sw queues' kobjects should have been initialized
    once, instead of doing that each add_disk context.
    
    Also this patch removes clearing of ctx in blk_mq_init_cpu_queues()
    because percpu allocator fills zero to allocated variable.
    
    This patch fixes one issue[1] reported from Omar.
    
    [1] kernel wearning when doing unbind/bind on one scsi-mq device
    
    [   19.347924] kobject (ffff8800791ea0b8): tried to init an initialized object, something is seriously wrong.
    [   19.349781] CPU: 1 PID: 84 Comm: kworker/u8:1 Not tainted 4.10.0-rc7-00210-g53f39eeaa263 #34
    [   19.350686] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.1-20161122_114906-anatol 04/01/2014
    [   19.350920] Workqueue: events_unbound async_run_entry_fn
    [   19.350920] Call Trace:
    [   19.350920]  dump_stack+0x63/0x83
    [   19.350920]  kobject_init+0x77/0x90
    [   19.350920]  blk_mq_register_dev+0x40/0x130
    [   19.350920]  blk_register_queue+0xb6/0x190
    [   19.350920]  device_add_disk+0x1ec/0x4b0
    [   19.350920]  sd_probe_async+0x10d/0x1c0 [sd_mod]
    [   19.350920]  async_run_entry_fn+0x48/0x150
    [   19.350920]  process_one_work+0x1d0/0x480
    [   19.350920]  worker_thread+0x48/0x4e0
    [   19.350920]  kthread+0x101/0x140
    [   19.350920]  ? process_one_work+0x480/0x480
    [   19.350920]  ? kthread_create_on_node+0x60/0x60
    [   19.350920]  ret_from_fork+0x2c/0x40
    
    Cc: Omar Sandoval <osandov@osandov.com>
    Signed-off-by: 's avatarMing Lei <tom.leiming@gmail.com>
    Tested-by: 's avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: 's avatarJens Axboe <axboe@fb.com>
    Signed-off-by: 's avatarSasha Levin <alexander.levin@verizon.com>
    Signed-off-by: 's avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    bc885917