The h_lock spinlock is now only taken while bucket->lock
is held. As a handle is associated with precisely one bucket,
this means that h_lock can never be contended, so it isn't needed.
So discard h_lock.
Also discard an increasingly irrelevant comment in the declaration
of struct portals_handle.
Change-Id: Ib5231fb43d1bf5031d5c2426c4e1d1865544bcf5
Signed-off-by: NeilBrown <neilb@suse.com>
Reviewed-on: https://review.whamcloud.com/35863
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
__u64 h_cookie;
const char *h_owner;
refcount_t h_ref;
-
- /* newly added fields to handle the RCU issue. -jxiong */
struct rcu_head h_rcu;
- spinlock_t h_lock;
};
/* handles.c */
spin_unlock(&handle_base_lock);
h->h_owner = owner;
- spin_lock_init(&h->h_lock);
bucket = &handle_hash[h->h_cookie & HANDLE_HASH_MASK];
spin_lock(&bucket->lock);
CDEBUG(D_INFO, "removing object %p with handle %#llx from hash\n",
h, h->h_cookie);
- spin_lock(&h->h_lock);
- if (hlist_unhashed(&h->h_link)) {
- spin_unlock(&h->h_lock);
- return;
- }
hlist_del_init_rcu(&h->h_link);
- spin_unlock(&h->h_lock);
}
void class_handle_unhash(struct portals_handle *h)