• Soren Hansen's avatar
    nbd: remove module-level ioctl mutex · 4c9a57b6
    Soren Hansen authored
    commit de1f016f upstream.
    
    Commit 2a48fc0a ("block: autoconvert trivial BKL users to private
    mutex") replaced uses of the BKL in the nbd driver with mutex
    operations.  Since then, I've been been seeing these lock ups:
    
     INFO: task qemu-nbd:16115 blocked for more than 120 seconds.
     "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
     qemu-nbd      D 0000000000000001     0 16115  16114 0x00000004
      ffff88007d775d98 0000000000000082 ffff88007d775fd8 ffff88007d774000
      0000000000013a80 ffff8800020347e0 ffff88007d775fd8 0000000000013a80
      ffff880133730000 ffff880002034440 ffffea0004333db8 ffffffffa071c020
     Call Trace:
      [<ffffffff815b9997>] __mutex_lock_slowpath+0xf7/0x180
      [<ffffffff815b93eb>] mutex_lock+0x2b/0x50
      [<ffffffffa071a21c>] nbd_ioctl+0x6c/0x1c0 [nbd]
      [<ffffffff812cb970>] blkdev_ioctl+0x230/0x730
      [<ffffffff811967a1>] block_ioctl+0x41/0x50
      [<ffffffff81175c03>] do_vfs_ioctl+0x93/0x370
      [<ffffffff81175f61>] sys_ioctl+0x81/0xa0
      [<ffffffff8100c0c2>] system_call_fastpath+0x16/0x1b
    
    Instrumenting the nbd module's ioctl handler with some extra logging
    clearly shows the NBD_DO_IT ioctl being invoked which is a long-lived
    ioctl in the sense that it doesn't return until another ioctl asks the
    driver to disconnect.  However, that other ioctl blocks, waiting for the
    module-level mutex that replaced the BKL, and then we're stuck.
    
    This patch removes the module-level mutex altogether.  It's clearly
    wrong, and as far as I can see, it's entirely unnecessary, since the nbd
    driver maintains per-device mutexes, and I don't see anything that would
    require a module-level (or kernel-level, for that matter) mutex.
    Signed-off-by: default avatarSoren Hansen <soren@linux2go.dk>
    Acked-by: default avatarSerge Hallyn <serge.hallyn@canonical.com>
    Acked-by: default avatarPaul Clements <paul.clements@steeleye.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    4c9a57b6
nbd.c 20.1 KB