opal: Fix memory leakage

Change-Id: I37f1468a41d568f7313143f0270f854f73bc4000
Signed-off-by: Chunyang Hui <chunyang.hui@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/461560
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: yidong0635 <dongx.yi@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
Chunyang Hui 2019-07-13 00:04:41 +08:00 committed by Changpeng Liu
parent defe09d3ef
commit 07f432641a
2 changed files with 19 additions and 0 deletions

View File

@ -1026,6 +1026,7 @@ opal_init(struct dev *iter)
ret = spdk_opal_cmd_activate_locking_sp(iter->opal_dev, passwd_p);
if (ret) {
printf("Locking SP activate failure: %d\n", ret);
spdk_opal_close(iter->opal_dev);
return;
}
printf("...\nOpal Init Success\n");
@ -1076,16 +1077,22 @@ opal_setup_lockingrange(struct dev *iter)
printf("Specify locking range id:\n");
if (!scanf("%d", &locking_range_id)) {
printf("Invalid locking range id\n");
spdk_opal_close(iter->opal_dev);
return;
}
printf("range length:\n");
if (!scanf("%" SCNu64, &range_length)) {
printf("Invalid range length\n");
spdk_opal_close(iter->opal_dev);
return;
}
printf("range start:\n");
if (!scanf("%" SCNu64, &range_start)) {
printf("Invalid range start address\n");
spdk_opal_close(iter->opal_dev);
return;
}
while (getchar() != '\n');
@ -1093,6 +1100,7 @@ opal_setup_lockingrange(struct dev *iter)
OPAL_ADMIN1, locking_range_id, range_start, range_length, passwd_p);
if (ret) {
printf("Setup locking range failure: %d\n", ret);
spdk_opal_close(iter->opal_dev);
return;
}
@ -1100,6 +1108,7 @@ opal_setup_lockingrange(struct dev *iter)
passwd_p, OPAL_ADMIN1, locking_range_id);
if (ret) {
printf("Get locking range info failure: %d\n", ret);
spdk_opal_close(iter->opal_dev);
return;
}
info = spdk_opal_get_locking_range_info(iter->opal_dev, locking_range_id);
@ -1149,6 +1158,7 @@ opal_list_locking_ranges(struct dev *iter)
ret = spdk_opal_cmd_get_max_ranges(iter->opal_dev, passwd_p);
if (ret) {
printf("get max ranges failure: %d\n", ret);
spdk_opal_close(iter->opal_dev);
return;
}
@ -1158,6 +1168,7 @@ opal_list_locking_ranges(struct dev *iter)
passwd_p, OPAL_ADMIN1, i);
if (ret) {
printf("Get locking range info failure: %d\n", ret);
spdk_opal_close(iter->opal_dev);
return;
}
info = spdk_opal_get_locking_range_info(iter->opal_dev, i);
@ -1350,6 +1361,7 @@ opal_add_user_to_locking_range(struct dev *iter)
passwd_p);
if (ret) {
printf("Add user to locking range error: %d\n", ret);
spdk_opal_close(iter->opal_dev);
return;
}
@ -1418,6 +1430,7 @@ opal_user_lock_unlock_range(struct dev *iter)
break;
default:
printf("Invalid options\n");
spdk_opal_close(iter->opal_dev);
return;
}
while (getchar() != '\n');
@ -1426,6 +1439,7 @@ opal_user_lock_unlock_range(struct dev *iter)
locking_range_id, passwd_p);
if (ret) {
printf("lock/unlock range failure: %d\n", ret);
spdk_opal_close(iter->opal_dev);
return;
}
printf("...\n...\nLock/unlock range Success\n");

View File

@ -952,6 +952,11 @@ void
spdk_opal_close(struct spdk_opal_dev *dev)
{
pthread_mutex_destroy(&dev->mutex_lock);
if (dev->max_ranges > 0) {
for (int i = 0; i < dev->max_ranges; i++) {
free(dev->locking_range_info[i]);
}
}
free(dev->opal_info);
free(dev);
}