Commit 1dd07870 authored by yangtianyu 00383654's avatar yangtianyu 00383654 Committed by Jim Harris
Browse files

bdev/null : Clean up module resources that failed to initialize.



Currently, if the Bdev subsystem initialization fails, the initialization failed
module does not call the fini function cleanup resource.

However, null module use the 'spdk_io_device_register' and spdk_zmalloc to request
resources. In failed path, it will cause resource leak when exiting the app.

To avoid this, it will cleanup resources when module initialization fails.

Change-Id: Ib1a89e5238252d69b6e64ea02a0bd826661349a5
Signed-off-by: default avatarTianyu Yang <yangtianyu2@huawei.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/450105


Reviewed-by: default avatarGangCao <gang.cao@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent b1d3b47b
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -279,6 +279,12 @@ null_bdev_destroy_cb(void *io_device, void *ctx_buf)
	spdk_poller_unregister(&ch->poller);
}

static void
_bdev_null_cleanup_cb(void *arg)
{
	spdk_free(g_null_read_buf);
}

static int
bdev_null_initialize(void)
{
@@ -358,8 +364,10 @@ bdev_null_initialize(void)

		i++;
	}

end:
	if (rc) {
		spdk_io_device_unregister(&g_null_bdev_head, _bdev_null_cleanup_cb);
	}
	return rc;
}

+18 −0
Original line number Diff line number Diff line
# SPDK vhost configuration file
#
# Please write all parameters using ASCII.
# The parameter must be quoted if it includes whitespace.

# Configuration syntax:
# Leading whitespace is ignored.
# Lines starting with '#' are comments.
# Lines ending with '\' are concatenated with the next line.
# Bracketed ([]) names define sections

[Global]
  # Instance ID for multi-process support
  # Default: 0
  #InstanceID 0

[Null]
  Dev null0 512 513
+5 −0
Original line number Diff line number Diff line
@@ -49,6 +49,11 @@ if $VHOST_APP -c /path/to/non_existing_file/conf -f $SPDK_VHOST_SCSI_TEST_DIR/vh
	fail "vhost started when specifying invalid config file"
fi

# Testing vhost start with invalid config. Vhost will exit with error as bdev module init failed
if $VHOST_APP -c $NEGATIVE_BASE_DIR/invalid.config; then
	fail "vhost started when specifying invalid config file"
fi

# Expecting vhost to fail if an incorrect argument is given
if $VHOST_APP -x -h; then
	fail "vhost started with invalid -x command line option"