Whamcloud - gitweb
LU-12542 handle: discard h_lock. 63/35863/7
authorNeilBrown <neilb@suse.com>
Fri, 13 Dec 2019 15:48:18 +0000 (10:48 -0500)
committerOleg Drokin <green@whamcloud.com>
Sat, 8 Feb 2020 04:05:47 +0000 (04:05 +0000)
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>
lustre/include/lustre_handles.h
lustre/obdclass/lustre_handles.c

index 9da8985..e94e1f6 100644 (file)
@@ -63,10 +63,7 @@ struct portals_handle {
        __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 */
index 1f93ed5..27f6971 100644 (file)
@@ -88,7 +88,6 @@ void class_handle_hash(struct portals_handle *h, const char *owner)
        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);
@@ -112,13 +111,7 @@ static void class_handle_unhash_nolock(struct portals_handle *h)
        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)