Lines Matching refs:opts

133 	if (ctrl->opts->mask & NVMF_OPT_TRADDR)
134 len += scnprintf(buf, size, "traddr=%s", ctrl->opts->traddr);
135 if (ctrl->opts->mask & NVMF_OPT_TRSVCID)
137 (len) ? "," : "", ctrl->opts->trsvcid);
138 if (ctrl->opts->mask & NVMF_OPT_HOST_TRADDR)
140 (len) ? "," : "", ctrl->opts->host_traddr);
141 if (ctrl->opts->mask & NVMF_OPT_HOST_IFACE)
143 (len) ? "," : "", ctrl->opts->host_iface);
387 uuid_copy(&data->hostid, &ctrl->opts->host->id);
389 strncpy(data->subsysnqn, ctrl->opts->subsysnqn, NVMF_NQN_SIZE);
390 strncpy(data->hostnqn, ctrl->opts->host->nqn, NVMF_NQN_SIZE);
413 if (ctrl->opts->disable_sqflow)
563 if (ctrl->opts->max_reconnects == -1 ||
564 ctrl->nr_reconnects < ctrl->opts->max_reconnects)
611 struct nvmf_ctrl_options *opts)
618 if (strcmp(ops->name, opts->transport) == 0)
655 static int nvmf_parse_options(struct nvmf_ctrl_options *opts,
667 opts->queue_size = NVMF_DEF_QUEUE_SIZE;
668 opts->nr_io_queues = num_online_cpus();
669 opts->reconnect_delay = NVMF_DEF_RECONNECT_DELAY;
670 opts->kato = 0;
671 opts->duplicate_connect = false;
672 opts->fast_io_fail_tmo = NVMF_DEF_FAIL_FAST_TMO;
673 opts->hdr_digest = false;
674 opts->data_digest = false;
675 opts->tos = -1; /* < 0 == use transport default */
690 opts->mask |= token;
698 kfree(opts->transport);
699 opts->transport = p;
707 kfree(opts->subsysnqn);
708 opts->subsysnqn = p;
709 nqnlen = strlen(opts->subsysnqn);
712 opts->subsysnqn, NVMF_NQN_SIZE);
716 opts->discovery_nqn =
717 !(strcmp(opts->subsysnqn,
726 kfree(opts->traddr);
727 opts->traddr = p;
735 kfree(opts->trsvcid);
736 opts->trsvcid = p;
749 opts->queue_size = token;
761 if (opts->discovery_nqn) {
766 opts->nr_io_queues = min_t(unsigned int,
779 } else if (token == 0 && !opts->discovery_nqn) {
783 opts->kato = token;
807 opts->fast_io_fail_tmo = token;
810 if (opts->host) {
812 opts->host->nqn);
842 opts->reconnect_delay = token;
850 kfree(opts->host_traddr);
851 opts->host_traddr = p;
859 kfree(opts->host_iface);
860 opts->host_iface = p;
878 opts->duplicate_connect = true;
881 opts->disable_sqflow = true;
884 opts->hdr_digest = true;
887 opts->data_digest = true;
899 opts->nr_write_queues = token;
911 opts->nr_poll_queues = token;
927 opts->tos = token;
930 opts->discovery_nqn = true;
943 kfree(opts->dhchap_secret);
944 opts->dhchap_secret = p;
957 kfree(opts->dhchap_ctrl_secret);
958 opts->dhchap_ctrl_secret = p;
968 if (opts->discovery_nqn) {
969 opts->nr_io_queues = 0;
970 opts->nr_write_queues = 0;
971 opts->nr_poll_queues = 0;
972 opts->duplicate_connect = true;
974 if (!opts->kato)
975 opts->kato = NVME_DEFAULT_KATO;
978 opts->max_reconnects = -1;
980 opts->max_reconnects = DIV_ROUND_UP(ctrl_loss_tmo,
981 opts->reconnect_delay);
982 if (ctrl_loss_tmo < opts->fast_io_fail_tmo)
984 opts->fast_io_fail_tmo, ctrl_loss_tmo);
987 opts->host = nvmf_host_add(hostnqn, &hostid);
988 if (IS_ERR(opts->host)) {
989 ret = PTR_ERR(opts->host);
990 opts->host = NULL;
999 void nvmf_set_io_queues(struct nvmf_ctrl_options *opts, u32 nr_io_queues,
1002 if (opts->nr_write_queues && opts->nr_io_queues < nr_io_queues) {
1008 io_queues[HCTX_TYPE_READ] = opts->nr_io_queues;
1011 min(opts->nr_write_queues, nr_io_queues);
1020 min(opts->nr_io_queues, nr_io_queues);
1024 if (opts->nr_poll_queues && nr_io_queues) {
1027 min(opts->nr_poll_queues, nr_io_queues);
1035 struct nvmf_ctrl_options *opts = ctrl->opts;
1037 if (opts->nr_write_queues && io_queues[HCTX_TYPE_READ]) {
1058 if (opts->nr_poll_queues && io_queues[HCTX_TYPE_POLL]) {
1075 static int nvmf_check_required_opts(struct nvmf_ctrl_options *opts,
1078 if ((opts->mask & required_opts) != required_opts) {
1083 !(opt_tokens[i].token & opts->mask)) {
1096 struct nvmf_ctrl_options *opts)
1098 if (!nvmf_ctlr_matches_baseopts(ctrl, opts) ||
1099 strcmp(opts->traddr, ctrl->opts->traddr) ||
1100 strcmp(opts->trsvcid, ctrl->opts->trsvcid))
1116 if ((opts->mask & NVMF_OPT_HOST_TRADDR) &&
1117 (ctrl->opts->mask & NVMF_OPT_HOST_TRADDR)) {
1118 if (strcmp(opts->host_traddr, ctrl->opts->host_traddr))
1120 } else if ((opts->mask & NVMF_OPT_HOST_TRADDR) ||
1121 (ctrl->opts->mask & NVMF_OPT_HOST_TRADDR)) {
1125 if ((opts->mask & NVMF_OPT_HOST_IFACE) &&
1126 (ctrl->opts->mask & NVMF_OPT_HOST_IFACE)) {
1127 if (strcmp(opts->host_iface, ctrl->opts->host_iface))
1129 } else if ((opts->mask & NVMF_OPT_HOST_IFACE) ||
1130 (ctrl->opts->mask & NVMF_OPT_HOST_IFACE)) {
1138 static int nvmf_check_allowed_opts(struct nvmf_ctrl_options *opts,
1141 if (opts->mask & ~allowed_opts) {
1145 if ((opt_tokens[i].token & opts->mask) &&
1158 void nvmf_free_options(struct nvmf_ctrl_options *opts)
1160 nvmf_host_put(opts->host);
1161 kfree(opts->transport);
1162 kfree(opts->traddr);
1163 kfree(opts->trsvcid);
1164 kfree(opts->subsysnqn);
1165 kfree(opts->host_traddr);
1166 kfree(opts->host_iface);
1167 kfree(opts->dhchap_secret);
1168 kfree(opts->dhchap_ctrl_secret);
1169 kfree(opts);
1184 struct nvmf_ctrl_options *opts;
1189 opts = kzalloc(sizeof(*opts), GFP_KERNEL);
1190 if (!opts)
1193 ret = nvmf_parse_options(opts, buf);
1198 request_module("nvme-%s", opts->transport);
1205 ret = nvmf_check_required_opts(opts, NVMF_REQUIRED_OPTS);
1208 opts->mask &= ~NVMF_REQUIRED_OPTS;
1211 ops = nvmf_lookup_transport(opts);
1214 opts->transport);
1225 ret = nvmf_check_required_opts(opts, ops->required_opts);
1228 ret = nvmf_check_allowed_opts(opts, NVMF_ALLOWED_OPTS |
1233 ctrl = ops->create_ctrl(dev, opts);
1248 nvmf_free_options(opts);