tipc: replace reference table rwlock with spinlock
authorJon Paul Maloy <jon.maloy@ericsson.com>
Wed, 12 Mar 2014 15:31:07 +0000 (11:31 -0400)
committerDavid S. Miller <davem@davemloft.net>
Wed, 12 Mar 2014 19:53:49 +0000 (15:53 -0400)
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: Jon Maloy <jon.maloy@ericsson.com>
Reviewed-by: Ying Xue <ying.xue@windriver.com>
Reviewed-by: Erik Hugne <erik.hugne@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/ref.c

index de3d593..67176b5 100644 (file)
@@ -89,7 +89,7 @@ struct 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
@@ -159,7 +159,7 @@ u32 tipc_ref_acquire(void *object, spinlock_t **lock)
        }
 
        /* 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) {
                index = tipc_ref_table.first_free;
                entry = &(tipc_ref_table.entries[index]);
@@ -175,7 +175,7 @@ u32 tipc_ref_acquire(void *object, spinlock_t **lock)
        } else {
                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
@@ -216,7 +216,7 @@ void tipc_ref_discard(u32 ref)
        index = ref & index_mask;
        entry = &(tipc_ref_table.entries[index]);
 
-       write_lock_bh(&ref_table_lock);
+       spin_lock_bh(&ref_table_lock);
 
        if (!entry->object) {
                pr_err("Attempt to discard ref. to non-existent obj\n");
@@ -242,7 +242,7 @@ void tipc_ref_discard(u32 ref)
        tipc_ref_table.last_free = index;
 
 exit:
-       write_unlock_bh(&ref_table_lock);
+       spin_unlock_bh(&ref_table_lock);
 }
 
 /**