Commit 20f1cf63 authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Tomasz Zawadzki
Browse files

bdev/ocssd: Remove range parameter from bdev_ocssd_create RPC



It has been confirmed that there is no affected use case in
the SPDK community when we remove the range parameter from
the bdev_ocssd_create RPC.

Hence, remove the range parameter from the bdev_ocssd_create RPC,
remove range parameter from bdev_ocssd_create_bdev(), remove range
info from ocssd_bdev_config_json(), and then update unit tests
accordingly.

Signed-off-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I1b0a541b61bf26732fd028dc43becb7ca2384f8e
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6220


Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: default avatarPaul Luse <paul.e.luse@intel.com>
Community-CI: Broadcom CI
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent bd8de458
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -2,6 +2,11 @@

## v21.04: (Upcoming Release)

### bdev

For `bdev_ocssd_create` RPC, the optional parameter `range` was removed.
Only one OCSSD bdev can be created for one OCSSD namespace.

### env

Added spdk_pci_device_allow API to allow applications to add PCI addresses to
+4 −60
Original line number Diff line number Diff line
@@ -127,21 +127,10 @@ ocssd_bdev_config_json(struct spdk_json_write_ctx *w, struct nvme_bdev *nvme_bde
{
	struct nvme_bdev_ns *nvme_ns;
	struct nvme_bdev_ctrlr *nvme_bdev_ctrlr;
	struct ocssd_bdev *ocssd_bdev;
	char range_buf[128];
	int rc;

	nvme_ns = nvme_bdev_to_bdev_ns(nvme_bdev);
	assert(nvme_ns != NULL);
	nvme_bdev_ctrlr = nvme_ns->ctrlr;
	ocssd_bdev = SPDK_CONTAINEROF(nvme_bdev, struct ocssd_bdev, nvme_bdev);

	rc = snprintf(range_buf, sizeof(range_buf), "%"PRIu64"-%"PRIu64,
		      ocssd_bdev->range.begin, ocssd_bdev->range.end);
	if (rc < 0 || rc >= (int)sizeof(range_buf)) {
		SPDK_ERRLOG("Failed to convert parallel unit range\n");
		return;
	}

	spdk_json_write_object_begin(w);
	spdk_json_write_named_string(w, "method", "bdev_ocssd_create");
@@ -150,7 +139,6 @@ ocssd_bdev_config_json(struct spdk_json_write_ctx *w, struct nvme_bdev *nvme_bde
	spdk_json_write_named_string(w, "ctrlr_name", nvme_bdev_ctrlr->name);
	spdk_json_write_named_string(w, "bdev_name", nvme_bdev->disk.name);
	spdk_json_write_named_uint32(w, "nsid", nvme_ns->id);
	spdk_json_write_named_string(w, "range", range_buf);
	spdk_json_write_object_end(w);

	spdk_json_write_object_end(w);
@@ -1263,43 +1251,9 @@ bdev_ocssd_init_zones(struct bdev_ocssd_create_ctx *create_ctx)
	return bdev_ocssd_init_zone(create_ctx);
}

static bool
bdev_ocssd_verify_range(struct nvme_bdev_ns *nvme_ns,
			const struct bdev_ocssd_range *range)
{
	struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_ns);
	const struct spdk_ocssd_geometry_data *geometry = &ocssd_ns->geometry;
	struct ocssd_bdev *ocssd_bdev;
	struct nvme_bdev *nvme_bdev;
	size_t num_punits = geometry->num_pu * geometry->num_grp;

	/* First verify the range is within the geometry */
	if (range != NULL && (range->begin > range->end || range->end >= num_punits)) {
		return false;
	}

	TAILQ_FOREACH(nvme_bdev, &nvme_ns->bdevs, tailq) {
		ocssd_bdev = SPDK_CONTAINEROF(nvme_bdev, struct ocssd_bdev, nvme_bdev);

		/* Empty range means whole namespace should be used */
		if (range == NULL) {
			return false;
		}

		/* Make sure the range doesn't overlap with any other range */
		if (range->begin <= ocssd_bdev->range.end &&
		    range->end >= ocssd_bdev->range.begin) {
			return false;
		}
	}

	return true;
}

void
bdev_ocssd_create_bdev(const char *ctrlr_name, const char *bdev_name, uint32_t nsid,
		       const struct bdev_ocssd_range *range, bdev_ocssd_create_cb cb_fn,
		       void *cb_arg)
		       bdev_ocssd_create_cb cb_fn, void *cb_arg)
{
	struct nvme_bdev_ctrlr *nvme_bdev_ctrlr;
	struct bdev_ocssd_create_ctx *create_ctx = NULL;
@@ -1352,12 +1306,6 @@ bdev_ocssd_create_bdev(const char *ctrlr_name, const char *bdev_name, uint32_t n
		goto error;
	}

	if (!bdev_ocssd_verify_range(nvme_ns, range)) {
		SPDK_ERRLOG("Invalid parallel unit range\n");
		rc = -EINVAL;
		goto error;
	}

	ocssd_bdev = calloc(1, sizeof(*ocssd_bdev));
	if (!ocssd_bdev) {
		rc = -ENOMEM;
@@ -1374,18 +1322,14 @@ bdev_ocssd_create_bdev(const char *ctrlr_name, const char *bdev_name, uint32_t n
	create_ctx->nvme_ns = nvme_ns;
	create_ctx->cb_fn = cb_fn;
	create_ctx->cb_arg = cb_arg;
	create_ctx->range = range;
	create_ctx->range = NULL;

	nvme_bdev = &ocssd_bdev->nvme_bdev;
	nvme_bdev->nvme_ns = nvme_ns;
	geometry = &ocssd_ns->geometry;

	if (range != NULL) {
		ocssd_bdev->range = *range;
	} else {
	ocssd_bdev->range.begin = 0;
	ocssd_bdev->range.end = geometry->num_grp * geometry->num_pu - 1;
	}

	nvme_bdev->disk.name = strdup(bdev_name);
	if (!nvme_bdev->disk.name) {
+0 −1
Original line number Diff line number Diff line
@@ -46,7 +46,6 @@ typedef void (*bdev_ocssd_create_cb)(const char *bdev_name, int status, void *ct
typedef void (*bdev_ocssd_delete_cb)(int status, void *ctx);

void bdev_ocssd_create_bdev(const char *ctrlr_name, const char *bdev_name, uint32_t nsid,
			    const struct bdev_ocssd_range *range,
			    bdev_ocssd_create_cb cb_fn, void *cb_arg);
void bdev_ocssd_delete_bdev(const char *bdev_name, bdev_ocssd_delete_cb cb_fn, void *cb_arg);

+1 −18
Original line number Diff line number Diff line
@@ -45,14 +45,12 @@ struct rpc_create_ocssd_bdev {
	char		*ctrlr_name;
	char		*bdev_name;
	uint32_t	nsid;
	char		*range;
};

static const struct spdk_json_object_decoder rpc_create_ocssd_bdev_decoders[] = {
	{"ctrlr_name", offsetof(struct rpc_create_ocssd_bdev, ctrlr_name), spdk_json_decode_string},
	{"bdev_name", offsetof(struct rpc_create_ocssd_bdev, bdev_name), spdk_json_decode_string},
	{"nsid", offsetof(struct rpc_create_ocssd_bdev, nsid), spdk_json_decode_uint32, true},
	{"range", offsetof(struct rpc_create_ocssd_bdev, range), spdk_json_decode_string, true},
};

static void
@@ -60,13 +58,11 @@ free_rpc_create_ocssd_bdev(struct rpc_create_ocssd_bdev *rpc)
{
	free(rpc->ctrlr_name);
	free(rpc->bdev_name);
	free(rpc->range);
}

struct rpc_bdev_ocssd_create_ctx {
	struct spdk_jsonrpc_request	*request;
	struct rpc_create_ocssd_bdev	rpc;
	struct bdev_ocssd_range		range;
};

static void
@@ -92,8 +88,6 @@ static void
rpc_bdev_ocssd_create(struct spdk_jsonrpc_request *request, const struct spdk_json_val *params)
{
	struct rpc_bdev_ocssd_create_ctx *ctx;
	struct bdev_ocssd_range *range = NULL;
	int rc;

	ctx = calloc(1, sizeof(*ctx));
	if (!ctx) {
@@ -111,19 +105,8 @@ rpc_bdev_ocssd_create(struct spdk_jsonrpc_request *request, const struct spdk_js
		goto out;
	}

	if (ctx->rpc.range != NULL) {
		rc = sscanf(ctx->rpc.range, "%"PRIu64"-%"PRIu64,
			    &ctx->range.begin, &ctx->range.end);
		if (rc != 2) {
			spdk_jsonrpc_send_error_response(request, -EINVAL, "Failed to parse range");
			goto out;
		}

		range = &ctx->range;
	}

	bdev_ocssd_create_bdev(ctx->rpc.ctrlr_name, ctx->rpc.bdev_name, ctx->rpc.nsid,
			       range, rpc_bdev_ocssd_create_done, ctx);
			       rpc_bdev_ocssd_create_done, ctx);
	return;
out:
	free_rpc_create_ocssd_bdev(&ctx->rpc);
+1 −4
Original line number Diff line number Diff line
@@ -2305,16 +2305,13 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
        print_json(rpc.bdev.bdev_ocssd_create(args.client,
                                              ctrlr_name=args.ctrlr_name,
                                              bdev_name=args.name,
                                              nsid=nsid,
                                              range=args.range))
                                              nsid=nsid))

    p = subparsers.add_parser('bdev_ocssd_create',
                              help='Creates zoned bdev on specified Open Channel controller')
    p.add_argument('-c', '--ctrlr_name', help='Name of the OC NVMe controller', required=True)
    p.add_argument('-b', '--name', help='Name of the bdev to create', required=True)
    p.add_argument('-n', '--nsid', help='Namespace ID', required=False)
    p.add_argument('-r', '--range', help='Parallel unit range (in the form of BEGIN-END (inclusive))',
                   required=False)
    p.set_defaults(func=bdev_ocssd_create)

    def bdev_ocssd_delete(args):
Loading