Commit 5d8b5363 authored by Sebastian Brzezinka's avatar Sebastian Brzezinka Committed by Tomasz Zawadzki
Browse files

nvme_cuse: add SPDK_CUSE_GET_TRANSPORT command



Since nvme-cli started using `sysfs`, transport information is missing
and cannot be obtained otherwise by spdk plugin. This patch adds ioctl
command that exposes `trstring` and `traddr` to nvme-cli spdk plugin.

Signed-off-by: default avatarSebastian Brzezinka <sebastian.brzezinka@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/18706

 (master)

(cherry picked from commit c714321f)
Change-Id: I91b9637958f8c2b1c5befa5775fe8ca467107532
Signed-off-by: default avatarKrzysztof Karas <krzysztof.karas@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/20109


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
parent b40527ca
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -739,6 +739,29 @@ cuse_getid(fuse_req_t req, int cmd, void *arg,
	fuse_reply_ioctl(req, cuse_device->nsid, NULL, 0);
}

struct cuse_transport {
	char trstring[SPDK_NVMF_TRSTRING_MAX_LEN + 1];
	char traddr[SPDK_NVMF_TRADDR_MAX_LEN + 1];
};

#define SPDK_CUSE_GET_TRANSPORT _IOWR('n', 0x1, struct cuse_transport)

static void
cuse_get_transport(fuse_req_t req, int cmd, void *arg,
		   struct fuse_file_info *fi, unsigned flags,
		   const void *in_buf, size_t in_bufsz, size_t out_bufsz)
{
	struct cuse_device *cuse_device = fuse_req_userdata(req);
	struct cuse_transport tr = {};

	FUSE_REPLY_CHECK_BUFFER(req, arg, out_bufsz, tr);

	memcpy(tr.trstring, cuse_device->ctrlr->trid.trstring, SPDK_NVMF_TRSTRING_MAX_LEN + 1);
	memcpy(tr.traddr, cuse_device->ctrlr->trid.traddr, SPDK_NVMF_TRADDR_MAX_LEN + 1);

	fuse_reply_ioctl(req, 0, &tr, sizeof(tr));
}

static void
cuse_ctrlr_ioctl(fuse_req_t req, int cmd, void *arg,
		 struct fuse_file_info *fi, unsigned flags,
@@ -765,6 +788,11 @@ cuse_ctrlr_ioctl(fuse_req_t req, int cmd, void *arg,
		cuse_nvme_rescan(req, cmd, arg, fi, flags, in_buf, in_bufsz, out_bufsz);
		break;

	case SPDK_CUSE_GET_TRANSPORT:
		SPDK_DEBUGLOG(nvme_cuse, "SPDK_CUSE_GET_TRANSPORT\n");
		cuse_get_transport(req, cmd, arg, fi, flags, in_buf, in_bufsz, out_bufsz);
		break;

	default:
		SPDK_ERRLOG("Unsupported IOCTL 0x%X.\n", cmd);
		fuse_reply_err(req, ENOTTY);