linux/drivers/md
Mike Snitzer 4328daa2e7 dm: fix dm_rq_target_io leak on faults with .request_fn DM w/ blk-mq paths
Using request-based DM mpath configured with the following stacking
(.request_fn DM mpath ontop of scsi-mq paths):

echo Y > /sys/module/scsi_mod/parameters/use_blk_mq
echo N > /sys/module/dm_mod/parameters/use_blk_mq

'struct dm_rq_target_io' would leak if a request is requeued before a
blk-mq clone is allocated (or fails to allocate).  free_rq_tio()
wasn't being called.

kmemleak reported:

unreferenced object 0xffff8800b90b98c0 (size 112):
  comm "kworker/7:1H", pid 5692, jiffies 4295056109 (age 78.589s)
  hex dump (first 32 bytes):
    00 d0 5c 2c 03 88 ff ff 40 00 bf 01 00 c9 ff ff  ..\,....@.......
    e0 d9 b1 34 00 88 ff ff 00 00 00 00 00 00 00 00  ...4............
  backtrace:
    [<ffffffff81672b6e>] kmemleak_alloc+0x4e/0xb0
    [<ffffffff811dbb63>] kmem_cache_alloc+0xc3/0x1e0
    [<ffffffff8117eae5>] mempool_alloc_slab+0x15/0x20
    [<ffffffff8117ec1e>] mempool_alloc+0x6e/0x170
    [<ffffffffa00029ac>] dm_old_prep_fn+0x3c/0x180 [dm_mod]
    [<ffffffff812fbd78>] blk_peek_request+0x168/0x290
    [<ffffffffa0003e62>] dm_request_fn+0xb2/0x1b0 [dm_mod]
    [<ffffffff812f66e3>] __blk_run_queue+0x33/0x40
    [<ffffffff812f9585>] blk_delay_work+0x25/0x40
    [<ffffffff81096fff>] process_one_work+0x14f/0x3d0
    [<ffffffff81097715>] worker_thread+0x125/0x4b0
    [<ffffffff8109ce88>] kthread+0xd8/0xf0
    [<ffffffff8167cb8f>] ret_from_fork+0x3f/0x70
    [<ffffffffffffffff>] 0xffffffffffffffff

crash> struct -o dm_rq_target_io
struct dm_rq_target_io {
    ...
}
SIZE: 112

Fixes: e5863d9ad7 ("dm: allocate requests in target when stacking on blk-mq devices")
Cc: stable@vger.kernel.org # 4.0+
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
2016-02-21 20:27:50 -05:00
..
bcache Merge branch 'for-4.5/drivers' of git://git.kernel.dk/linux-block 2016-01-21 18:19:38 -08:00
persistent-data dm space map metadata: remove unused variable in brb_pop() 2015-12-14 09:26:01 -05:00
bitmap.c md-cluster: delete useless code 2016-01-24 18:13:37 -08:00
bitmap.h
dm-bio-prison.c
dm-bio-prison.h
dm-bio-record.h
dm-bufio.c Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2016-01-12 17:11:47 -08:00
dm-bufio.h
dm-builtin.c
dm-cache-block-types.h
dm-cache-metadata.c
dm-cache-metadata.h
dm-cache-policy-cleaner.c
dm-cache-policy-internal.h
dm-cache-policy-mq.c
dm-cache-policy-smq.c
dm-cache-policy.c
dm-cache-policy.h
dm-cache-target.c dm: don't save and restore bi_private 2015-12-10 10:38:56 -05:00
dm-crypt.c dm crypt: fix a possible hang due to race condition on exit 2015-11-19 13:38:30 -05:00
dm-delay.c
dm-era-target.c
dm-exception-store.c
dm-exception-store.h dm snapshot: fix hung bios when copy error occurs 2016-01-08 20:03:05 -05:00
dm-flakey.c
dm-io.c md: more open-coded offset_in_page() 2016-01-04 10:29:12 -05:00
dm-ioctl.c
dm-kcopyd.c
dm-linear.c
dm-log-userspace-base.c
dm-log-userspace-transfer.c
dm-log-userspace-transfer.h
dm-log-writes.c
dm-log.c
dm-mpath.c dm mpath: fix infinite recursion in ioctl when no paths and !queue_if_no_path 2015-11-17 14:19:00 -05:00
dm-mpath.h
dm-path-selector.c
dm-path-selector.h
dm-queue-length.c
dm-raid1.c
dm-raid.c
dm-region-hash.c
dm-round-robin.c
dm-service-time.c
dm-snap-persistent.c dm snapshot: fix hung bios when copy error occurs 2016-01-08 20:03:05 -05:00
dm-snap-transient.c dm snapshot: fix hung bios when copy error occurs 2016-01-08 20:03:05 -05:00
dm-snap.c dm snapshot: fix hung bios when copy error occurs 2016-01-08 20:03:05 -05:00
dm-stats.c
dm-stats.h
dm-stripe.c
dm-switch.c
dm-sysfs.c
dm-table.c
dm-target.c
dm-thin-metadata.c dm thin metadata: make dm_thin_find_mapped_range() atomic 2015-12-10 10:38:55 -05:00
dm-thin-metadata.h
dm-thin.c dm thin: bump thin and thin-pool target versions 2016-01-06 20:59:40 -05:00
dm-uevent.c
dm-uevent.h
dm-verity-fec.c dm verity: add ignore_zero_blocks feature 2015-12-10 10:39:03 -05:00
dm-verity-fec.h dm verity: add support for forward error correction 2015-12-10 10:39:03 -05:00
dm-verity-target.c dm verity: add ignore_zero_blocks feature 2015-12-10 10:39:03 -05:00
dm-verity.h dm verity: add ignore_zero_blocks feature 2015-12-10 10:39:03 -05:00
dm-zero.c
dm.c dm: fix dm_rq_target_io leak on faults with .request_fn DM w/ blk-mq paths 2016-02-21 20:27:50 -05:00
dm.h
faulty.c MD: rename some functions 2016-01-20 13:52:20 -08:00
Kconfig dm verity: add support for forward error correction 2015-12-10 10:39:03 -05:00
linear.c
linear.h
Makefile dm verity: add support for forward error correction 2015-12-10 10:39:03 -05:00
md-cluster.c md-cluster: fix missing memory free 2016-01-24 18:13:18 -08:00
md-cluster.h md-cluster: append some actions when change bitmap from clustered to none 2016-01-06 11:38:57 +11:00
md.c md updates for 4.5 2016-01-15 12:28:00 -08:00
md.h md updates for 4.5 2016-01-15 12:28:00 -08:00
multipath.c md/raid: only permit hot-add of compatible integrity profiles 2016-01-14 11:49:57 +11:00
multipath.h
raid0.c treewide: Fix typos in printk 2015-12-08 14:59:19 +01:00
raid0.h
raid1.c MD: rename some functions 2016-01-20 13:52:20 -08:00
raid1.h
raid5-cache.c raid5-cache: handle journal hotadd in quiesce 2016-01-14 11:49:43 +11:00
raid5.c MD: rename some functions 2016-01-20 13:52:20 -08:00
raid5.h
raid10.c MD: rename some functions 2016-01-20 13:52:20 -08:00
raid10.h