From ec5972cb0df52bd53318ca7d2249503aa7a291a8 Mon Sep 17 00:00:00 2001 From: Darek Stojaczyk Date: Wed, 2 Jan 2019 14:20:36 +0100 Subject: [PATCH] bdev: fix io_channel leaks on bdev channel creation failure The underlying io_channel created by a bdev module could be never freed in various cases due to missing spdk_put_io_channel() calls. Change-Id: If1aa736f67f0354c4f9dcdf61d3f1e6b859b4c48 Signed-off-by: Darek Stojaczyk Reviewed-on: https://review.gerrithub.io/c/438803 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: wuzhouhui Reviewed-by: Changpeng Liu Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto --- lib/bdev/bdev.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 8d5c4de0a..f5a97e319 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -1818,6 +1818,7 @@ spdk_bdev_channel_create(void *io_device, void *ctx_buf) mgmt_io_ch = spdk_get_io_channel(&g_bdev_mgr); if (!mgmt_io_ch) { + spdk_put_io_channel(ch->channel); return -1; } @@ -1833,6 +1834,7 @@ spdk_bdev_channel_create(void *io_device, void *ctx_buf) if (shared_resource == NULL) { shared_resource = calloc(1, sizeof(*shared_resource)); if (shared_resource == NULL) { + spdk_put_io_channel(ch->channel); spdk_put_io_channel(mgmt_io_ch); return -1; }