Commit 52a9661d authored by Wojciech Malikowski's avatar Wojciech Malikowski Committed by Tomasz Zawadzki
Browse files

bdev/ftl: Remove punit parameter from ftl bdev configuration



FTL library is consuming whole OCSSD device
so punit parameter is not needed for bdev ftl
configuration.

Change-Id: I56f62ea6d09b3157b70c02ccfffcd3cb07ba4597
Signed-off-by: default avatarWojciech Malikowski <wojciech.malikowski@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/467950


Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com>
parent e47e16d3
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1106,7 +1106,6 @@ spdk_ftl_dev_init(const struct spdk_ftl_dev_init_opts *_opts, spdk_ftl_init_fn c
	dev->init_ctx.cb_fn = cb_fn;
	dev->init_ctx.cb_arg = cb_arg;
	dev->init_ctx.thread = spdk_get_thread();
	dev->range = opts.range;
	dev->limit = SPDK_FTL_LIMIT_MAX;

	dev->name = strdup(opts.name);
@@ -1127,6 +1126,9 @@ spdk_ftl_dev_init(const struct spdk_ftl_dev_init_opts *_opts, spdk_ftl_init_fn c
		goto fail_sync;
	}

	dev->range.begin = 0;
	dev->range.end = dev->geo.num_pu * dev->geo.num_grp - 1;

	if (ftl_check_init_opts(&opts, &dev->geo)) {
		SPDK_ERRLOG("Invalid device configuration\n");
		goto fail_sync;
+1 −71
Original line number Diff line number Diff line
@@ -418,7 +418,6 @@ _bdev_ftl_write_config_info(struct ftl_bdev *ftl_bdev, struct spdk_json_write_ct
	}

	spdk_json_write_named_string(w, "traddr", ftl_bdev->ctrlr->trid.traddr);
	spdk_json_write_named_string_fmt(w, "punits", "%d-%d", attrs.range.begin, attrs.range.end);

	if (ftl_bdev->cache_bdev_desc) {
		cache_bdev = spdk_bdev_get_name(spdk_bdev_desc_get_bdev(ftl_bdev->cache_bdev_desc));
@@ -492,59 +491,6 @@ static const struct spdk_bdev_fn_table ftl_fn_table = {
	.dump_info_json		= bdev_ftl_dump_info_json,
};

int
bdev_ftl_parse_punits(struct spdk_ftl_punit_range *range, const char *range_string)
{
	regex_t range_regex;
	regmatch_t range_match;
	unsigned long begin = 0, end = 0;
	char *str_ptr;
	int rc = -1;

	if (regcomp(&range_regex, "\\b[[:digit:]]+-[[:digit:]]+\\b", REG_EXTENDED)) {
		SPDK_ERRLOG("Regex init error\n");
		return -1;
	}

	if (regexec(&range_regex, range_string, 1, &range_match, 0)) {
		SPDK_WARNLOG("Invalid range\n");
		goto out;
	}

	errno = 0;
	begin = strtoul(range_string + range_match.rm_so, &str_ptr, 10);
	if ((begin == ULONG_MAX && errno == ERANGE) || (begin == 0 && errno == EINVAL)) {
		SPDK_WARNLOG("Invalid range '%s'\n", range_string);
		goto out;
	}

	errno = 0;
	/* +1 to skip the '-' delimiter */
	end = strtoul(str_ptr + 1, NULL, 10);
	if ((end == ULONG_MAX && errno == ERANGE) || (end == 0 && errno == EINVAL)) {
		SPDK_WARNLOG("Invalid range '%s'\n", range_string);
		goto out;
	}

	if (begin > UINT_MAX || end > UINT_MAX) {
		SPDK_WARNLOG("Invalid range '%s'\n", range_string);
		goto out;
	}

	if (begin > end) {
		SPDK_WARNLOG("Invalid range '%s'\n", range_string);
		goto out;
	}

	range->begin = (unsigned int)begin;
	range->end = (unsigned int)end;

	rc = 0;
out:
	regfree(&range_regex);
	return rc;
}

static int
bdev_ftl_defer_init(struct ftl_bdev_init_opts *opts)
{
@@ -599,19 +545,6 @@ bdev_ftl_read_bdev_config(struct spdk_conf_section *sp,
		opts->name = val;

		val = spdk_conf_section_get_nmval(sp, "TransportID", i, 2);
		if (!val) {
			SPDK_ERRLOG("No punit range provided for TransportID: %s\n", trid);
			rc = -1;
			break;
		}

		if (bdev_ftl_parse_punits(&opts->range, val)) {
			SPDK_ERRLOG("Invalid punit range for TransportID: %s\n", trid);
			rc = -1;
			break;
		}

		val = spdk_conf_section_get_nmval(sp, "TransportID", i, 3);
		if (!val) {
			SPDK_ERRLOG("No UUID provided for TransportID: %s\n", trid);
			rc = -1;
@@ -631,7 +564,7 @@ bdev_ftl_read_bdev_config(struct spdk_conf_section *sp,
			opts->mode = 0;
		}

		val = spdk_conf_section_get_nmval(sp, "TransportID", i, 4);
		val = spdk_conf_section_get_nmval(sp, "TransportID", i, 3);
		if (!val) {
			continue;
		}
@@ -741,8 +674,6 @@ bdev_ftl_create_cb(struct spdk_ftl_dev *dev, void *ctx, int status)
	SPDK_DEBUGLOG(SPDK_LOG_BDEV_FTL, "Creating bdev %s:\n", ftl_bdev->bdev.name);
	SPDK_DEBUGLOG(SPDK_LOG_BDEV_FTL, "\tblock_len:\t%zu\n", attrs.lbk_size);
	SPDK_DEBUGLOG(SPDK_LOG_BDEV_FTL, "\tblock_cnt:\t%"PRIu64"\n", attrs.lbk_cnt);
	SPDK_DEBUGLOG(SPDK_LOG_BDEV_FTL, "\tpunits:\t\t%u-%u\n", attrs.range.begin,
		      attrs.range.end);

	ftl_bdev->bdev.ctxt = ftl_bdev;
	ftl_bdev->bdev.fn_table = &ftl_fn_table;
@@ -841,7 +772,6 @@ bdev_ftl_create(struct spdk_nvme_ctrlr *ctrlr, const struct ftl_bdev_init_opts *

	opts.ctrlr = ctrlr;
	opts.trid = bdev_opts->trid;
	opts.range = bdev_opts->range;
	opts.mode = bdev_opts->mode;
	opts.uuid = bdev_opts->uuid;
	opts.name = ftl_bdev->bdev.name;
+0 −4
Original line number Diff line number Diff line
@@ -41,7 +41,6 @@

#define FTL_MAX_CONTROLLERS	64
#define FTL_MAX_BDEVS		(FTL_MAX_CONTROLLERS * 128)
#define FTL_RANGE_MAX_LENGTH	32

struct spdk_bdev;
struct spdk_uuid;
@@ -54,8 +53,6 @@ struct ftl_bdev_info {
struct ftl_bdev_init_opts {
	/* NVMe controller's transport ID */
	struct spdk_nvme_transport_id		trid;
	/* Parallel unit range */
	struct spdk_ftl_punit_range		range;
	/* Bdev's name */
	const char				*name;
	/* Write buffer bdev's name */
@@ -70,7 +67,6 @@ struct ftl_bdev_init_opts {

typedef void (*ftl_bdev_init_fn)(const struct ftl_bdev_info *, void *, int);

int	bdev_ftl_parse_punits(struct spdk_ftl_punit_range *range, const char *range_string);
int	bdev_ftl_init_bdev(struct ftl_bdev_init_opts *opts, ftl_bdev_init_fn cb,
			   void *cb_arg);
void	bdev_ftl_delete_bdev(const char *name, spdk_bdev_unregister_cb cb_fn, void *cb_arg);
+0 −14
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@ struct rpc_bdev_ftl_create {
	char *name;
	char *trtype;
	char *traddr;
	char *punits;
	char *uuid;
	char *cache_bdev;
	struct spdk_ftl_conf ftl_conf;
@@ -55,7 +54,6 @@ free_rpc_bdev_ftl_create(struct rpc_bdev_ftl_create *req)
	free(req->name);
	free(req->trtype);
	free(req->traddr);
	free(req->punits);
	free(req->uuid);
	free(req->cache_bdev);
}
@@ -64,7 +62,6 @@ static const struct spdk_json_object_decoder rpc_bdev_ftl_create_decoders[] = {
	{"name", offsetof(struct rpc_bdev_ftl_create, name), spdk_json_decode_string},
	{"trtype", offsetof(struct rpc_bdev_ftl_create, trtype), spdk_json_decode_string},
	{"traddr", offsetof(struct rpc_bdev_ftl_create, traddr), spdk_json_decode_string},
	{"punits", offsetof(struct rpc_bdev_ftl_create, punits), spdk_json_decode_string},
	{"uuid", offsetof(struct rpc_bdev_ftl_create, uuid), spdk_json_decode_string, true},
	{"cache", offsetof(struct rpc_bdev_ftl_create, cache_bdev), spdk_json_decode_string, true},
	{
@@ -125,8 +122,6 @@ static const struct spdk_json_object_decoder rpc_bdev_ftl_create_decoders[] = {
	},
};

#define FTL_RANGE_MAX_LENGTH 32

static void
_spdk_rpc_bdev_ftl_create_cb(const struct ftl_bdev_info *bdev_info, void *ctx, int status)
{
@@ -156,7 +151,6 @@ spdk_rpc_bdev_ftl_create(struct spdk_jsonrpc_request *request,
{
	struct rpc_bdev_ftl_create req = {};
	struct ftl_bdev_init_opts opts = {};
	char range[FTL_RANGE_MAX_LENGTH];
	int rc;

	spdk_ftl_conf_init_defaults(&req.ftl_conf);
@@ -198,14 +192,6 @@ spdk_rpc_bdev_ftl_create(struct spdk_jsonrpc_request *request,

	/* Parse traddr */
	snprintf(opts.trid.traddr, sizeof(opts.trid.traddr), "%s", req.traddr);
	snprintf(range, sizeof(range), "%s", req.punits);

	if (bdev_ftl_parse_punits(&opts.range, req.punits)) {
		spdk_jsonrpc_send_error_response_fmt(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
						     "Failed to parse parallel unit range: %s",
						     req.punits);
		goto invalid;
	}

	if (req.uuid) {
		if (spdk_uuid_parse(&opts.uuid, req.uuid) < 0) {
+9 −12
Original line number Diff line number Diff line
@@ -5,20 +5,19 @@ set -e
rootdir=$(readlink -f $(dirname $0))/..

function usage {
	echo "Usage: [-j] $0 -a TRANSPORT_ADDR -n BDEV_NAME -l PUNITS [-u UUID] [-c CACHE]"
	echo "Usage: [-j] $0 -a TRANSPORT_ADDR -n BDEV_NAME [-u UUID] [-c CACHE]"
	echo "UUID is required when restoring device state"
	echo
	echo "-j json format"
	echo "TRANSPORT_ADDR - SSD's PCIe address"
	echo "BDEV_NAME - name of the bdev"
	echo "PUNITS - bdev's parallel unit range (e.g. 0-3)"
	echo "UUID - bdev's uuid (used when in restore mode)"
	echo "CACHE - name of the bdev to be used as write buffer cache"
}

function create_classic_config {
	echo "[Ftl]"
	echo "  TransportID \"trtype:PCIe traddr:$1\" $2 $3 $4 $5"
	echo "  TransportID \"trtype:PCIe traddr:$1\" $2 $3 $4"
}

function create_json_config()
@@ -32,12 +31,11 @@ function create_json_config()
	echo "\"name\": \"$2\","
	echo '"trtype": "PCIe",'
	echo "\"traddr\": \"$1\","
	echo "\"punits\": \"$3\","
	if [ -n "$5" ]; then
		echo "\"uuid\": \"$4\","
		echo "\"cache\": \"$5\""
	if [ -n "$4" ]; then
		echo "\"uuid\": \"$3\","
		echo "\"cache\": \"$4\""
	else
		echo "\"uuid\": \"$4\""
		echo "\"uuid\": \"$3\""
	fi
	echo '}'
	echo '}'
@@ -52,7 +50,6 @@ while getopts "ja:n:l:m:u:c:h" arg; do
		j)	json=1		;;
		a)	addr=$OPTARG	;;
		n)	name=$OPTARG	;;
		l)	punits=$OPTARG	;;
		u)	uuid=$OPTARG	;;
		c)	cache=$OPTARG	;;
		h)	usage
@@ -62,13 +59,13 @@ while getopts "ja:n:l:m:u:c:h" arg; do
	esac
done

if [[ -z "$addr" || -z "$name" || -z "$punits" ]]; then
if [[ -z "$addr" || -z "$name" ]]; then
	usage
	exit 1
fi

if [ -n "$json" ]; then
	create_json_config $addr $name $punits $uuid $cache
	create_json_config $addr $name $uuid $cache
else
	create_classic_config $addr $name $punits $uuid $cache
	create_classic_config $addr $name $uuid $cache
fi
Loading