nvme/opal: rename spdk_opal_init_dev() and spdk_opal_close() with construct/destruct suffix

Since the OPAL here is just for NVMe device, so we don't need to use dev_handler as common
handler, just rename it to spdk_nvme_ctrlr.  And we don't exit the initialization if
OPAL construnction had a failure.  Also move the timeout initialization to construct().

Change-Id: I11f0aea961eaa3da0c6253eb03d0227f7e7e5f11
Signed-off-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1101
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Changpeng Liu 2020-03-03 23:09:30 +08:00 committed by Tomasz Zawadzki
parent 01ddd1120a
commit c61b70c3d5
7 changed files with 61 additions and 62 deletions

View File

@ -973,7 +973,7 @@ opal_scan(struct dev *iter)
{ {
while (getchar() != '\n'); while (getchar() != '\n');
if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) { if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) {
iter->opal_dev = spdk_opal_init_dev(iter->ctrlr); iter->opal_dev = spdk_opal_dev_construct(iter->ctrlr);
if (iter->opal_dev == NULL) { if (iter->opal_dev == NULL) {
return; return;
} }
@ -984,7 +984,7 @@ opal_scan(struct dev *iter)
spdk_opal_cmd_scan(iter->opal_dev); spdk_opal_cmd_scan(iter->opal_dev);
opal_dump_info(spdk_opal_get_d0_features_info(iter->opal_dev)); opal_dump_info(spdk_opal_get_d0_features_info(iter->opal_dev));
} }
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
} else { } else {
printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\n", printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\n",
iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func); iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func);
@ -1002,7 +1002,7 @@ opal_init(struct dev *iter)
int ch; int ch;
if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) { if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) {
iter->opal_dev = spdk_opal_init_dev(iter->ctrlr); iter->opal_dev = spdk_opal_dev_construct(iter->ctrlr);
if (iter->opal_dev == NULL) { if (iter->opal_dev == NULL) {
return; return;
} }
@ -1015,14 +1015,14 @@ opal_init(struct dev *iter)
ret = spdk_opal_cmd_take_ownership(iter->opal_dev, passwd_p); ret = spdk_opal_cmd_take_ownership(iter->opal_dev, passwd_p);
if (ret) { if (ret) {
printf("Take ownership failure: %d\n", ret); printf("Take ownership failure: %d\n", ret);
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
ret = spdk_opal_cmd_activate_locking_sp(iter->opal_dev, passwd_p); ret = spdk_opal_cmd_activate_locking_sp(iter->opal_dev, passwd_p);
if (ret) { if (ret) {
printf("Locking SP activate failure: %d\n", ret); printf("Locking SP activate failure: %d\n", ret);
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
printf("...\nOpal Init Success\n"); printf("...\nOpal Init Success\n");
@ -1030,7 +1030,7 @@ opal_init(struct dev *iter)
printf("Input password invalid. Opal Init failure\n"); printf("Input password invalid. Opal Init failure\n");
} }
} }
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
} else { } else {
printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n", printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n",
iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func); iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func);
@ -1060,7 +1060,7 @@ opal_setup_lockingrange(struct dev *iter)
struct spdk_opal_locking_range_info *info; struct spdk_opal_locking_range_info *info;
if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) { if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) {
iter->opal_dev = spdk_opal_init_dev(iter->ctrlr); iter->opal_dev = spdk_opal_dev_construct(iter->ctrlr);
if (iter->opal_dev == NULL) { if (iter->opal_dev == NULL) {
return; return;
} }
@ -1073,21 +1073,21 @@ opal_setup_lockingrange(struct dev *iter)
printf("Specify locking range id:\n"); printf("Specify locking range id:\n");
if (!scanf("%d", &locking_range_id)) { if (!scanf("%d", &locking_range_id)) {
printf("Invalid locking range id\n"); printf("Invalid locking range id\n");
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
printf("range length:\n"); printf("range length:\n");
if (!scanf("%" SCNu64, &range_length)) { if (!scanf("%" SCNu64, &range_length)) {
printf("Invalid range length\n"); printf("Invalid range length\n");
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
printf("range start:\n"); printf("range start:\n");
if (!scanf("%" SCNu64, &range_start)) { if (!scanf("%" SCNu64, &range_start)) {
printf("Invalid range start address\n"); printf("Invalid range start address\n");
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
while (getchar() != '\n'); while (getchar() != '\n');
@ -1096,7 +1096,7 @@ opal_setup_lockingrange(struct dev *iter)
OPAL_ADMIN1, locking_range_id, range_start, range_length, passwd_p); OPAL_ADMIN1, locking_range_id, range_start, range_length, passwd_p);
if (ret) { if (ret) {
printf("Setup locking range failure: %d\n", ret); printf("Setup locking range failure: %d\n", ret);
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
@ -1104,7 +1104,7 @@ opal_setup_lockingrange(struct dev *iter)
passwd_p, OPAL_ADMIN1, locking_range_id); passwd_p, OPAL_ADMIN1, locking_range_id);
if (ret) { if (ret) {
printf("Get locking range info failure: %d\n", ret); printf("Get locking range info failure: %d\n", ret);
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
info = spdk_opal_get_locking_range_info(iter->opal_dev, locking_range_id); info = spdk_opal_get_locking_range_info(iter->opal_dev, locking_range_id);
@ -1122,7 +1122,7 @@ opal_setup_lockingrange(struct dev *iter)
printf("Input password invalid. Opal setup locking range failure\n"); printf("Input password invalid. Opal setup locking range failure\n");
} }
} }
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
} else { } else {
printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n", printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n",
iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func); iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func);
@ -1141,7 +1141,7 @@ opal_list_locking_ranges(struct dev *iter)
struct spdk_opal_locking_range_info *info; struct spdk_opal_locking_range_info *info;
if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) { if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) {
iter->opal_dev = spdk_opal_init_dev(iter->ctrlr); iter->opal_dev = spdk_opal_dev_construct(iter->ctrlr);
if (iter->opal_dev == NULL) { if (iter->opal_dev == NULL) {
return; return;
} }
@ -1154,7 +1154,7 @@ opal_list_locking_ranges(struct dev *iter)
ret = spdk_opal_cmd_get_max_ranges(iter->opal_dev, passwd_p); ret = spdk_opal_cmd_get_max_ranges(iter->opal_dev, passwd_p);
if (ret) { if (ret) {
printf("get max ranges failure: %d\n", ret); printf("get max ranges failure: %d\n", ret);
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
@ -1164,7 +1164,7 @@ opal_list_locking_ranges(struct dev *iter)
passwd_p, OPAL_ADMIN1, i); passwd_p, OPAL_ADMIN1, i);
if (ret) { if (ret) {
printf("Get locking range info failure: %d\n", ret); printf("Get locking range info failure: %d\n", ret);
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
info = spdk_opal_get_locking_range_info(iter->opal_dev, i); info = spdk_opal_get_locking_range_info(iter->opal_dev, i);
@ -1188,7 +1188,7 @@ opal_list_locking_ranges(struct dev *iter)
printf("Input password invalid. List locking ranges failure\n"); printf("Input password invalid. List locking ranges failure\n");
} }
} }
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
} else { } else {
printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n", printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n",
iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func); iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func);
@ -1207,7 +1207,7 @@ opal_new_user_enable(struct dev *iter)
int ch; int ch;
if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) { if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) {
iter->opal_dev = spdk_opal_init_dev(iter->ctrlr); iter->opal_dev = spdk_opal_dev_construct(iter->ctrlr);
if (iter->opal_dev == NULL) { if (iter->opal_dev == NULL) {
return; return;
} }
@ -1220,14 +1220,14 @@ opal_new_user_enable(struct dev *iter)
printf("which user to enable: "); printf("which user to enable: ");
if (!scanf("%d", &user_id)) { if (!scanf("%d", &user_id)) {
printf("Invalid user id\n"); printf("Invalid user id\n");
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
ret = spdk_opal_cmd_enable_user(iter->opal_dev, user_id, passwd_p); ret = spdk_opal_cmd_enable_user(iter->opal_dev, user_id, passwd_p);
if (ret) { if (ret) {
printf("Enable user failure error code: %d\n", ret); printf("Enable user failure error code: %d\n", ret);
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
printf("Please set a new password for this user:"); printf("Please set a new password for this user:");
@ -1235,14 +1235,14 @@ opal_new_user_enable(struct dev *iter)
user_pw_p = get_line(user_pw, MAX_PASSWORD_SIZE, stdin, true); user_pw_p = get_line(user_pw, MAX_PASSWORD_SIZE, stdin, true);
if (user_pw_p == NULL) { if (user_pw_p == NULL) {
printf("Input password invalid. Enable user failure\n"); printf("Input password invalid. Enable user failure\n");
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
ret = spdk_opal_cmd_set_new_passwd(iter->opal_dev, user_id, user_pw_p, passwd_p, true); ret = spdk_opal_cmd_set_new_passwd(iter->opal_dev, user_id, user_pw_p, passwd_p, true);
if (ret) { if (ret) {
printf("Set new password failure error code: %d\n", ret); printf("Set new password failure error code: %d\n", ret);
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
@ -1251,7 +1251,7 @@ opal_new_user_enable(struct dev *iter)
printf("Input password invalid. Enable user failure\n"); printf("Input password invalid. Enable user failure\n");
} }
} }
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
} else { } else {
printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n", printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n",
iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func); iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func);
@ -1270,7 +1270,7 @@ opal_change_password(struct dev *iter)
int ch; int ch;
if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) { if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) {
iter->opal_dev = spdk_opal_init_dev(iter->ctrlr); iter->opal_dev = spdk_opal_dev_construct(iter->ctrlr);
if (iter->opal_dev == NULL) { if (iter->opal_dev == NULL) {
return; return;
} }
@ -1278,7 +1278,7 @@ opal_change_password(struct dev *iter)
printf("user id: "); printf("user id: ");
if (!scanf("%d", &user_id)) { if (!scanf("%d", &user_id)) {
printf("Invalid user id\n"); printf("Invalid user id\n");
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
printf("Password:"); printf("Password:");
@ -1291,14 +1291,14 @@ opal_change_password(struct dev *iter)
printf("\n"); printf("\n");
if (new_passwd_p == NULL) { if (new_passwd_p == NULL) {
printf("Input password invalid. Change password failure\n"); printf("Input password invalid. Change password failure\n");
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
ret = spdk_opal_cmd_set_new_passwd(iter->opal_dev, user_id, new_passwd_p, old_passwd_p, false); ret = spdk_opal_cmd_set_new_passwd(iter->opal_dev, user_id, new_passwd_p, old_passwd_p, false);
if (ret) { if (ret) {
printf("Set new password failure error code: %d\n", ret); printf("Set new password failure error code: %d\n", ret);
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
@ -1307,7 +1307,7 @@ opal_change_password(struct dev *iter)
printf("Input password invalid. Change password failure\n"); printf("Input password invalid. Change password failure\n");
} }
} }
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
} else { } else {
printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n", printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n",
iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func); iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func);
@ -1324,7 +1324,7 @@ opal_add_user_to_locking_range(struct dev *iter)
int ch; int ch;
if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) { if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) {
iter->opal_dev = spdk_opal_init_dev(iter->ctrlr); iter->opal_dev = spdk_opal_dev_construct(iter->ctrlr);
if (iter->opal_dev == NULL) { if (iter->opal_dev == NULL) {
return; return;
} }
@ -1337,14 +1337,14 @@ opal_add_user_to_locking_range(struct dev *iter)
printf("Specify locking range id:\n"); printf("Specify locking range id:\n");
if (!scanf("%d", &locking_range_id)) { if (!scanf("%d", &locking_range_id)) {
printf("Invalid locking range id\n"); printf("Invalid locking range id\n");
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
printf("which user to enable:\n"); printf("which user to enable:\n");
if (!scanf("%d", &user_id)) { if (!scanf("%d", &user_id)) {
printf("Invalid user id\n"); printf("Invalid user id\n");
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
while (getchar() != '\n'); while (getchar() != '\n');
@ -1357,7 +1357,7 @@ opal_add_user_to_locking_range(struct dev *iter)
passwd_p); passwd_p);
if (ret) { if (ret) {
printf("Add user to locking range error: %d\n", ret); printf("Add user to locking range error: %d\n", ret);
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
@ -1366,7 +1366,7 @@ opal_add_user_to_locking_range(struct dev *iter)
printf("Input password invalid. Add user to locking range failure\n"); printf("Input password invalid. Add user to locking range failure\n");
} }
} }
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
} else { } else {
printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n", printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n",
iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func); iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func);
@ -1386,7 +1386,7 @@ opal_user_lock_unlock_range(struct dev *iter)
enum spdk_opal_lock_state state_flag; enum spdk_opal_lock_state state_flag;
if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) { if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) {
iter->opal_dev = spdk_opal_init_dev(iter->ctrlr); iter->opal_dev = spdk_opal_dev_construct(iter->ctrlr);
if (iter->opal_dev == NULL) { if (iter->opal_dev == NULL) {
return; return;
} }
@ -1394,7 +1394,7 @@ opal_user_lock_unlock_range(struct dev *iter)
printf("User id: "); printf("User id: ");
if (!scanf("%d", &user_id)) { if (!scanf("%d", &user_id)) {
printf("Invalid user id\n"); printf("Invalid user id\n");
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
@ -1406,7 +1406,7 @@ opal_user_lock_unlock_range(struct dev *iter)
printf("Specify locking range id:\n"); printf("Specify locking range id:\n");
if (!scanf("%d", &locking_range_id)) { if (!scanf("%d", &locking_range_id)) {
printf("Invalid locking range id\n"); printf("Invalid locking range id\n");
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
@ -1426,7 +1426,7 @@ opal_user_lock_unlock_range(struct dev *iter)
break; break;
default: default:
printf("Invalid options\n"); printf("Invalid options\n");
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
while (getchar() != '\n'); while (getchar() != '\n');
@ -1435,7 +1435,7 @@ opal_user_lock_unlock_range(struct dev *iter)
locking_range_id, passwd_p); locking_range_id, passwd_p);
if (ret) { if (ret) {
printf("lock/unlock range failure: %d\n", ret); printf("lock/unlock range failure: %d\n", ret);
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
printf("...\n...\nLock/unlock range Success\n"); printf("...\n...\nLock/unlock range Success\n");
@ -1443,7 +1443,7 @@ opal_user_lock_unlock_range(struct dev *iter)
printf("Input password invalid. lock/unlock range failure\n"); printf("Input password invalid. lock/unlock range failure\n");
} }
} }
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
} else { } else {
printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n", printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n",
iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func); iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func);
@ -1459,7 +1459,7 @@ opal_revert_tper(struct dev *iter)
int ch; int ch;
if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) { if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) {
iter->opal_dev = spdk_opal_init_dev(iter->ctrlr); iter->opal_dev = spdk_opal_dev_construct(iter->ctrlr);
if (iter->opal_dev == NULL) { if (iter->opal_dev == NULL) {
return; return;
} }
@ -1474,7 +1474,7 @@ opal_revert_tper(struct dev *iter)
ret = spdk_opal_cmd_revert_tper(iter->opal_dev, passwd_p); ret = spdk_opal_cmd_revert_tper(iter->opal_dev, passwd_p);
if (ret) { if (ret) {
printf("Revert TPer failure: %d\n", ret); printf("Revert TPer failure: %d\n", ret);
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
printf("...\nRevert TPer Success\n"); printf("...\nRevert TPer Success\n");
@ -1482,7 +1482,7 @@ opal_revert_tper(struct dev *iter)
printf("Input password invalid. Revert TPer failure\n"); printf("Input password invalid. Revert TPer failure\n");
} }
} }
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
} else { } else {
printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n", printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n",
iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func); iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func);
@ -1499,7 +1499,7 @@ opal_erase_locking_range(struct dev *iter)
int locking_range_id; int locking_range_id;
if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) { if (spdk_nvme_ctrlr_get_flags(iter->ctrlr) & SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) {
iter->opal_dev = spdk_opal_init_dev(iter->ctrlr); iter->opal_dev = spdk_opal_dev_construct(iter->ctrlr);
if (iter->opal_dev == NULL) { if (iter->opal_dev == NULL) {
return; return;
} }
@ -1512,14 +1512,14 @@ opal_erase_locking_range(struct dev *iter)
printf("\nSpecify locking range id:\n"); printf("\nSpecify locking range id:\n");
if (!scanf("%d", &locking_range_id)) { if (!scanf("%d", &locking_range_id)) {
printf("Invalid locking range id\n"); printf("Invalid locking range id\n");
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
printf("\n...\n"); printf("\n...\n");
ret = spdk_opal_cmd_erase_locking_range(iter->opal_dev, OPAL_ADMIN1, locking_range_id, passwd_p); ret = spdk_opal_cmd_erase_locking_range(iter->opal_dev, OPAL_ADMIN1, locking_range_id, passwd_p);
if (ret) { if (ret) {
printf("Erase locking range failure: %d\n", ret); printf("Erase locking range failure: %d\n", ret);
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
return; return;
} }
printf("...\nErase locking range Success\n"); printf("...\nErase locking range Success\n");
@ -1527,7 +1527,7 @@ opal_erase_locking_range(struct dev *iter)
printf("Input password invalid. Erase locking range failure\n"); printf("Input password invalid. Erase locking range failure\n");
} }
} }
spdk_opal_close(iter->opal_dev); spdk_opal_dev_destruct(iter->opal_dev);
} else { } else {
printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n", printf("%04x:%02x:%02x.%02x: NVMe Security Support/Receive Not supported.\nOpal Not Supported\n\n\n",
iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func); iter->pci_addr.domain, iter->pci_addr.bus, iter->pci_addr.dev, iter->pci_addr.func);

