Commit 978813ee authored by Jon Paul Maloy's avatar Jon Paul Maloy Committed by David S. Miller

tipc: replace reference table rwlock with spinlock

The lock for protecting the reference table is declared as an
RWLOCK, although it is only used in write mode, never in read
mode.

We redefine it to become a spinlock.
Signed-off-by: default avatarJon Maloy <jon.maloy@ericsson.com>
Reviewed-by: default avatarYing Xue <ying.xue@windriver.com>
Reviewed-by: default avatarErik Hugne <erik.hugne@ericsson.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4a93f509
...@@ -89,7 +89,7 @@ struct ref_table { ...@@ -89,7 +89,7 @@ struct ref_table {
static struct ref_table tipc_ref_table; static struct ref_table tipc_ref_table;
static DEFINE_RWLOCK(ref_table_lock); static DEFINE_SPINLOCK(ref_table_lock);
/** /**
* tipc_ref_table_init - create reference table for objects * tipc_ref_table_init - create reference table for objects
...@@ -159,7 +159,7 @@ u32 tipc_ref_acquire(void *object, spinlock_t **lock) ...@@ -159,7 +159,7 @@ u32 tipc_ref_acquire(void *object, spinlock_t **lock)
} }
/* take a free entry, if available; otherwise initialize a new entry */ /* take a free entry, if available; otherwise initialize a new entry */
write_lock_bh(&ref_table_lock); spin_lock_bh(&ref_table_lock);
if (tipc_ref_table.first_free) { if (tipc_ref_table.first_free) {
index = tipc_ref_table.first_free; index = tipc_ref_table.first_free;
entry = &(tipc_ref_table.entries[index]); entry = &(tipc_ref_table.entries[index]);
...@@ -175,7 +175,7 @@ u32 tipc_ref_acquire(void *object, spinlock_t **lock) ...@@ -175,7 +175,7 @@ u32 tipc_ref_acquire(void *object, spinlock_t **lock)
} else { } else {
ref = 0; ref = 0;
} }
write_unlock_bh(&ref_table_lock); spin_unlock_bh(&ref_table_lock);
/* /*
* Grab the lock so no one else can modify this entry * Grab the lock so no one else can modify this entry
...@@ -216,7 +216,7 @@ void tipc_ref_discard(u32 ref) ...@@ -216,7 +216,7 @@ void tipc_ref_discard(u32 ref)
index = ref & index_mask; index = ref & index_mask;
entry = &(tipc_ref_table.entries[index]); entry = &(tipc_ref_table.entries[index]);
write_lock_bh(&ref_table_lock); spin_lock_bh(&ref_table_lock);
if (!entry->object) { if (!entry->object) {
pr_err("Attempt to discard ref. to non-existent obj\n"); pr_err("Attempt to discard ref. to non-existent obj\n");
...@@ -242,7 +242,7 @@ void tipc_ref_discard(u32 ref) ...@@ -242,7 +242,7 @@ void tipc_ref_discard(u32 ref)
tipc_ref_table.last_free = index; tipc_ref_table.last_free = index;
exit: exit:
write_unlock_bh(&ref_table_lock); spin_unlock_bh(&ref_table_lock);
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment