浏览代码

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: 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>
Jon Paul Maloy 11 年之前
父节点
当前提交
978813ee89
共有 1 个文件被更改,包括 5 次插入5 次删除
  1. 5 5
      net/tipc/ref.c

+ 5 - 5
net/tipc/ref.c

@@ -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)
 	}
 	}
 
 
 	/* 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)
 	} 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)
 	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)
 	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);
 }
 }
 
 
 /**
 /**