bdev/nvme: Add "multipath" to the bdev_nvme_attach_controller to enable multipath
Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: I57aad8ffe9e60d8535e523de55f88649bfffdb39 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9869 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Mellanox Build Bot Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
parent
84ac18e545
commit
85c77ec183
@ -2894,7 +2894,7 @@ prchk_guard | Optional | bool | Enable checking of PI guar
|
|||||||
hdgst | Optional | bool | Enable TCP header digest
|
hdgst | Optional | bool | Enable TCP header digest
|
||||||
ddgst | Optional | bool | Enable TCP data digest
|
ddgst | Optional | bool | Enable TCP data digest
|
||||||
fabrics_connect_timeout_us | Optional | bool | Timeout for fabrics connect (in microseconds)
|
fabrics_connect_timeout_us | Optional | bool | Timeout for fabrics connect (in microseconds)
|
||||||
multipath | Optional | string | Multipathing behavior: disable, failover. Default is failover.
|
multipath | Optional | string | Multipathing behavior: disable, failover, multipath. Default is failover.
|
||||||
|
|
||||||
#### Example
|
#### Example
|
||||||
|
|
||||||
|
@ -281,6 +281,7 @@ rpc_bdev_nvme_attach_controller(struct spdk_jsonrpc_request *request,
|
|||||||
uint32_t prchk_flags = 0;
|
uint32_t prchk_flags = 0;
|
||||||
struct nvme_ctrlr *ctrlr = NULL;
|
struct nvme_ctrlr *ctrlr = NULL;
|
||||||
size_t len, maxlen;
|
size_t len, maxlen;
|
||||||
|
bool multipath = false;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
ctx = calloc(1, sizeof(*ctx));
|
ctx = calloc(1, sizeof(*ctx));
|
||||||
@ -416,8 +417,9 @@ rpc_bdev_nvme_attach_controller(struct spdk_jsonrpc_request *request,
|
|||||||
"A controller named %s already exists and multipath is disabled\n",
|
"A controller named %s already exists and multipath is disabled\n",
|
||||||
ctx->req.name);
|
ctx->req.name);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
} else if (strcasecmp(ctx->req.multipath, "failover") == 0) {
|
} else if (strcasecmp(ctx->req.multipath, "failover") == 0 ||
|
||||||
/* The user wants to add this as a failover path. */
|
strcasecmp(ctx->req.multipath, "multipath") == 0) {
|
||||||
|
/* The user wants to add this as a failover path or add this to create multipath. */
|
||||||
|
|
||||||
if (strncmp(trid.traddr, ctrlr_trid->traddr, sizeof(trid.traddr)) == 0 &&
|
if (strncmp(trid.traddr, ctrlr_trid->traddr, sizeof(trid.traddr)) == 0 &&
|
||||||
strncmp(trid.trsvcid, ctrlr_trid->trsvcid, sizeof(trid.trsvcid)) == 0 &&
|
strncmp(trid.trsvcid, ctrlr_trid->trsvcid, sizeof(trid.trsvcid)) == 0 &&
|
||||||
@ -473,11 +475,15 @@ rpc_bdev_nvme_attach_controller(struct spdk_jsonrpc_request *request,
|
|||||||
prchk_flags |= SPDK_NVME_IO_FLAGS_PRCHK_GUARD;
|
prchk_flags |= SPDK_NVME_IO_FLAGS_PRCHK_GUARD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ctx->req.multipath != NULL && strcasecmp(ctx->req.multipath, "multipath") == 0) {
|
||||||
|
multipath = true;
|
||||||
|
}
|
||||||
|
|
||||||
ctx->request = request;
|
ctx->request = request;
|
||||||
ctx->count = NVME_MAX_BDEVS_PER_RPC;
|
ctx->count = NVME_MAX_BDEVS_PER_RPC;
|
||||||
rc = bdev_nvme_create(&trid, ctx->req.name, ctx->names, ctx->count, prchk_flags,
|
rc = bdev_nvme_create(&trid, ctx->req.name, ctx->names, ctx->count, prchk_flags,
|
||||||
rpc_bdev_nvme_attach_controller_done, ctx, &ctx->req.opts,
|
rpc_bdev_nvme_attach_controller_done, ctx, &ctx->req.opts,
|
||||||
false);
|
multipath);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
|
spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
@ -564,7 +564,7 @@ if __name__ == "__main__":
|
|||||||
p.add_argument('-d', '--ddgst',
|
p.add_argument('-d', '--ddgst',
|
||||||
help='Enable TCP data digest.', action='store_true')
|
help='Enable TCP data digest.', action='store_true')
|
||||||
p.add_argument('--fabrics-timeout', type=int, help='Fabrics connect timeout in microseconds')
|
p.add_argument('--fabrics-timeout', type=int, help='Fabrics connect timeout in microseconds')
|
||||||
p.add_argument('-x', '--multipath', help='Set multipath behavior (disable, failover)')
|
p.add_argument('-x', '--multipath', help='Set multipath behavior (disable, failover, multipath)')
|
||||||
p.set_defaults(func=bdev_nvme_attach_controller)
|
p.set_defaults(func=bdev_nvme_attach_controller)
|
||||||
|
|
||||||
def bdev_nvme_get_controllers(args):
|
def bdev_nvme_get_controllers(args):
|
||||||
|
@ -539,7 +539,7 @@ def bdev_nvme_attach_controller(client, name, trtype, traddr, adrfam=None, trsvc
|
|||||||
hdgst: Enable TCP header digest (optional)
|
hdgst: Enable TCP header digest (optional)
|
||||||
ddgst: Enable TCP data digest (optional)
|
ddgst: Enable TCP data digest (optional)
|
||||||
fabrics_timeout: Fabrics connect timeout in us (optional)
|
fabrics_timeout: Fabrics connect timeout in us (optional)
|
||||||
multipath: The behavior when multiple paths are created ("disable", "failover"; failover if not specified)
|
multipath: The behavior when multiple paths are created ("disable", "failover", or "multipath"; failover if not specified)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Names of created block devices.
|
Names of created block devices.
|
||||||
|
Loading…
Reference in New Issue
Block a user