• Andrey Vagin's avatar
    block: fix memory leaks on unplugging block device · 85157366
    Andrey Vagin authored
    All objects, which are allocated in blk_mq_register_disk, must be
    released in blk_mq_unregister_disk.
    
    I use a KVM virtual machine and virtio disk to reproduce this issue.
    
    kmemleak: 18 new suspected memory leaks (see /sys/kernel/debug/kmemleak)
    $ cat /sys/kernel/debug/kmemleak | head -n 30
    unreferenced object 0xffff8800b6636150 (size 8):
      comm "kworker/0:2", pid 65, jiffies 4294809903 (age 86.358s)
      hex dump (first 8 bytes):
        76 69 72 74 69 6f 34 00                          virtio4.
      backtrace:
        [<ffffffff8165d41e>] kmemleak_alloc+0x4e/0xb0
        [<ffffffff8118cfc5>] __kmalloc_track_caller+0xf5/0x260
        [<ffffffff81155b11>] kstrdup+0x31/0x60
        [<ffffffff812242be>] sysfs_new_dirent+0x2e/0x140
        [<ffffffff81224678>] create_dir+0x38/0xe0
        [<ffffffff812249e3>] sysfs_create_dir_ns+0x73/0xc0
        [<ffffffff8130dfa9>] kobject_add_internal+0xc9/0x340
        [<ffffffff8130e535>] kobject_add+0x65/0xb0
        [<ffffffff813f34f8>] device_add+0x128/0x660
        [<ffffffff813f3a4a>] device_register+0x1a/0x20
        [<ffffffff813ae6f8>] register_virtio_device+0x98/0xe0
        [<ffffffff813b0cce>] virtio_pci_probe+0x12e/0x1c0
        [<ffffffff81340675>] local_pci_probe+0x45/0xa0
        [<ffffffff81341a51>] pci_device_probe+0x121/0x130
        [<ffffffff813f67f7>] driver_probe_device+0x87/0x390
        [<ffffffff813f6b3b>] __device_attach+0x3b/0x40
    unreferenced object 0xffff8800b65aa1d8 (size 144):
    
    Fixes: 320ae51f (blk-mq: new multi-queue block IO queueing mechanism)
    Cc: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: default avatarAndrey Vagin <avagin@openvz.org>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    85157366
Name
Last commit
Last update
..
partitions Loading commit data...
Kconfig Loading commit data...
Kconfig.iosched Loading commit data...
Makefile Loading commit data...
blk-cgroup.c Loading commit data...
blk-cgroup.h Loading commit data...
blk-core.c Loading commit data...
blk-exec.c Loading commit data...
blk-flush.c Loading commit data...
blk-integrity.c Loading commit data...
blk-ioc.c Loading commit data...
blk-iopoll.c Loading commit data...
blk-lib.c Loading commit data...
blk-map.c Loading commit data...
blk-merge.c Loading commit data...
blk-mq-cpu.c Loading commit data...
blk-mq-cpumap.c Loading commit data...
blk-mq-sysfs.c Loading commit data...
blk-mq-tag.c Loading commit data...
blk-mq-tag.h Loading commit data...
blk-mq.c Loading commit data...
blk-mq.h Loading commit data...
blk-settings.c Loading commit data...
blk-softirq.c Loading commit data...
blk-sysfs.c Loading commit data...
blk-tag.c Loading commit data...
blk-throttle.c Loading commit data...
blk-timeout.c Loading commit data...
blk.h Loading commit data...
bsg-lib.c Loading commit data...
bsg.c Loading commit data...
cfq-iosched.c Loading commit data...
cmdline-parser.c Loading commit data...
compat_ioctl.c Loading commit data...
deadline-iosched.c Loading commit data...
elevator.c Loading commit data...
genhd.c Loading commit data...
ioctl.c Loading commit data...
noop-iosched.c Loading commit data...
partition-generic.c Loading commit data...
scsi_ioctl.c Loading commit data...