From 30e42bcecfc3ca96bfe5c0170546fed97ae353d0 Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Wed, 8 Apr 2020 21:40:03 +0800 Subject: [PATCH] nvme/opal: remove the device mutex lock finally We can remove the device lock from now because all the APIs are executed base on session, the controller can return error if there are multiple sessions, actually most drives can only support one active session. Change-Id: I9d5f4dc01a50ec95ef97b38c9e079ef95f37e4de Signed-off-by: Changpeng Liu Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1741 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- lib/nvme/nvme_opal.c | 42 ----------------------------------- lib/nvme/nvme_opal_internal.h | 2 -- 2 files changed, 44 deletions(-) diff --git a/lib/nvme/nvme_opal.c b/lib/nvme/nvme_opal.c index 9d10a9ea3..299e7dc30 100644 --- a/lib/nvme/nvme_opal.c +++ b/lib/nvme/nvme_opal.c @@ -886,7 +886,6 @@ opal_end_session(struct spdk_opal_dev *dev, struct opal_session *sess, uint16_t void spdk_opal_dev_destruct(struct spdk_opal_dev *dev) { - pthread_mutex_destroy(&dev->mutex_lock); free(dev); } @@ -1776,7 +1775,6 @@ spdk_opal_cmd_take_ownership(struct spdk_opal_dev *dev, char *new_passwd) return -ENOMEM; } - pthread_mutex_lock(&dev->mutex_lock); ret = opal_start_generic_session(dev, sess, UID_ANYBODY, UID_ADMINSP, NULL, 0); if (ret) { SPDK_ERRLOG("start admin SP session error %d\n", ret); @@ -1820,7 +1818,6 @@ spdk_opal_cmd_take_ownership(struct spdk_opal_dev *dev, char *new_passwd) } end: - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -1853,12 +1850,6 @@ struct spdk_opal_dev * } free(payload); - if (pthread_mutex_init(&dev->mutex_lock, NULL)) { - SPDK_ERRLOG("Mutex init failed\n"); - free(dev); - return NULL; - } - return dev; } @@ -2064,12 +2055,10 @@ spdk_opal_cmd_revert_tper(struct spdk_opal_dev *dev, const char *passwd) return -ENOMEM; } - pthread_mutex_lock(&dev->mutex_lock); ret = opal_start_generic_session(dev, sess, UID_SID, UID_ADMINSP, opal_key.key, opal_key.key_len); if (ret) { SPDK_ERRLOG("Error on starting admin SP session with error %d\n", ret); - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2096,7 +2085,6 @@ spdk_opal_cmd_revert_tper(struct spdk_opal_dev *dev, const char *passwd) /* No opal_end_session() required here for successful case */ end: - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2118,12 +2106,10 @@ spdk_opal_cmd_activate_locking_sp(struct spdk_opal_dev *dev, const char *passwd) return -ENOMEM; } - pthread_mutex_lock(&dev->mutex_lock); ret = opal_start_generic_session(dev, sess, UID_SID, UID_ADMINSP, opal_key.key, opal_key.key_len); if (ret) { SPDK_ERRLOG("Error on starting admin SP session with error %d\n", ret); - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2145,7 +2131,6 @@ end: SPDK_ERRLOG("Error on ending session with error %d\n", ret); } - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2173,11 +2158,9 @@ spdk_opal_cmd_lock_unlock(struct spdk_opal_dev *dev, enum spdk_opal_user user, return -ENOMEM; } - pthread_mutex_lock(&dev->mutex_lock); ret = opal_start_auth_session(dev, sess, user, &opal_key); if (ret) { SPDK_ERRLOG("start authenticate session error %d\n", ret); - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2192,7 +2175,6 @@ spdk_opal_cmd_lock_unlock(struct spdk_opal_dev *dev, enum spdk_opal_user user, SPDK_ERRLOG("end session error %d\n", ret); } - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2220,11 +2202,9 @@ spdk_opal_cmd_setup_locking_range(struct spdk_opal_dev *dev, enum spdk_opal_user return -ENOMEM; } - pthread_mutex_lock(&dev->mutex_lock); ret = opal_start_auth_session(dev, sess, user, &opal_key); if (ret) { SPDK_ERRLOG("start authenticate session error %d\n", ret); - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2240,7 +2220,6 @@ spdk_opal_cmd_setup_locking_range(struct spdk_opal_dev *dev, enum spdk_opal_user SPDK_ERRLOG("end session error %d\n", ret); } - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2270,11 +2249,9 @@ spdk_opal_cmd_get_max_ranges(struct spdk_opal_dev *dev, const char *passwd) return -ENOMEM; } - pthread_mutex_lock(&dev->mutex_lock); ret = opal_start_auth_session(dev, sess, OPAL_ADMIN1, &opal_key); if (ret) { SPDK_ERRLOG("start authenticate session error %d\n", ret); - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2289,7 +2266,6 @@ spdk_opal_cmd_get_max_ranges(struct spdk_opal_dev *dev, const char *passwd) SPDK_ERRLOG("end session error %d\n", ret); } - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return (ret == 0 ? dev->max_ranges : ret); @@ -2318,11 +2294,9 @@ spdk_opal_cmd_get_locking_range_info(struct spdk_opal_dev *dev, const char *pass return -ENOMEM; } - pthread_mutex_lock(&dev->mutex_lock); ret = opal_start_auth_session(dev, sess, user_id, &opal_key); if (ret) { SPDK_ERRLOG("start authenticate session error %d\n", ret); - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2337,7 +2311,6 @@ spdk_opal_cmd_get_locking_range_info(struct spdk_opal_dev *dev, const char *pass SPDK_ERRLOG("end session error %d\n", ret); } - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2364,12 +2337,10 @@ spdk_opal_cmd_enable_user(struct spdk_opal_dev *dev, enum spdk_opal_user user_id return -ENOMEM; } - pthread_mutex_lock(&dev->mutex_lock); ret = opal_start_generic_session(dev, sess, UID_ADMIN1, UID_LOCKINGSP, opal_key.key, opal_key.key_len); if (ret) { SPDK_ERRLOG("start locking SP session error %d\n", ret); - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2384,7 +2355,6 @@ spdk_opal_cmd_enable_user(struct spdk_opal_dev *dev, enum spdk_opal_user user_id SPDK_ERRLOG("end session error %d\n", ret); } - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2412,12 +2382,10 @@ spdk_opal_cmd_add_user_to_locking_range(struct spdk_opal_dev *dev, enum spdk_opa return -ENOMEM; } - pthread_mutex_lock(&dev->mutex_lock); ret = opal_start_generic_session(dev, sess, UID_ADMIN1, UID_LOCKINGSP, opal_key.key, opal_key.key_len); if (ret) { SPDK_ERRLOG("start locking SP session error %d\n", ret); - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2432,7 +2400,6 @@ spdk_opal_cmd_add_user_to_locking_range(struct spdk_opal_dev *dev, enum spdk_opa SPDK_ERRLOG("end session error %d\n", ret); } - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2465,12 +2432,10 @@ spdk_opal_cmd_set_new_passwd(struct spdk_opal_dev *dev, enum spdk_opal_user user return -ENOMEM; } - pthread_mutex_lock(&dev->mutex_lock); ret = opal_start_auth_session(dev, sess, new_user ? OPAL_ADMIN1 : user_id, &old_key); if (ret) { SPDK_ERRLOG("start authenticate session error %d\n", ret); - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2485,7 +2450,6 @@ spdk_opal_cmd_set_new_passwd(struct spdk_opal_dev *dev, enum spdk_opal_user user SPDK_ERRLOG("end session error %d\n", ret); } - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2512,11 +2476,9 @@ spdk_opal_cmd_erase_locking_range(struct spdk_opal_dev *dev, enum spdk_opal_user return -ENOMEM; } - pthread_mutex_lock(&dev->mutex_lock); ret = opal_start_auth_session(dev, sess, user_id, &opal_key); if (ret) { SPDK_ERRLOG("start authenticate session error %d\n", ret); - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2531,7 +2493,6 @@ spdk_opal_cmd_erase_locking_range(struct spdk_opal_dev *dev, enum spdk_opal_user SPDK_ERRLOG("end session error %d\n", ret); } - pthread_mutex_unlock(&dev->mutex_lock); free(sess); return ret; } @@ -2565,13 +2526,11 @@ spdk_opal_cmd_secure_erase_locking_range(struct spdk_opal_dev *dev, enum spdk_op return -ENOMEM; } - pthread_mutex_lock(&dev->mutex_lock); ret = opal_start_auth_session(dev, sess, user_id, &opal_key); if (ret) { SPDK_ERRLOG("start authenticate session error %d\n", ret); free(active_key); free(sess); - pthread_mutex_unlock(&dev->mutex_lock); return ret; } @@ -2595,7 +2554,6 @@ end: } free(active_key); free(sess); - pthread_mutex_unlock(&dev->mutex_lock); return ret; } diff --git a/lib/nvme/nvme_opal_internal.h b/lib/nvme/nvme_opal_internal.h index aac9215ef..fa7cbe567 100644 --- a/lib/nvme/nvme_opal_internal.h +++ b/lib/nvme/nvme_opal_internal.h @@ -268,8 +268,6 @@ struct spdk_opal_dev { uint8_t max_ranges; /* max locking range number */ struct spdk_opal_locking_range_info locking_ranges[SPDK_OPAL_MAX_LOCKING_RANGE]; - - pthread_mutex_t mutex_lock; /* some structs are accessed by current thread only */ }; #endif