diff options
author | Daniel Phillips <phillips@google.com> | 2006-03-10 16:31:47 -0500 |
---|---|---|
committer | Mark Fasheh <mark.fasheh@oracle.com> | 2006-06-26 17:42:40 -0400 |
commit | 4198985f7ae119a23f83503a692dd822bd574080 (patch) | |
tree | 83c810ea0c492296dae76b59547700db4161806f /fs/ocfs2/dlm/dlmdomain.c | |
parent | a3d3329159ea76bae0b3b8680691a1c3ecf5801f (diff) |
[PATCH] Clean up ocfs2 hash probe and make it faster
Signed-Off-By: Daniel Phillips <phillips@google.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
Diffstat (limited to 'fs/ocfs2/dlm/dlmdomain.c')
-rw-r--r-- | fs/ocfs2/dlm/dlmdomain.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c index a818fde24476..595b1c7cbd1f 100644 --- a/fs/ocfs2/dlm/dlmdomain.c +++ b/fs/ocfs2/dlm/dlmdomain.c | |||
@@ -103,28 +103,27 @@ struct dlm_lock_resource * __dlm_lookup_lockres(struct dlm_ctxt *dlm, | |||
103 | unsigned int len, | 103 | unsigned int len, |
104 | unsigned int hash) | 104 | unsigned int hash) |
105 | { | 105 | { |
106 | struct hlist_node *iter; | ||
107 | struct dlm_lock_resource *tmpres=NULL; | ||
108 | struct hlist_head *bucket; | 106 | struct hlist_head *bucket; |
107 | struct hlist_node *list; | ||
109 | 108 | ||
110 | mlog_entry("%.*s\n", len, name); | 109 | mlog_entry("%.*s\n", len, name); |
111 | 110 | ||
112 | assert_spin_locked(&dlm->spinlock); | 111 | assert_spin_locked(&dlm->spinlock); |
113 | 112 | ||
114 | bucket = &(dlm->lockres_hash[hash % DLM_HASH_BUCKETS]); | 113 | bucket = dlm->lockres_hash + full_name_hash(name, len) % DLM_HASH_BUCKETS; |
115 | 114 | hlist_for_each(list, bucket) { | |
116 | /* check for pre-existing lock */ | 115 | struct dlm_lock_resource *res = hlist_entry(list, |
117 | hlist_for_each(iter, bucket) { | 116 | struct dlm_lock_resource, hash_node); |
118 | tmpres = hlist_entry(iter, struct dlm_lock_resource, hash_node); | 117 | if (res->lockname.name[0] != name[0]) |
119 | if (tmpres->lockname.len == len && | 118 | continue; |
120 | memcmp(tmpres->lockname.name, name, len) == 0) { | 119 | if (unlikely(res->lockname.len != len)) |
121 | dlm_lockres_get(tmpres); | 120 | continue; |
122 | break; | 121 | if (memcmp(res->lockname.name + 1, name + 1, len - 1)) |
123 | } | 122 | continue; |
124 | 123 | dlm_lockres_get(res); | |
125 | tmpres = NULL; | 124 | return res; |
126 | } | 125 | } |
127 | return tmpres; | 126 | return NULL; |
128 | } | 127 | } |
129 | 128 | ||
130 | struct dlm_lock_resource * dlm_lookup_lockres(struct dlm_ctxt *dlm, | 129 | struct dlm_lock_resource * dlm_lookup_lockres(struct dlm_ctxt *dlm, |