diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c
index abec2e2f75..64489ff462 100644
--- a/lib/nvmf/rdma.c
+++ b/lib/nvmf/rdma.c
@@ -521,11 +521,8 @@ nvmf_post_rdma_send(struct spdk_nvmf_request *req)
  * 3) Upon getting acknowledgement of the completion, decrement the internal
  *    count of number of outstanding requests. (spdk_nvmf_rdma_request_ack_completion)
  *
- * There are two public interfaces to initiate the process of completing a request,
- * exposed as callbacks in the transport layer.
- *
- * 1) spdk_nvmf_rdma_request_complete, which attempts to do all three steps.
- * 2) spdk_nvmf_rdma_request_release, which skips straight to step 3.
+ * The public interface to initiate the process of completing a request is
+ * spdk_nvmf_rdma_request_complete(), which calls a a callback in the transport layer.
 **/
 
 static int
@@ -1383,12 +1380,6 @@ spdk_nvmf_rdma_request_complete(struct spdk_nvmf_request *req)
 	return rc;
 }
 
-static int
-spdk_nvmf_rdma_request_release(struct spdk_nvmf_request *req)
-{
-	return spdk_nvmf_rdma_request_ack_completion(req);
-}
-
 static void
 spdk_nvmf_rdma_close_conn(struct spdk_nvmf_conn *conn)
 {
@@ -1561,7 +1552,6 @@ const struct spdk_nvmf_transport spdk_nvmf_transport_rdma = {
 	.session_remove_conn = spdk_nvmf_rdma_session_remove_conn,
 
 	.req_complete = spdk_nvmf_rdma_request_complete,
-	.req_release = spdk_nvmf_rdma_request_release,
 
 	.conn_fini = spdk_nvmf_rdma_close_conn,
 	.conn_poll = spdk_nvmf_rdma_poll,
diff --git a/lib/nvmf/request.c b/lib/nvmf/request.c
index 56f9009dc0..b8f6f2063e 100644
--- a/lib/nvmf/request.c
+++ b/lib/nvmf/request.c
@@ -373,13 +373,6 @@ spdk_nvmf_request_exec(struct spdk_nvmf_request *req)
 	switch (status) {
 	case SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE:
 		return spdk_nvmf_request_complete(req);
-	case SPDK_NVMF_REQUEST_EXEC_STATUS_RELEASE:
-		if (req->conn->transport->req_release(req)) {
-			SPDK_ERRLOG("Transport request release error!\n");
-			return -1;
-		}
-
-		return 0;
 	case SPDK_NVMF_REQUEST_EXEC_STATUS_ASYNCHRONOUS:
 		return 0;
 	default:
diff --git a/lib/nvmf/request.h b/lib/nvmf/request.h
index 1c61754e82..44fc00400d 100644
--- a/lib/nvmf/request.h
+++ b/lib/nvmf/request.h
@@ -39,7 +39,6 @@
 
 typedef enum _spdk_nvmf_request_exec_status {
 	SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE,
-	SPDK_NVMF_REQUEST_EXEC_STATUS_RELEASE,
 	SPDK_NVMF_REQUEST_EXEC_STATUS_ASYNCHRONOUS,
 } spdk_nvmf_request_exec_status;
 
diff --git a/lib/nvmf/transport.h b/lib/nvmf/transport.h
index e8f9cc8249..3d3513c6e3 100644
--- a/lib/nvmf/transport.h
+++ b/lib/nvmf/transport.h
@@ -102,18 +102,10 @@ struct spdk_nvmf_transport {
 
 	/*
 	 * Signal request completion, which sends a response
-	 * to the originator. A request can either
-	 * be completed or released, but not both.
+	 * to the originator.
 	 */
 	int (*req_complete)(struct spdk_nvmf_request *req);
 
-	/*
-	 * Signal that the request can be released without sending
-	 * a response. A request can either be completed or release,
-	 * but not both.
-	 */
-	int (*req_release)(struct spdk_nvmf_request *req);
-
 	/*
 	 * Deinitialize a connection.
 	 */