kref_init(&host->ref);
        memcpy(host->nqn, hostnqn, NVMF_NQN_SIZE);
-       uuid_gen(&host->id);
 
        list_add_tail(&host->list, &nvmf_hosts);
 out_unlock:
                return NULL;
 
        kref_init(&host->ref);
-       uuid_gen(&host->id);
        snprintf(host->nqn, NVMF_NQN_SIZE,
                "nqn.2014-08.org.nvmexpress:NVMf:uuid:%pUb", &host->id);
 
        { NVMF_OPT_KATO,                "keep_alive_tmo=%d"     },
        { NVMF_OPT_HOSTNQN,             "hostnqn=%s"            },
        { NVMF_OPT_HOST_TRADDR,         "host_traddr=%s"        },
+       { NVMF_OPT_HOST_ID,             "hostid=%s"             },
        { NVMF_OPT_ERR,                 NULL                    }
 };
 
        int token, ret = 0;
        size_t nqnlen  = 0;
        int ctrl_loss_tmo = NVMF_DEF_CTRL_LOSS_TMO;
+       uuid_t hostid;
 
        /* Set defaults */
        opts->queue_size = NVMF_DEF_QUEUE_SIZE;
        if (!options)
                return -ENOMEM;
 
+       uuid_gen(&hostid);
+
        while ((p = strsep(&o, ",\n")) != NULL) {
                if (!*p)
                        continue;
                        }
                        opts->host_traddr = p;
                        break;
+               case NVMF_OPT_HOST_ID:
+                       p = match_strdup(args);
+                       if (!p) {
+                               ret = -ENOMEM;
+                               goto out;
+                       }
+                       if (uuid_parse(p, &hostid)) {
+                               ret = -EINVAL;
+                               goto out;
+                       }
+                       break;
                default:
                        pr_warn("unknown parameter or missing value '%s' in ctrl creation request\n",
                                p);
                opts->host = nvmf_default_host;
        }
 
+       uuid_copy(&opts->host->id, &hostid);
+
 out:
        if (!opts->discovery_nqn && !opts->kato)
                opts->kato = NVME_DEFAULT_KATO;
 
 #define NVMF_REQUIRED_OPTS     (NVMF_OPT_TRANSPORT | NVMF_OPT_NQN)
 #define NVMF_ALLOWED_OPTS      (NVMF_OPT_QUEUE_SIZE | NVMF_OPT_NR_IO_QUEUES | \
-                                NVMF_OPT_KATO | NVMF_OPT_HOSTNQN)
+                                NVMF_OPT_KATO | NVMF_OPT_HOSTNQN | \
+                                NVMF_OPT_HOST_ID)
 
 static struct nvme_ctrl *
 nvmf_create_ctrl(struct device *dev, const char *buf, size_t count)