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:
Shuhei Matsumoto 2021-10-14 13:10:33 +09:00 committed by Tomasz Zawadzki
parent 84ac18e545
commit 85c77ec183
4 changed files with 12 additions and 6 deletions

View File

@ -2894,7 +2894,7 @@ prchk_guard | Optional | bool | Enable checking of PI guar
hdgst | Optional | bool | Enable TCP header digest
ddgst | Optional | bool | Enable TCP data digest
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

View File

@ -281,6 +281,7 @@ rpc_bdev_nvme_attach_controller(struct spdk_jsonrpc_request *request,
uint32_t prchk_flags = 0;
struct nvme_ctrlr *ctrlr = NULL;
size_t len, maxlen;
bool multipath = false;
int rc;
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",
ctx->req.name);
goto cleanup;
} else if (strcasecmp(ctx->req.multipath, "failover") == 0) {
/* The user wants to add this as a failover path. */
} else if (strcasecmp(ctx->req.multipath, "failover") == 0 ||
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 &&
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;
}
if (ctx->req.multipath != NULL && strcasecmp(ctx->req.multipath, "multipath") == 0) {
multipath = true;
}
ctx->request = request;
ctx->count = NVME_MAX_BDEVS_PER_RPC;
rc = bdev_nvme_create(&trid, ctx->req.name, ctx->names, ctx->count, prchk_flags,
rpc_bdev_nvme_attach_controller_done, ctx, &ctx->req.opts,
false);
multipath);
if (rc) {
spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
goto cleanup;

View File

@ -564,7 +564,7 @@ if __name__ == "__main__":
p.add_argument('-d', '--ddgst',
help='Enable TCP data digest.', action='store_true')
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)
def bdev_nvme_get_controllers(args):

View File

@ -539,7 +539,7 @@ def bdev_nvme_attach_controller(client, name, trtype, traddr, adrfam=None, trsvc
hdgst: Enable TCP header digest (optional)
ddgst: Enable TCP data digest (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:
Names of created block devices.