diff --git a/doc/jsonrpc.md b/doc/jsonrpc.md index aab6149f0..07d898733 100644 --- a/doc/jsonrpc.md +++ b/doc/jsonrpc.md @@ -3574,6 +3574,7 @@ buf_cache_size | Optional | number | The number of shared buffers max_srq_depth | Optional | number | The number of elements in a per-thread shared receive queue (RDMA only) no_srq | Optional | boolean | Disable shared receive queue even for devices that support it. (RDMA only) c2h_success | Optional | boolean | Enable C2H success optimization (TCP only) +dif_insert_or_strip | Optional | boolean | Enable DIF insert for write I/O and DIF strip for read I/O DIF (TCP only) ### Example: diff --git a/lib/event/subsystems/nvmf/nvmf_rpc.c b/lib/event/subsystems/nvmf/nvmf_rpc.c index 1c9da2ea8..f5d38665d 100644 --- a/lib/event/subsystems/nvmf/nvmf_rpc.c +++ b/lib/event/subsystems/nvmf/nvmf_rpc.c @@ -1462,6 +1462,10 @@ static const struct spdk_json_object_decoder nvmf_rpc_create_transport_decoder[] "c2h_success", offsetof(struct nvmf_rpc_create_transport_ctx, opts.c2h_success), spdk_json_decode_bool, true }, + { + "dif_insert_or_strip", offsetof(struct nvmf_rpc_create_transport_ctx, opts.dif_insert_or_strip), + spdk_json_decode_bool, true + }, }; static void @@ -1600,6 +1604,7 @@ dump_nvmf_transport(struct spdk_json_write_ctx *w, struct spdk_nvmf_transport *t spdk_json_write_named_bool(w, "no_srq", opts->no_srq); } else if (type == SPDK_NVME_TRANSPORT_TCP) { spdk_json_write_named_bool(w, "c2h_success", opts->c2h_success); + spdk_json_write_named_bool(w, "dif_insert_or_strip", opts->dif_insert_or_strip); } spdk_json_write_object_end(w); diff --git a/scripts/rpc.py b/scripts/rpc.py index 0d5744e53..1a19e0361 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -1418,7 +1418,8 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse buf_cache_size=args.buf_cache_size, max_srq_depth=args.max_srq_depth, no_srq=args.no_srq, - c2h_success=args.c2h_success) + c2h_success=args.c2h_success, + dif_insert_or_strip=args.dif_insert_or_strip) p = subparsers.add_parser('nvmf_create_transport', help='Create NVMf transport') p.add_argument('-t', '--trtype', help='Transport type (ex. RDMA)', type=str, required=True) @@ -1433,6 +1434,7 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse p.add_argument('-s', '--max-srq-depth', help='Max number of outstanding I/O per SRQ. Relevant only for RDMA transport', type=int) p.add_argument('-r', '--no-srq', action='store_true', help='Disable per-thread shared receive queue. Relevant only for RDMA transport') p.add_argument('-o', '--c2h-success', help='Enable C2H success optimization. Relevant only for TCP transport', type=bool) + p.add_argument('-f', '--dif-insert-or-strip', action='store_true', help='Enable DIF insert/strip. Relevant only for TCP transport') p.set_defaults(func=nvmf_create_transport) def get_nvmf_transports(args): diff --git a/scripts/rpc/nvmf.py b/scripts/rpc/nvmf.py index 0199e02a1..6752d2384 100644 --- a/scripts/rpc/nvmf.py +++ b/scripts/rpc/nvmf.py @@ -47,7 +47,8 @@ def nvmf_create_transport(client, buf_cache_size=None, max_srq_depth=None, no_srq=False, - c2h_success=True): + c2h_success=True, + dif_insert_or_strip=None): """NVMf Transport Create options. Args: @@ -63,6 +64,7 @@ def nvmf_create_transport(client, max_srq_depth: Max number of outstanding I/O per shared receive queue - RDMA specific (optional) no_srq: Boolean flag to disable SRQ even for devices that support it - RDMA specific (optional) c2h_success: Boolean flag to enable/disable the C2H success optimization - TCP specific (optional) + dif_insert_or_strip: Boolean flag to enable DIF insert/strip for I/O - TCP specific (optional) Returns: True or False @@ -92,6 +94,8 @@ def nvmf_create_transport(client, params['no_srq'] = no_srq if c2h_success: params['c2h_success'] = c2h_success + if dif_insert_or_strip: + params['dif_insert_or_strip'] = dif_insert_or_strip return client.call('nvmf_create_transport', params)