git://git.onelab.eu
/
fprobe-ulog.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Initialize hash, change init function name so it doesn't collide with fprobe-ulog's
[fprobe-ulog.git]
/
src
/
vserver.h
diff --git
a/src/vserver.h
b/src/vserver.h
index
6037db3
..
79a5704
100644
(file)
--- a/
src/vserver.h
+++ b/
src/vserver.h
@@
-31,13
+31,25
@@
struct hash_entry {
struct hash_entry slice_id_hash[HASH_SIZE];
struct hash_entry slice_id_hash[HASH_SIZE];
+void init_slice_id_hash() {
+ memset(slice_id_hash, 0, HASH_SIZE);
+}
void set_hash_entry(unsigned int xid, uint32_t slice_id) {
int idx = xid & HASH_TABLE_MASK;
int i;
void set_hash_entry(unsigned int xid, uint32_t slice_id) {
int idx = xid & HASH_TABLE_MASK;
int i;
- for (i = idx;i!=idx;i=(i+1) & HASH_TABLE_MASK) {
- struct hash_entry *entry = &slice_id_hash[i];
+
+ struct hash_entry *entry = &slice_id_hash[idx];
+ if (entry->xid == 0 || entry->xid ==xid) {
+ entry->slice_id = slice_id;
+ entry->xid = xid;
+ return;
+ }
+
+ for (i = idx+1;i!=idx;i=(i+1) & HASH_TABLE_MASK) {
+ entry = &slice_id_hash[i];
if (entry->xid == 0 || entry->xid == xid) {
if (entry->xid == 0 || entry->xid == xid) {
- entry->xid = slice_id;
+ entry->slice_id = slice_id;
+ entry->xid = xid;
break;
}
}
break;
}
}
@@
-62,15
+74,21
@@
uint32_t xid_to_slice_id_slow(unsigned int xid) {
uint32_t xid_to_slice_id_fast(unsigned int xid) {
int idx = xid & HASH_TABLE_MASK;
int i;
uint32_t xid_to_slice_id_fast(unsigned int xid) {
int idx = xid & HASH_TABLE_MASK;
int i;
- uint32_t slice_id;
- for (i = idx;i!=idx;i=(i+1) & HASH_TABLE_MASK) {
- struct hash_entry *entry = &slice_id_hash[i];
+ uint32_t slice_id = 0;
+
+ struct hash_entry *entry = &slice_id_hash[idx];
+ if (entry->xid == xid)
+ return entry->slice_id;
+
+ for (i = idx+1;i!=idx;i=(i+1) & HASH_TABLE_MASK) {
+ entry = &slice_id_hash[i];
if (entry->xid == xid) {
if (entry->xid == xid) {
-
entry->xid =
slice_id;
+
slice_id = entry->
slice_id;
break;
}
}
break;
}
}
-
+
+ return slice_id;
}
uint32_t xid_to_slice_id(unsigned int xid) {
}
uint32_t xid_to_slice_id(unsigned int xid) {
@@
-83,4
+101,5
@@
uint32_t xid_to_slice_id(unsigned int xid) {
return xid_to_slice_id_slow(xid);
}
return xid_to_slice_id_slow(xid);
}
+
#endif
#endif