View File

@ -131,9 +131,9 @@ struct spdk_opal_dev;
typedef void (*spdk_opal_revert_cb)(struct spdk_opal_dev *dev, void *ctx, int rc); typedef void (*spdk_opal_revert_cb)(struct spdk_opal_dev *dev, void *ctx, int rc);
struct spdk_opal_dev *spdk_opal_init_dev(void *dev_handler); struct spdk_opal_dev *spdk_opal_dev_construct(struct spdk_nvme_ctrlr *ctrlr);
void spdk_opal_dev_destruct(struct spdk_opal_dev *dev);
void spdk_opal_close(struct spdk_opal_dev *dev);
struct spdk_opal_d0_features_info *spdk_opal_get_d0_features_info(struct spdk_opal_dev *dev); struct spdk_opal_d0_features_info *spdk_opal_get_d0_features_info(struct spdk_opal_dev *dev);
bool spdk_opal_supported(struct spdk_opal_dev *dev); bool spdk_opal_supported(struct spdk_opal_dev *dev);

View File

@ -61,7 +61,7 @@ opal_flush_response_buffer(struct spdk_opal_dev *dev)
void *response = dev->resp; void *response = dev->resp;
int ret = 0; int ret = 0;
ret = spdk_nvme_ctrlr_security_receive(dev->dev_handler, SPDK_SCSI_SECP_TCG, dev->comid, ret = spdk_nvme_ctrlr_security_receive(dev->ctrlr, SPDK_SCSI_SECP_TCG, dev->comid,
0, response, IO_BUFFER_LENGTH); 0, response, IO_BUFFER_LENGTH);
if (ret) { if (ret) {
SPDK_ERRLOG("Security Receive Error on dev = %p\n", dev); SPDK_ERRLOG("Security Receive Error on dev = %p\n", dev);
@ -75,7 +75,7 @@ opal_flush_response_buffer(struct spdk_opal_dev *dev)
static int static int
opal_send_cmd(struct spdk_opal_dev *dev) opal_send_cmd(struct spdk_opal_dev *dev)
{ {
return spdk_nvme_ctrlr_security_send(dev->dev_handler, SPDK_SCSI_SECP_TCG, dev->comid, return spdk_nvme_ctrlr_security_send(dev->ctrlr, SPDK_SCSI_SECP_TCG, dev->comid,
0, dev->cmd, IO_BUFFER_LENGTH); 0, dev->cmd, IO_BUFFER_LENGTH);
} }
@ -89,7 +89,7 @@ opal_recv_cmd(struct spdk_opal_dev *dev)
uint64_t now; uint64_t now;
do { do {
ret = spdk_nvme_ctrlr_security_receive(dev->dev_handler, SPDK_SCSI_SECP_TCG, dev->comid, ret = spdk_nvme_ctrlr_security_receive(dev->ctrlr, SPDK_SCSI_SECP_TCG, dev->comid,
0, dev->resp, IO_BUFFER_LENGTH); 0, dev->resp, IO_BUFFER_LENGTH);
if (ret) { if (ret) {
SPDK_ERRLOG("Security Receive Error on dev = %p\n", dev); SPDK_ERRLOG("Security Receive Error on dev = %p\n", dev);
@ -908,7 +908,6 @@ opal_setup_dev(struct spdk_opal_dev *dev)
dev->tsn = 0; dev->tsn = 0;
dev->hsn = 0; dev->hsn = 0;
dev->prev_data = NULL; dev->prev_data = NULL;
dev->timeout = SPDK_OPAL_TPER_TIMEOUT;
} }
static int static int
@ -949,7 +948,7 @@ opal_check_support(struct spdk_opal_dev *dev)
} }
void void
spdk_opal_close(struct spdk_opal_dev *dev) spdk_opal_dev_destruct(struct spdk_opal_dev *dev)
{ {
pthread_mutex_destroy(&dev->mutex_lock); pthread_mutex_destroy(&dev->mutex_lock);
if (dev->max_ranges > 0) { if (dev->max_ranges > 0) {
@ -1840,7 +1839,7 @@ end:
} }
struct spdk_opal_dev * struct spdk_opal_dev *
spdk_opal_init_dev(void *dev_handler) spdk_opal_dev_construct(struct spdk_nvme_ctrlr *ctrlr)
{ {
struct spdk_opal_dev *dev; struct spdk_opal_dev *dev;
@ -1850,7 +1849,8 @@ spdk_opal_init_dev(void *dev_handler)
return NULL; return NULL;
} }
dev->dev_handler = dev_handler; dev->ctrlr = ctrlr;
dev->timeout = SPDK_OPAL_TPER_TIMEOUT;
if (opal_check_support(dev) != 0) { if (opal_check_support(dev) != 0) {
SPDK_INFOLOG(SPDK_LOG_OPAL, "Opal is not supported on this device\n"); SPDK_INFOLOG(SPDK_LOG_OPAL, "Opal is not supported on this device\n");
@ -1874,7 +1874,7 @@ spdk_opal_cmd_scan(struct spdk_opal_dev *dev)
ret = opal_check_support(dev); ret = opal_check_support(dev);
if (ret) { if (ret) {
SPDK_ERRLOG("check opal support failed: %d\n", ret); SPDK_ERRLOG("check opal support failed: %d\n", ret);
spdk_opal_close(dev); spdk_opal_dev_destruct(dev);
} }
return ret; return ret;
} }
@ -2066,7 +2066,7 @@ spdk_opal_revert_poll(struct spdk_opal_dev *dev)
assert(dev->revert_cb_fn); assert(dev->revert_cb_fn);
ret = spdk_nvme_ctrlr_security_receive(dev->dev_handler, SPDK_SCSI_SECP_TCG, dev->comid, ret = spdk_nvme_ctrlr_security_receive(dev->ctrlr, SPDK_SCSI_SECP_TCG, dev->comid,
0, dev->resp, IO_BUFFER_LENGTH); 0, dev->resp, IO_BUFFER_LENGTH);
if (ret) { if (ret) {
SPDK_ERRLOG("Security Receive Error on dev = %p\n", dev); SPDK_ERRLOG("Security Receive Error on dev = %p\n", dev);

View File

@ -268,7 +268,7 @@ struct spdk_opal_header {
struct spdk_opal_dev { struct spdk_opal_dev {
bool supported; bool supported;
void *dev_handler; struct spdk_nvme_ctrlr *ctrlr;
uint16_t comid; uint16_t comid;
uint32_t hsn; uint32_t hsn;

View File

@ -1295,10 +1295,9 @@ create_ctrlr(struct spdk_nvme_ctrlr *ctrlr,
if (spdk_nvme_ctrlr_get_flags(nvme_bdev_ctrlr->ctrlr) & if (spdk_nvme_ctrlr_get_flags(nvme_bdev_ctrlr->ctrlr) &
SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) { SPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED) {
nvme_bdev_ctrlr->opal_dev = spdk_opal_init_dev(nvme_bdev_ctrlr->ctrlr); nvme_bdev_ctrlr->opal_dev = spdk_opal_dev_construct(nvme_bdev_ctrlr->ctrlr);
if (nvme_bdev_ctrlr->opal_dev == NULL) { if (nvme_bdev_ctrlr->opal_dev == NULL) {
SPDK_ERRLOG("Failed to initialize Opal\n"); SPDK_ERRLOG("Failed to initialize Opal\n");
return -ENOMEM;
} }
} }
return 0; return 0;

View File

@ -140,7 +140,7 @@ nvme_bdev_ctrlr_destruct(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr)
/* wait until we get the result */ /* wait until we get the result */
while (spdk_opal_revert_poll(nvme_bdev_ctrlr->opal_dev) == -EAGAIN); while (spdk_opal_revert_poll(nvme_bdev_ctrlr->opal_dev) == -EAGAIN);
} }
spdk_opal_close(nvme_bdev_ctrlr->opal_dev); spdk_opal_dev_destruct(nvme_bdev_ctrlr->opal_dev);
nvme_bdev_ctrlr->opal_dev = NULL; nvme_bdev_ctrlr->opal_dev = NULL;
} }

View File

@ -49,7 +49,7 @@ DEFINE_STUB(spdk_nvme_ctrlr_is_ocssd_ns, bool, (struct spdk_nvme_ctrlr *ctrlr, u
true); true);
DEFINE_STUB(spdk_nvme_ns_get_extended_sector_size, uint32_t, (struct spdk_nvme_ns *ns), 4096); DEFINE_STUB(spdk_nvme_ns_get_extended_sector_size, uint32_t, (struct spdk_nvme_ns *ns), 4096);
DEFINE_STUB(spdk_nvme_ns_is_active, bool, (struct spdk_nvme_ns *ns), true); DEFINE_STUB(spdk_nvme_ns_is_active, bool, (struct spdk_nvme_ns *ns), true);
DEFINE_STUB_V(spdk_opal_close, (struct spdk_opal_dev *dev)); DEFINE_STUB_V(spdk_opal_dev_destruct, (struct spdk_opal_dev *dev));
DEFINE_STUB(spdk_opal_revert_poll, int, (struct spdk_opal_dev *dev), 0); DEFINE_STUB(spdk_opal_revert_poll, int, (struct spdk_opal_dev *dev), 0);
DEFINE_STUB_V(spdk_bdev_io_complete_nvme_status, (struct spdk_bdev_io *bdev_io, uint32_t cdw0, DEFINE_STUB_V(spdk_bdev_io_complete_nvme_status, (struct spdk_bdev_io *bdev_io, uint32_t cdw0,
int sct, int sc)); int sct, int sc));