projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
3a14075
)
dm mpath: fix leak of dm_mpath_io structure in blk-mq .queue_rq error path
author
Mike Snitzer
<snitzer@redhat.com>
Wed, 27 May 2015 19:23:56 +0000
(15:23 -0400)
committer
Mike Snitzer
<snitzer@redhat.com>
Wed, 27 May 2015 21:37:22 +0000
(17:37 -0400)
Otherwise kmemleak reported:
unreferenced object 0xffff88009b14e2b0 (size 16):
comm "fio", pid 4274, jiffies
4294978034
(age 1253.210s)
hex dump (first 16 bytes):
40 12 f3 99 01 88 ff ff 00 10 00 00 00 00 00 00 @...............
backtrace:
[<
ffffffff81600029
>] kmemleak_alloc+0x49/0xb0
[<
ffffffff811679a8
>] kmem_cache_alloc+0xf8/0x160
[<
ffffffff8111c950
>] mempool_alloc_slab+0x10/0x20
[<
ffffffff8111cb37
>] mempool_alloc+0x57/0x150
[<
ffffffffa04d2b61
>] __multipath_map.isra.17+0xe1/0x220 [dm_multipath]
[<
ffffffffa04d2cb5
>] multipath_clone_and_map+0x15/0x20 [dm_multipath]
[<
ffffffffa02889b5
>] map_request.isra.39+0xd5/0x220 [dm_mod]
[<
ffffffffa028b0e4
>] dm_mq_queue_rq+0x134/0x240 [dm_mod]
[<
ffffffff812cccb5
>] __blk_mq_run_hw_queue+0x1d5/0x380
[<
ffffffff812ccaa5
>] blk_mq_run_hw_queue+0xc5/0x100
[<
ffffffff812ce350
>] blk_sq_make_request+0x240/0x300
[<
ffffffff812c0f30
>] generic_make_request+0xc0/0x110
[<
ffffffff812c0ff2
>] submit_bio+0x72/0x150
[<
ffffffff811c07cb
>] do_blockdev_direct_IO+0x1f3b/0x2da0
[<
ffffffff811c166e
>] __blockdev_direct_IO+0x3e/0x40
[<
ffffffff8120aa1a
>] ext4_direct_IO+0x1aa/0x390
Fixes: e5863d9ad ("dm: allocate requests in target when stacking on blk-mq devices")
Reported-by: Bart Van Assche <bart.vanassche@sandisk.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Cc: stable@vger.kernel.org # 4.0+
drivers/md/dm-mpath.c
patch
|
blob
|
history
diff --git
a/drivers/md/dm-mpath.c
b/drivers/md/dm-mpath.c
index 63953477a07c36e771a32d5bde686bd0f05890f1..eff7bdd7731d5e437d3b83ca4803ac8c03bac6b6 100644
(file)
--- a/
drivers/md/dm-mpath.c
+++ b/
drivers/md/dm-mpath.c
@@
-429,9
+429,11
@@
static int __multipath_map(struct dm_target *ti, struct request *clone,
/* blk-mq request-based interface */
*__clone = blk_get_request(bdev_get_queue(bdev),
rq_data_dir(rq), GFP_ATOMIC);
- if (IS_ERR(*__clone))
+ if (IS_ERR(*__clone))
{
/* ENOMEM, requeue */
+ clear_mapinfo(m, map_context);
return r;
+ }
(*__clone)->bio = (*__clone)->biotail = NULL;
(*__clone)->rq_disk = bdev->bd_disk;
(*__clone)->cmd_flags |= REQ_FAILFAST_TRANSPORT;