• Tejun Heo's avatar
    block: don't kick empty queue in blk_drain_queue() · 4eabc941
    Tejun Heo authored
    While probing, fd sets up queue, probes hardware and tears down the
    queue if probing fails.  In the process, blk_drain_queue() kicks the
    queue which failed to finish initialization and fd is unhappy about
    that.
    
      floppy0: no floppy controllers found
      ------------[ cut here ]------------
      WARNING: at drivers/block/floppy.c:2929 do_fd_request+0xbf/0xd0()
      Hardware name: To Be Filled By O.E.M.
      VFS: do_fd_request called on non-open device
      Modules linked in:
      Pid: 1, comm: swapper Not tainted 3.2.0-rc4-00077-g5983fe2b #2
      Call Trace:
       [<ffffffff81039a6a>] warn_slowpath_common+0x7a/0xb0
       [<ffffffff81039b41>] warn_slowpath_fmt+0x41/0x50
       [<ffffffff813d657f>] do_fd_request+0xbf/0xd0
       [<ffffffff81322b95>] blk_drain_queue+0x65/0x80
       [<ffffffff81322c93>] blk_cleanup_queue+0xe3/0x1a0
       [<ffffffff818a809d>] floppy_init+0xdeb/0xe28
       [<ffffffff818a72b2>] ? daring+0x6b/0x6b
       [<ffffffff810002af>] do_one_initcall+0x3f/0x170
       [<ffffffff81884b34>] kernel_init+0x9d/0x11e
       [<ffffffff810317c2>] ? schedule_tail+0x22/0xa0
       [<ffffffff815dbb14>] kernel_thread_helper+0x4/0x10
       [<ffffffff81884a97>] ? start_kernel+0x2be/0x2be
       [<ffffffff815dbb10>] ? gs_change+0xb/0xb
    
    Avoid it by making blk_drain_queue() kick queue iff dispatch queue has
    something on it.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reported-by: default avatarRalf Hildebrandt <Ralf.Hildebrandt@charite.de>
    Reported-by: default avatarWu Fengguang <fengguang.wu@intel.com>
    Tested-by: default avatarSergei Trofimovich <slyich@gmail.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    4eabc941
blk-core.c 76 KB