gen_malloc_ocf_json () {
	local size=300 # MB
	local block_size=512
	local config

	local malloc malloc_devs=3
	for (( malloc = 0; malloc < malloc_devs; malloc++ )); do
		config+=(
			"$(
				cat <<-JSON
					{
					  "method": "bdev_malloc_create",
					  "params": {
					    "name": "Malloc$malloc",
					    "num_blocks": $(( (size << 20) / block_size )),
					    "block_size": 512
					  }
					}
				JSON
			)"
		)
	done

	local ocfs ocf ocf_mode ocf_cache ocf_core
	ocfs=(1 2)
	ocf_mode[1]=wt ocf_cache[1]=Malloc0 ocf_core[1]=Malloc1
	ocf_mode[2]=pt ocf_cache[2]=Malloc0 ocf_core[2]=Malloc2

	for ocf in "${ocfs[@]}"; do
		config+=(
			"$(
				cat <<-JSON
					{
					  "method": "bdev_ocf_create",
					  "params": {
					    "name": "MalCache$ocf",
					    "mode": "${ocf_mode[ocf]}",
					    "cache_bdev_name": "${ocf_cache[ocf]}",
					    "core_bdev_name": "${ocf_core[ocf]}"
					  }
					}
				JSON
			)"
		)
	done

	jq . <<-JSON
		{
		  "subsystems": [
		    {
		      "subsystem": "bdev",
		      "config": [
		        $(IFS=","; printf '%s\n' "${config[*]}"),
		        {
		          "method": "bdev_wait_for_examine"
		        }
		      ]
		    }
		  ]
		}
	JSON
}
