diff options
Diffstat (limited to 'net/tipc/ref.c')
| -rw-r--r-- | net/tipc/ref.c | 27 |
1 files changed, 5 insertions, 22 deletions
diff --git a/net/tipc/ref.c b/net/tipc/ref.c index de3d593e2fee..3d4ecd754eee 100644 --- a/net/tipc/ref.c +++ b/net/tipc/ref.c | |||
| @@ -89,7 +89,7 @@ struct ref_table { | |||
| 89 | 89 | ||
| 90 | static struct ref_table tipc_ref_table; | 90 | static struct ref_table tipc_ref_table; |
| 91 | 91 | ||
| 92 | static DEFINE_RWLOCK(ref_table_lock); | 92 | static DEFINE_SPINLOCK(ref_table_lock); |
| 93 | 93 | ||
| 94 | /** | 94 | /** |
| 95 | * tipc_ref_table_init - create reference table for objects | 95 | * tipc_ref_table_init - create reference table for objects |
| @@ -159,7 +159,7 @@ u32 tipc_ref_acquire(void *object, spinlock_t **lock) | |||
| 159 | } | 159 | } |
| 160 | 160 | ||
| 161 | /* take a free entry, if available; otherwise initialize a new entry */ | 161 | /* take a free entry, if available; otherwise initialize a new entry */ |
| 162 | write_lock_bh(&ref_table_lock); | 162 | spin_lock_bh(&ref_table_lock); |
| 163 | if (tipc_ref_table.first_free) { | 163 | if (tipc_ref_table.first_free) { |
| 164 | index = tipc_ref_table.first_free; | 164 | index = tipc_ref_table.first_free; |
| 165 | entry = &(tipc_ref_table.entries[index]); | 165 | entry = &(tipc_ref_table.entries[index]); |
| @@ -175,7 +175,7 @@ u32 tipc_ref_acquire(void *object, spinlock_t **lock) | |||
| 175 | } else { | 175 | } else { |
| 176 | ref = 0; | 176 | ref = 0; |
| 177 | } | 177 | } |
| 178 | write_unlock_bh(&ref_table_lock); | 178 | spin_unlock_bh(&ref_table_lock); |
| 179 | 179 | ||
| 180 | /* | 180 | /* |
| 181 | * Grab the lock so no one else can modify this entry | 181 | * Grab the lock so no one else can modify this entry |
| @@ -216,7 +216,7 @@ void tipc_ref_discard(u32 ref) | |||
| 216 | index = ref & index_mask; | 216 | index = ref & index_mask; |
| 217 | entry = &(tipc_ref_table.entries[index]); | 217 | entry = &(tipc_ref_table.entries[index]); |
| 218 | 218 | ||
| 219 | write_lock_bh(&ref_table_lock); | 219 | spin_lock_bh(&ref_table_lock); |
| 220 | 220 | ||
| 221 | if (!entry->object) { | 221 | if (!entry->object) { |
| 222 | pr_err("Attempt to discard ref. to non-existent obj\n"); | 222 | pr_err("Attempt to discard ref. to non-existent obj\n"); |
| @@ -242,7 +242,7 @@ void tipc_ref_discard(u32 ref) | |||
| 242 | tipc_ref_table.last_free = index; | 242 | tipc_ref_table.last_free = index; |
| 243 | 243 | ||
| 244 | exit: | 244 | exit: |
| 245 | write_unlock_bh(&ref_table_lock); | 245 | spin_unlock_bh(&ref_table_lock); |
| 246 | } | 246 | } |
| 247 | 247 | ||
| 248 | /** | 248 | /** |
| @@ -264,20 +264,3 @@ void *tipc_ref_lock(u32 ref) | |||
| 264 | } | 264 | } |
| 265 | return NULL; | 265 | return NULL; |
| 266 | } | 266 | } |
| 267 | |||
| 268 | |||
| 269 | /** | ||
| 270 | * tipc_ref_deref - return pointer referenced object (without locking it) | ||
| 271 | */ | ||
| 272 | void *tipc_ref_deref(u32 ref) | ||
| 273 | { | ||
| 274 | if (likely(tipc_ref_table.entries)) { | ||
| 275 | struct reference *entry; | ||
| 276 | |||
| 277 | entry = &tipc_ref_table.entries[ref & | ||
| 278 | tipc_ref_table.index_mask]; | ||
| 279 | if (likely(entry->ref == ref)) | ||
| 280 | return entry->object; | ||
| 281 | } | ||
| 282 | return NULL; | ||
| 283 | } | ||
