keys: Change keyring_serialise_link_sem to a mutex
Change keyring_serialise_link_sem to a mutex as it's only ever write-locked. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
9fd165379e
commit
3be59f7451
|
@ -100,7 +100,7 @@ EXPORT_SYMBOL(key_type_keyring);
|
||||||
* Semaphore to serialise link/link calls to prevent two link calls in parallel
|
* Semaphore to serialise link/link calls to prevent two link calls in parallel
|
||||||
* introducing a cycle.
|
* introducing a cycle.
|
||||||
*/
|
*/
|
||||||
static DECLARE_RWSEM(keyring_serialise_link_sem);
|
static DEFINE_MUTEX(keyring_serialise_link_lock);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Publish the name of a keyring so that it can be found by name (if it has
|
* Publish the name of a keyring so that it can be found by name (if it has
|
||||||
|
@ -1206,7 +1206,7 @@ int __key_link_begin(struct key *keyring,
|
||||||
const struct keyring_index_key *index_key,
|
const struct keyring_index_key *index_key,
|
||||||
struct assoc_array_edit **_edit)
|
struct assoc_array_edit **_edit)
|
||||||
__acquires(&keyring->sem)
|
__acquires(&keyring->sem)
|
||||||
__acquires(&keyring_serialise_link_sem)
|
__acquires(&keyring_serialise_link_lock)
|
||||||
{
|
{
|
||||||
struct assoc_array_edit *edit;
|
struct assoc_array_edit *edit;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -1228,7 +1228,7 @@ int __key_link_begin(struct key *keyring,
|
||||||
/* serialise link/link calls to prevent parallel calls causing a cycle
|
/* serialise link/link calls to prevent parallel calls causing a cycle
|
||||||
* when linking two keyring in opposite orders */
|
* when linking two keyring in opposite orders */
|
||||||
if (index_key->type == &key_type_keyring)
|
if (index_key->type == &key_type_keyring)
|
||||||
down_write(&keyring_serialise_link_sem);
|
mutex_lock(&keyring_serialise_link_lock);
|
||||||
|
|
||||||
/* Create an edit script that will insert/replace the key in the
|
/* Create an edit script that will insert/replace the key in the
|
||||||
* keyring tree.
|
* keyring tree.
|
||||||
|
@ -1260,7 +1260,7 @@ int __key_link_begin(struct key *keyring,
|
||||||
assoc_array_cancel_edit(edit);
|
assoc_array_cancel_edit(edit);
|
||||||
error_sem:
|
error_sem:
|
||||||
if (index_key->type == &key_type_keyring)
|
if (index_key->type == &key_type_keyring)
|
||||||
up_write(&keyring_serialise_link_sem);
|
mutex_unlock(&keyring_serialise_link_lock);
|
||||||
error_krsem:
|
error_krsem:
|
||||||
up_write(&keyring->sem);
|
up_write(&keyring->sem);
|
||||||
kleave(" = %d", ret);
|
kleave(" = %d", ret);
|
||||||
|
@ -1307,13 +1307,13 @@ void __key_link_end(struct key *keyring,
|
||||||
const struct keyring_index_key *index_key,
|
const struct keyring_index_key *index_key,
|
||||||
struct assoc_array_edit *edit)
|
struct assoc_array_edit *edit)
|
||||||
__releases(&keyring->sem)
|
__releases(&keyring->sem)
|
||||||
__releases(&keyring_serialise_link_sem)
|
__releases(&keyring_serialise_link_lock)
|
||||||
{
|
{
|
||||||
BUG_ON(index_key->type == NULL);
|
BUG_ON(index_key->type == NULL);
|
||||||
kenter("%d,%s,", keyring->serial, index_key->type->name);
|
kenter("%d,%s,", keyring->serial, index_key->type->name);
|
||||||
|
|
||||||
if (index_key->type == &key_type_keyring)
|
if (index_key->type == &key_type_keyring)
|
||||||
up_write(&keyring_serialise_link_sem);
|
mutex_unlock(&keyring_serialise_link_lock);
|
||||||
|
|
||||||
if (edit) {
|
if (edit) {
|
||||||
if (!edit->dead_leaf) {
|
if (!edit->dead_leaf) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user