summaryrefslogtreecommitdiff
path: root/net/tipc/ref.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/ref.c')
-rw-r--r--net/tipc/ref.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/net/tipc/ref.c b/net/tipc/ref.c
index 3d4ecd754eee..7fc2740846e3 100644
--- a/net/tipc/ref.c
+++ b/net/tipc/ref.c
@@ -264,3 +264,23 @@ void *tipc_ref_lock(u32 ref)
}
return NULL;
}
+
+/* tipc_ref_lock_next - lock & return next object after referenced one
+*/
+void *tipc_ref_lock_next(u32 *ref)
+{
+ struct reference *entry;
+ uint index = *ref & tipc_ref_table.index_mask;
+
+ while (++index < tipc_ref_table.capacity) {
+ entry = &tipc_ref_table.entries[index];
+ if (!entry->object)
+ continue;
+ spin_lock_bh(&entry->lock);
+ *ref = entry->ref;
+ if (entry->object)
+ return entry->object;
+ spin_unlock_bh(&entry->lock);
+ }
+ return NULL;
+}