1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Sysfs interface for the NVMe core driver. 4 * 5 * Copyright (c) 2011-2014, Intel Corporation. 6 */ 7 8 #include <linux/nvme-auth.h> 9 10 #include "nvme.h" 11 #include "fabrics.h" 12 13 static ssize_t nvme_sysfs_reset(struct device *dev, 14 struct device_attribute *attr, const char *buf, 15 size_t count) 16 { 17 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 18 int ret; 19 20 ret = nvme_reset_ctrl_sync(ctrl); 21 if (ret < 0) 22 return ret; 23 return count; 24 } 25 static DEVICE_ATTR(reset_controller, S_IWUSR, NULL, nvme_sysfs_reset); 26 27 static ssize_t nvme_sysfs_rescan(struct device *dev, 28 struct device_attribute *attr, const char *buf, 29 size_t count) 30 { 31 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 32 33 nvme_queue_scan(ctrl); 34 return count; 35 } 36 static DEVICE_ATTR(rescan_controller, S_IWUSR, NULL, nvme_sysfs_rescan); 37 38 static ssize_t nvme_adm_passthru_err_log_enabled_show(struct device *dev, 39 struct device_attribute *attr, char *buf) 40 { 41 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 42 43 return sysfs_emit(buf, 44 ctrl->passthru_err_log_enabled ? "on\n" : "off\n"); 45 } 46 47 static ssize_t nvme_adm_passthru_err_log_enabled_store(struct device *dev, 48 struct device_attribute *attr, const char *buf, size_t count) 49 { 50 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 51 bool passthru_err_log_enabled; 52 int err; 53 54 err = kstrtobool(buf, &passthru_err_log_enabled); 55 if (err) 56 return -EINVAL; 57 58 ctrl->passthru_err_log_enabled = passthru_err_log_enabled; 59 60 return count; 61 } 62 63 static inline struct nvme_ns_head *dev_to_ns_head(struct device *dev) 64 { 65 struct gendisk *disk = dev_to_disk(dev); 66 67 if (nvme_disk_is_ns_head(disk)) 68 return disk->private_data; 69 return nvme_get_ns_from_dev(dev)->head; 70 } 71 72 static ssize_t nvme_io_passthru_err_log_enabled_show(struct device *dev, 73 struct device_attribute *attr, char *buf) 74 { 75 struct nvme_ns_head *head = dev_to_ns_head(dev); 76 77 return sysfs_emit(buf, head->passthru_err_log_enabled ? "on\n" : "off\n"); 78 } 79 80 static ssize_t nvme_io_passthru_err_log_enabled_store(struct device *dev, 81 struct device_attribute *attr, const char *buf, size_t count) 82 { 83 struct nvme_ns_head *head = dev_to_ns_head(dev); 84 bool passthru_err_log_enabled; 85 int err; 86 87 err = kstrtobool(buf, &passthru_err_log_enabled); 88 if (err) 89 return -EINVAL; 90 head->passthru_err_log_enabled = passthru_err_log_enabled; 91 92 return count; 93 } 94 95 static struct device_attribute dev_attr_adm_passthru_err_log_enabled = \ 96 __ATTR(passthru_err_log_enabled, S_IRUGO | S_IWUSR, \ 97 nvme_adm_passthru_err_log_enabled_show, nvme_adm_passthru_err_log_enabled_store); 98 99 static struct device_attribute dev_attr_io_passthru_err_log_enabled = \ 100 __ATTR(passthru_err_log_enabled, S_IRUGO | S_IWUSR, \ 101 nvme_io_passthru_err_log_enabled_show, nvme_io_passthru_err_log_enabled_store); 102 103 static ssize_t wwid_show(struct device *dev, struct device_attribute *attr, 104 char *buf) 105 { 106 struct nvme_ns_head *head = dev_to_ns_head(dev); 107 struct nvme_ns_ids *ids = &head->ids; 108 struct nvme_subsystem *subsys = head->subsys; 109 int serial_len = sizeof(subsys->serial); 110 int model_len = sizeof(subsys->model); 111 112 if (!uuid_is_null(&ids->uuid)) 113 return sysfs_emit(buf, "uuid.%pU\n", &ids->uuid); 114 115 if (memchr_inv(ids->nguid, 0, sizeof(ids->nguid))) 116 return sysfs_emit(buf, "eui.%16phN\n", ids->nguid); 117 118 if (memchr_inv(ids->eui64, 0, sizeof(ids->eui64))) 119 return sysfs_emit(buf, "eui.%8phN\n", ids->eui64); 120 121 while (serial_len > 0 && (subsys->serial[serial_len - 1] == ' ' || 122 subsys->serial[serial_len - 1] == '\0')) 123 serial_len--; 124 while (model_len > 0 && (subsys->model[model_len - 1] == ' ' || 125 subsys->model[model_len - 1] == '\0')) 126 model_len--; 127 128 return sysfs_emit(buf, "nvme.%04x-%*phN-%*phN-%08x\n", subsys->vendor_id, 129 serial_len, subsys->serial, model_len, subsys->model, 130 head->ns_id); 131 } 132 static DEVICE_ATTR_RO(wwid); 133 134 static ssize_t nguid_show(struct device *dev, struct device_attribute *attr, 135 char *buf) 136 { 137 return sysfs_emit(buf, "%pU\n", dev_to_ns_head(dev)->ids.nguid); 138 } 139 static DEVICE_ATTR_RO(nguid); 140 141 static ssize_t uuid_show(struct device *dev, struct device_attribute *attr, 142 char *buf) 143 { 144 struct nvme_ns_ids *ids = &dev_to_ns_head(dev)->ids; 145 146 /* For backward compatibility expose the NGUID to userspace if 147 * we have no UUID set 148 */ 149 if (uuid_is_null(&ids->uuid)) { 150 dev_warn_once(dev, 151 "No UUID available providing old NGUID\n"); 152 return sysfs_emit(buf, "%pU\n", ids->nguid); 153 } 154 return sysfs_emit(buf, "%pU\n", &ids->uuid); 155 } 156 static DEVICE_ATTR_RO(uuid); 157 158 static ssize_t eui_show(struct device *dev, struct device_attribute *attr, 159 char *buf) 160 { 161 return sysfs_emit(buf, "%8ph\n", dev_to_ns_head(dev)->ids.eui64); 162 } 163 static DEVICE_ATTR_RO(eui); 164 165 static ssize_t nsid_show(struct device *dev, struct device_attribute *attr, 166 char *buf) 167 { 168 return sysfs_emit(buf, "%d\n", dev_to_ns_head(dev)->ns_id); 169 } 170 static DEVICE_ATTR_RO(nsid); 171 172 static ssize_t csi_show(struct device *dev, struct device_attribute *attr, 173 char *buf) 174 { 175 return sysfs_emit(buf, "%u\n", dev_to_ns_head(dev)->ids.csi); 176 } 177 static DEVICE_ATTR_RO(csi); 178 179 static ssize_t metadata_bytes_show(struct device *dev, 180 struct device_attribute *attr, char *buf) 181 { 182 return sysfs_emit(buf, "%u\n", dev_to_ns_head(dev)->ms); 183 } 184 static DEVICE_ATTR_RO(metadata_bytes); 185 186 static int ns_head_update_nuse(struct nvme_ns_head *head) 187 { 188 struct nvme_id_ns *id; 189 struct nvme_ns *ns; 190 int srcu_idx, ret = -EWOULDBLOCK; 191 192 /* Avoid issuing commands too often by rate limiting the update */ 193 if (!__ratelimit(&head->rs_nuse)) 194 return 0; 195 196 srcu_idx = srcu_read_lock(&head->srcu); 197 ns = nvme_find_path(head); 198 if (!ns) 199 goto out_unlock; 200 201 ret = nvme_identify_ns(ns->ctrl, head->ns_id, &id); 202 if (ret) 203 goto out_unlock; 204 205 head->nuse = le64_to_cpu(id->nuse); 206 kfree(id); 207 208 out_unlock: 209 srcu_read_unlock(&head->srcu, srcu_idx); 210 return ret; 211 } 212 213 static int ns_update_nuse(struct nvme_ns *ns) 214 { 215 struct nvme_id_ns *id; 216 int ret; 217 218 /* Avoid issuing commands too often by rate limiting the update. */ 219 if (!__ratelimit(&ns->head->rs_nuse)) 220 return 0; 221 222 ret = nvme_identify_ns(ns->ctrl, ns->head->ns_id, &id); 223 if (ret) 224 return ret; 225 226 ns->head->nuse = le64_to_cpu(id->nuse); 227 kfree(id); 228 return 0; 229 } 230 231 static ssize_t nuse_show(struct device *dev, struct device_attribute *attr, 232 char *buf) 233 { 234 struct nvme_ns_head *head = dev_to_ns_head(dev); 235 struct gendisk *disk = dev_to_disk(dev); 236 int ret; 237 238 if (nvme_disk_is_ns_head(disk)) 239 ret = ns_head_update_nuse(head); 240 else 241 ret = ns_update_nuse(disk->private_data); 242 if (ret) 243 return ret; 244 245 return sysfs_emit(buf, "%llu\n", head->nuse); 246 } 247 static DEVICE_ATTR_RO(nuse); 248 249 static struct attribute *nvme_ns_attrs[] = { 250 &dev_attr_wwid.attr, 251 &dev_attr_uuid.attr, 252 &dev_attr_nguid.attr, 253 &dev_attr_eui.attr, 254 &dev_attr_csi.attr, 255 &dev_attr_nsid.attr, 256 &dev_attr_metadata_bytes.attr, 257 &dev_attr_nuse.attr, 258 #ifdef CONFIG_NVME_MULTIPATH 259 &dev_attr_ana_grpid.attr, 260 &dev_attr_ana_state.attr, 261 &dev_attr_queue_depth.attr, 262 &dev_attr_numa_nodes.attr, 263 #endif 264 &dev_attr_io_passthru_err_log_enabled.attr, 265 NULL, 266 }; 267 268 static umode_t nvme_ns_attrs_are_visible(struct kobject *kobj, 269 struct attribute *a, int n) 270 { 271 struct device *dev = container_of(kobj, struct device, kobj); 272 struct nvme_ns_ids *ids = &dev_to_ns_head(dev)->ids; 273 274 if (a == &dev_attr_uuid.attr) { 275 if (uuid_is_null(&ids->uuid) && 276 !memchr_inv(ids->nguid, 0, sizeof(ids->nguid))) 277 return 0; 278 } 279 if (a == &dev_attr_nguid.attr) { 280 if (!memchr_inv(ids->nguid, 0, sizeof(ids->nguid))) 281 return 0; 282 } 283 if (a == &dev_attr_eui.attr) { 284 if (!memchr_inv(ids->eui64, 0, sizeof(ids->eui64))) 285 return 0; 286 } 287 #ifdef CONFIG_NVME_MULTIPATH 288 if (a == &dev_attr_ana_grpid.attr || a == &dev_attr_ana_state.attr) { 289 /* per-path attr */ 290 if (nvme_disk_is_ns_head(dev_to_disk(dev))) 291 return 0; 292 if (!nvme_ctrl_use_ana(nvme_get_ns_from_dev(dev)->ctrl)) 293 return 0; 294 } 295 if (a == &dev_attr_queue_depth.attr || a == &dev_attr_numa_nodes.attr) { 296 if (nvme_disk_is_ns_head(dev_to_disk(dev))) 297 return 0; 298 } 299 #endif 300 return a->mode; 301 } 302 303 static const struct attribute_group nvme_ns_attr_group = { 304 .attrs = nvme_ns_attrs, 305 .is_visible = nvme_ns_attrs_are_visible, 306 }; 307 308 #ifdef CONFIG_NVME_MULTIPATH 309 /* 310 * NOTE: The dummy attribute does not appear in sysfs. It exists solely to allow 311 * control over the visibility of the multipath sysfs node. Without at least one 312 * attribute defined in nvme_ns_mpath_attrs[], the sysfs implementation does not 313 * invoke the multipath_sysfs_group_visible() method. As a result, we would not 314 * be able to control the visibility of the multipath sysfs node. 315 */ 316 static struct attribute dummy_attr = { 317 .name = "dummy", 318 }; 319 320 static struct attribute *nvme_ns_mpath_attrs[] = { 321 &dummy_attr, 322 NULL, 323 }; 324 325 static bool multipath_sysfs_group_visible(struct kobject *kobj) 326 { 327 struct device *dev = container_of(kobj, struct device, kobj); 328 329 return nvme_disk_is_ns_head(dev_to_disk(dev)); 330 } 331 332 static bool multipath_sysfs_attr_visible(struct kobject *kobj, 333 struct attribute *attr, int n) 334 { 335 return false; 336 } 337 338 DEFINE_SYSFS_GROUP_VISIBLE(multipath_sysfs) 339 340 const struct attribute_group nvme_ns_mpath_attr_group = { 341 .name = "multipath", 342 .attrs = nvme_ns_mpath_attrs, 343 .is_visible = SYSFS_GROUP_VISIBLE(multipath_sysfs), 344 }; 345 #endif 346 347 const struct attribute_group *nvme_ns_attr_groups[] = { 348 &nvme_ns_attr_group, 349 #ifdef CONFIG_NVME_MULTIPATH 350 &nvme_ns_mpath_attr_group, 351 #endif 352 NULL, 353 }; 354 355 #define nvme_show_str_function(field) \ 356 static ssize_t field##_show(struct device *dev, \ 357 struct device_attribute *attr, char *buf) \ 358 { \ 359 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); \ 360 return sysfs_emit(buf, "%.*s\n", \ 361 (int)sizeof(ctrl->subsys->field), ctrl->subsys->field); \ 362 } \ 363 static DEVICE_ATTR(field, S_IRUGO, field##_show, NULL); 364 365 nvme_show_str_function(model); 366 nvme_show_str_function(serial); 367 nvme_show_str_function(firmware_rev); 368 369 #define nvme_show_int_function(field) \ 370 static ssize_t field##_show(struct device *dev, \ 371 struct device_attribute *attr, char *buf) \ 372 { \ 373 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); \ 374 return sysfs_emit(buf, "%d\n", ctrl->field); \ 375 } \ 376 static DEVICE_ATTR(field, S_IRUGO, field##_show, NULL); 377 378 nvme_show_int_function(cntlid); 379 nvme_show_int_function(numa_node); 380 nvme_show_int_function(queue_count); 381 nvme_show_int_function(sqsize); 382 nvme_show_int_function(kato); 383 384 static ssize_t nvme_sysfs_delete(struct device *dev, 385 struct device_attribute *attr, const char *buf, 386 size_t count) 387 { 388 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 389 390 if (!test_bit(NVME_CTRL_STARTED_ONCE, &ctrl->flags)) 391 return -EBUSY; 392 393 if (device_remove_file_self(dev, attr)) 394 nvme_delete_ctrl_sync(ctrl); 395 return count; 396 } 397 static DEVICE_ATTR(delete_controller, S_IWUSR, NULL, nvme_sysfs_delete); 398 399 static ssize_t nvme_sysfs_show_transport(struct device *dev, 400 struct device_attribute *attr, 401 char *buf) 402 { 403 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 404 405 return sysfs_emit(buf, "%s\n", ctrl->ops->name); 406 } 407 static DEVICE_ATTR(transport, S_IRUGO, nvme_sysfs_show_transport, NULL); 408 409 static ssize_t nvme_sysfs_show_state(struct device *dev, 410 struct device_attribute *attr, 411 char *buf) 412 { 413 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 414 unsigned state = (unsigned)nvme_ctrl_state(ctrl); 415 static const char *const state_name[] = { 416 [NVME_CTRL_NEW] = "new", 417 [NVME_CTRL_LIVE] = "live", 418 [NVME_CTRL_RESETTING] = "resetting", 419 [NVME_CTRL_CONNECTING] = "connecting", 420 [NVME_CTRL_DELETING] = "deleting", 421 [NVME_CTRL_DELETING_NOIO]= "deleting (no IO)", 422 [NVME_CTRL_DEAD] = "dead", 423 }; 424 425 if (state < ARRAY_SIZE(state_name) && state_name[state]) 426 return sysfs_emit(buf, "%s\n", state_name[state]); 427 428 return sysfs_emit(buf, "unknown state\n"); 429 } 430 431 static DEVICE_ATTR(state, S_IRUGO, nvme_sysfs_show_state, NULL); 432 433 static ssize_t nvme_sysfs_show_subsysnqn(struct device *dev, 434 struct device_attribute *attr, 435 char *buf) 436 { 437 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 438 439 return sysfs_emit(buf, "%s\n", ctrl->subsys->subnqn); 440 } 441 static DEVICE_ATTR(subsysnqn, S_IRUGO, nvme_sysfs_show_subsysnqn, NULL); 442 443 static ssize_t nvme_sysfs_show_hostnqn(struct device *dev, 444 struct device_attribute *attr, 445 char *buf) 446 { 447 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 448 449 return sysfs_emit(buf, "%s\n", ctrl->opts->host->nqn); 450 } 451 static DEVICE_ATTR(hostnqn, S_IRUGO, nvme_sysfs_show_hostnqn, NULL); 452 453 static ssize_t nvme_sysfs_show_hostid(struct device *dev, 454 struct device_attribute *attr, 455 char *buf) 456 { 457 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 458 459 return sysfs_emit(buf, "%pU\n", &ctrl->opts->host->id); 460 } 461 static DEVICE_ATTR(hostid, S_IRUGO, nvme_sysfs_show_hostid, NULL); 462 463 static ssize_t nvme_sysfs_show_address(struct device *dev, 464 struct device_attribute *attr, 465 char *buf) 466 { 467 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 468 469 return ctrl->ops->get_address(ctrl, buf, PAGE_SIZE); 470 } 471 static DEVICE_ATTR(address, S_IRUGO, nvme_sysfs_show_address, NULL); 472 473 static ssize_t nvme_ctrl_loss_tmo_show(struct device *dev, 474 struct device_attribute *attr, char *buf) 475 { 476 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 477 struct nvmf_ctrl_options *opts = ctrl->opts; 478 479 if (ctrl->opts->max_reconnects == -1) 480 return sysfs_emit(buf, "off\n"); 481 return sysfs_emit(buf, "%d\n", 482 opts->max_reconnects * opts->reconnect_delay); 483 } 484 485 static ssize_t nvme_ctrl_loss_tmo_store(struct device *dev, 486 struct device_attribute *attr, const char *buf, size_t count) 487 { 488 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 489 struct nvmf_ctrl_options *opts = ctrl->opts; 490 int ctrl_loss_tmo, err; 491 492 err = kstrtoint(buf, 10, &ctrl_loss_tmo); 493 if (err) 494 return -EINVAL; 495 496 if (ctrl_loss_tmo < 0) 497 opts->max_reconnects = -1; 498 else 499 opts->max_reconnects = DIV_ROUND_UP(ctrl_loss_tmo, 500 opts->reconnect_delay); 501 return count; 502 } 503 static DEVICE_ATTR(ctrl_loss_tmo, S_IRUGO | S_IWUSR, 504 nvme_ctrl_loss_tmo_show, nvme_ctrl_loss_tmo_store); 505 506 static ssize_t nvme_ctrl_reconnect_delay_show(struct device *dev, 507 struct device_attribute *attr, char *buf) 508 { 509 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 510 511 if (ctrl->opts->reconnect_delay == -1) 512 return sysfs_emit(buf, "off\n"); 513 return sysfs_emit(buf, "%d\n", ctrl->opts->reconnect_delay); 514 } 515 516 static ssize_t nvme_ctrl_reconnect_delay_store(struct device *dev, 517 struct device_attribute *attr, const char *buf, size_t count) 518 { 519 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 520 unsigned int v; 521 int err; 522 523 err = kstrtou32(buf, 10, &v); 524 if (err) 525 return err; 526 527 ctrl->opts->reconnect_delay = v; 528 return count; 529 } 530 static DEVICE_ATTR(reconnect_delay, S_IRUGO | S_IWUSR, 531 nvme_ctrl_reconnect_delay_show, nvme_ctrl_reconnect_delay_store); 532 533 static ssize_t nvme_ctrl_fast_io_fail_tmo_show(struct device *dev, 534 struct device_attribute *attr, char *buf) 535 { 536 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 537 538 if (ctrl->opts->fast_io_fail_tmo == -1) 539 return sysfs_emit(buf, "off\n"); 540 return sysfs_emit(buf, "%d\n", ctrl->opts->fast_io_fail_tmo); 541 } 542 543 static ssize_t nvme_ctrl_fast_io_fail_tmo_store(struct device *dev, 544 struct device_attribute *attr, const char *buf, size_t count) 545 { 546 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 547 struct nvmf_ctrl_options *opts = ctrl->opts; 548 int fast_io_fail_tmo, err; 549 550 err = kstrtoint(buf, 10, &fast_io_fail_tmo); 551 if (err) 552 return -EINVAL; 553 554 if (fast_io_fail_tmo < 0) 555 opts->fast_io_fail_tmo = -1; 556 else 557 opts->fast_io_fail_tmo = fast_io_fail_tmo; 558 return count; 559 } 560 static DEVICE_ATTR(fast_io_fail_tmo, S_IRUGO | S_IWUSR, 561 nvme_ctrl_fast_io_fail_tmo_show, nvme_ctrl_fast_io_fail_tmo_store); 562 563 static ssize_t cntrltype_show(struct device *dev, 564 struct device_attribute *attr, char *buf) 565 { 566 static const char * const type[] = { 567 [NVME_CTRL_IO] = "io\n", 568 [NVME_CTRL_DISC] = "discovery\n", 569 [NVME_CTRL_ADMIN] = "admin\n", 570 }; 571 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 572 573 if (ctrl->cntrltype > NVME_CTRL_ADMIN || !type[ctrl->cntrltype]) 574 return sysfs_emit(buf, "reserved\n"); 575 576 return sysfs_emit(buf, type[ctrl->cntrltype]); 577 } 578 static DEVICE_ATTR_RO(cntrltype); 579 580 static ssize_t dctype_show(struct device *dev, 581 struct device_attribute *attr, char *buf) 582 { 583 static const char * const type[] = { 584 [NVME_DCTYPE_NOT_REPORTED] = "none\n", 585 [NVME_DCTYPE_DDC] = "ddc\n", 586 [NVME_DCTYPE_CDC] = "cdc\n", 587 }; 588 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 589 590 if (ctrl->dctype > NVME_DCTYPE_CDC || !type[ctrl->dctype]) 591 return sysfs_emit(buf, "reserved\n"); 592 593 return sysfs_emit(buf, type[ctrl->dctype]); 594 } 595 static DEVICE_ATTR_RO(dctype); 596 597 #ifdef CONFIG_NVME_HOST_AUTH 598 static ssize_t nvme_ctrl_dhchap_secret_show(struct device *dev, 599 struct device_attribute *attr, char *buf) 600 { 601 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 602 struct nvmf_ctrl_options *opts = ctrl->opts; 603 604 if (!opts->dhchap_secret) 605 return sysfs_emit(buf, "none\n"); 606 return sysfs_emit(buf, "%s\n", opts->dhchap_secret); 607 } 608 609 static ssize_t nvme_ctrl_dhchap_secret_store(struct device *dev, 610 struct device_attribute *attr, const char *buf, size_t count) 611 { 612 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 613 struct nvmf_ctrl_options *opts = ctrl->opts; 614 char *dhchap_secret; 615 616 if (!ctrl->opts->dhchap_secret) 617 return -EINVAL; 618 if (count < 7) 619 return -EINVAL; 620 if (memcmp(buf, "DHHC-1:", 7)) 621 return -EINVAL; 622 623 dhchap_secret = kzalloc(count + 1, GFP_KERNEL); 624 if (!dhchap_secret) 625 return -ENOMEM; 626 memcpy(dhchap_secret, buf, count); 627 nvme_auth_stop(ctrl); 628 if (strcmp(dhchap_secret, opts->dhchap_secret)) { 629 struct nvme_dhchap_key *key, *host_key; 630 int ret; 631 632 ret = nvme_auth_generate_key(dhchap_secret, &key); 633 if (ret) { 634 kfree(dhchap_secret); 635 return ret; 636 } 637 kfree(opts->dhchap_secret); 638 opts->dhchap_secret = dhchap_secret; 639 host_key = ctrl->host_key; 640 mutex_lock(&ctrl->dhchap_auth_mutex); 641 ctrl->host_key = key; 642 mutex_unlock(&ctrl->dhchap_auth_mutex); 643 nvme_auth_free_key(host_key); 644 } else 645 kfree(dhchap_secret); 646 /* Start re-authentication */ 647 dev_info(ctrl->device, "re-authenticating controller\n"); 648 queue_work(nvme_wq, &ctrl->dhchap_auth_work); 649 650 return count; 651 } 652 653 static DEVICE_ATTR(dhchap_secret, S_IRUGO | S_IWUSR, 654 nvme_ctrl_dhchap_secret_show, nvme_ctrl_dhchap_secret_store); 655 656 static ssize_t nvme_ctrl_dhchap_ctrl_secret_show(struct device *dev, 657 struct device_attribute *attr, char *buf) 658 { 659 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 660 struct nvmf_ctrl_options *opts = ctrl->opts; 661 662 if (!opts->dhchap_ctrl_secret) 663 return sysfs_emit(buf, "none\n"); 664 return sysfs_emit(buf, "%s\n", opts->dhchap_ctrl_secret); 665 } 666 667 static ssize_t nvme_ctrl_dhchap_ctrl_secret_store(struct device *dev, 668 struct device_attribute *attr, const char *buf, size_t count) 669 { 670 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 671 struct nvmf_ctrl_options *opts = ctrl->opts; 672 char *dhchap_secret; 673 674 if (!ctrl->opts->dhchap_ctrl_secret) 675 return -EINVAL; 676 if (count < 7) 677 return -EINVAL; 678 if (memcmp(buf, "DHHC-1:", 7)) 679 return -EINVAL; 680 681 dhchap_secret = kzalloc(count + 1, GFP_KERNEL); 682 if (!dhchap_secret) 683 return -ENOMEM; 684 memcpy(dhchap_secret, buf, count); 685 nvme_auth_stop(ctrl); 686 if (strcmp(dhchap_secret, opts->dhchap_ctrl_secret)) { 687 struct nvme_dhchap_key *key, *ctrl_key; 688 int ret; 689 690 ret = nvme_auth_generate_key(dhchap_secret, &key); 691 if (ret) { 692 kfree(dhchap_secret); 693 return ret; 694 } 695 kfree(opts->dhchap_ctrl_secret); 696 opts->dhchap_ctrl_secret = dhchap_secret; 697 ctrl_key = ctrl->ctrl_key; 698 mutex_lock(&ctrl->dhchap_auth_mutex); 699 ctrl->ctrl_key = key; 700 mutex_unlock(&ctrl->dhchap_auth_mutex); 701 nvme_auth_free_key(ctrl_key); 702 } else 703 kfree(dhchap_secret); 704 /* Start re-authentication */ 705 dev_info(ctrl->device, "re-authenticating controller\n"); 706 queue_work(nvme_wq, &ctrl->dhchap_auth_work); 707 708 return count; 709 } 710 711 static DEVICE_ATTR(dhchap_ctrl_secret, S_IRUGO | S_IWUSR, 712 nvme_ctrl_dhchap_ctrl_secret_show, nvme_ctrl_dhchap_ctrl_secret_store); 713 #endif 714 715 static struct attribute *nvme_dev_attrs[] = { 716 &dev_attr_reset_controller.attr, 717 &dev_attr_rescan_controller.attr, 718 &dev_attr_model.attr, 719 &dev_attr_serial.attr, 720 &dev_attr_firmware_rev.attr, 721 &dev_attr_cntlid.attr, 722 &dev_attr_delete_controller.attr, 723 &dev_attr_transport.attr, 724 &dev_attr_subsysnqn.attr, 725 &dev_attr_address.attr, 726 &dev_attr_state.attr, 727 &dev_attr_numa_node.attr, 728 &dev_attr_queue_count.attr, 729 &dev_attr_sqsize.attr, 730 &dev_attr_hostnqn.attr, 731 &dev_attr_hostid.attr, 732 &dev_attr_ctrl_loss_tmo.attr, 733 &dev_attr_reconnect_delay.attr, 734 &dev_attr_fast_io_fail_tmo.attr, 735 &dev_attr_kato.attr, 736 &dev_attr_cntrltype.attr, 737 &dev_attr_dctype.attr, 738 #ifdef CONFIG_NVME_HOST_AUTH 739 &dev_attr_dhchap_secret.attr, 740 &dev_attr_dhchap_ctrl_secret.attr, 741 #endif 742 &dev_attr_adm_passthru_err_log_enabled.attr, 743 NULL 744 }; 745 746 static umode_t nvme_dev_attrs_are_visible(struct kobject *kobj, 747 struct attribute *a, int n) 748 { 749 struct device *dev = container_of(kobj, struct device, kobj); 750 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 751 752 if (a == &dev_attr_delete_controller.attr && !ctrl->ops->delete_ctrl) 753 return 0; 754 if (a == &dev_attr_address.attr && !ctrl->ops->get_address) 755 return 0; 756 if (a == &dev_attr_hostnqn.attr && !ctrl->opts) 757 return 0; 758 if (a == &dev_attr_hostid.attr && !ctrl->opts) 759 return 0; 760 if (a == &dev_attr_ctrl_loss_tmo.attr && !ctrl->opts) 761 return 0; 762 if (a == &dev_attr_reconnect_delay.attr && !ctrl->opts) 763 return 0; 764 if (a == &dev_attr_fast_io_fail_tmo.attr && !ctrl->opts) 765 return 0; 766 #ifdef CONFIG_NVME_HOST_AUTH 767 if (a == &dev_attr_dhchap_secret.attr && !ctrl->opts) 768 return 0; 769 if (a == &dev_attr_dhchap_ctrl_secret.attr && !ctrl->opts) 770 return 0; 771 #endif 772 773 return a->mode; 774 } 775 776 const struct attribute_group nvme_dev_attrs_group = { 777 .attrs = nvme_dev_attrs, 778 .is_visible = nvme_dev_attrs_are_visible, 779 }; 780 EXPORT_SYMBOL_GPL(nvme_dev_attrs_group); 781 782 #ifdef CONFIG_NVME_TCP_TLS 783 static ssize_t tls_key_show(struct device *dev, 784 struct device_attribute *attr, char *buf) 785 { 786 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 787 788 if (!ctrl->tls_pskid) 789 return 0; 790 return sysfs_emit(buf, "%08x\n", ctrl->tls_pskid); 791 } 792 static DEVICE_ATTR_RO(tls_key); 793 794 static ssize_t tls_configured_key_show(struct device *dev, 795 struct device_attribute *attr, char *buf) 796 { 797 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 798 struct key *key = ctrl->opts->tls_key; 799 800 return sysfs_emit(buf, "%08x\n", key_serial(key)); 801 } 802 static DEVICE_ATTR_RO(tls_configured_key); 803 804 static ssize_t tls_keyring_show(struct device *dev, 805 struct device_attribute *attr, char *buf) 806 { 807 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 808 struct key *keyring = ctrl->opts->keyring; 809 810 return sysfs_emit(buf, "%s\n", keyring->description); 811 } 812 static DEVICE_ATTR_RO(tls_keyring); 813 814 static struct attribute *nvme_tls_attrs[] = { 815 &dev_attr_tls_key.attr, 816 &dev_attr_tls_configured_key.attr, 817 &dev_attr_tls_keyring.attr, 818 NULL, 819 }; 820 821 static umode_t nvme_tls_attrs_are_visible(struct kobject *kobj, 822 struct attribute *a, int n) 823 { 824 struct device *dev = container_of(kobj, struct device, kobj); 825 struct nvme_ctrl *ctrl = dev_get_drvdata(dev); 826 827 if (!ctrl->opts || strcmp(ctrl->opts->transport, "tcp")) 828 return 0; 829 830 if (a == &dev_attr_tls_key.attr && 831 !ctrl->opts->tls && !ctrl->opts->concat) 832 return 0; 833 if (a == &dev_attr_tls_configured_key.attr && 834 (!ctrl->opts->tls_key || ctrl->opts->concat)) 835 return 0; 836 if (a == &dev_attr_tls_keyring.attr && 837 !ctrl->opts->keyring) 838 return 0; 839 840 return a->mode; 841 } 842 843 static const struct attribute_group nvme_tls_attrs_group = { 844 .attrs = nvme_tls_attrs, 845 .is_visible = nvme_tls_attrs_are_visible, 846 }; 847 #endif 848 849 const struct attribute_group *nvme_dev_attr_groups[] = { 850 &nvme_dev_attrs_group, 851 #ifdef CONFIG_NVME_TCP_TLS 852 &nvme_tls_attrs_group, 853 #endif 854 NULL, 855 }; 856 857 #define SUBSYS_ATTR_RO(_name, _mode, _show) \ 858 struct device_attribute subsys_attr_##_name = \ 859 __ATTR(_name, _mode, _show, NULL) 860 861 static ssize_t nvme_subsys_show_nqn(struct device *dev, 862 struct device_attribute *attr, 863 char *buf) 864 { 865 struct nvme_subsystem *subsys = 866 container_of(dev, struct nvme_subsystem, dev); 867 868 return sysfs_emit(buf, "%s\n", subsys->subnqn); 869 } 870 static SUBSYS_ATTR_RO(subsysnqn, S_IRUGO, nvme_subsys_show_nqn); 871 872 static ssize_t nvme_subsys_show_type(struct device *dev, 873 struct device_attribute *attr, 874 char *buf) 875 { 876 struct nvme_subsystem *subsys = 877 container_of(dev, struct nvme_subsystem, dev); 878 879 switch (subsys->subtype) { 880 case NVME_NQN_DISC: 881 return sysfs_emit(buf, "discovery\n"); 882 case NVME_NQN_NVME: 883 return sysfs_emit(buf, "nvm\n"); 884 default: 885 return sysfs_emit(buf, "reserved\n"); 886 } 887 } 888 static SUBSYS_ATTR_RO(subsystype, S_IRUGO, nvme_subsys_show_type); 889 890 #define nvme_subsys_show_str_function(field) \ 891 static ssize_t subsys_##field##_show(struct device *dev, \ 892 struct device_attribute *attr, char *buf) \ 893 { \ 894 struct nvme_subsystem *subsys = \ 895 container_of(dev, struct nvme_subsystem, dev); \ 896 return sysfs_emit(buf, "%.*s\n", \ 897 (int)sizeof(subsys->field), subsys->field); \ 898 } \ 899 static SUBSYS_ATTR_RO(field, S_IRUGO, subsys_##field##_show); 900 901 nvme_subsys_show_str_function(model); 902 nvme_subsys_show_str_function(serial); 903 nvme_subsys_show_str_function(firmware_rev); 904 905 static struct attribute *nvme_subsys_attrs[] = { 906 &subsys_attr_model.attr, 907 &subsys_attr_serial.attr, 908 &subsys_attr_firmware_rev.attr, 909 &subsys_attr_subsysnqn.attr, 910 &subsys_attr_subsystype.attr, 911 #ifdef CONFIG_NVME_MULTIPATH 912 &subsys_attr_iopolicy.attr, 913 #endif 914 NULL, 915 }; 916 917 static const struct attribute_group nvme_subsys_attrs_group = { 918 .attrs = nvme_subsys_attrs, 919 }; 920 921 const struct attribute_group *nvme_subsys_attrs_groups[] = { 922 &nvme_subsys_attrs_group, 923 NULL, 924 }; 925