]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
dlm: use RSB_HASHED to avoid lookup twice
authorAlexander Aring <aahringo@redhat.com>
Fri, 2 Aug 2024 17:26:44 +0000 (13:26 -0400)
committerDavid Teigland <teigland@redhat.com>
Thu, 8 Aug 2024 20:15:08 +0000 (15:15 -0500)
Since commit 01fdeca1cc2d ("dlm: use rcu to avoid an extra rsb struct
lookup") _dlm_master_lookup() is called under rcu lock that prevents
that the rsb structure is being freed. There was a missing change to
avoid an additional lookup and just check that the rsb is still part of
the ls_rsbtbl structure. This patch is doing such check instead of
lookup the rsb structure again.

Signed-off-by: Alexander Aring <aahringo@redhat.com>
Signed-off-by: David Teigland <teigland@redhat.com>
fs/dlm/lock.c

index 30aec123a483317b3ca42b57037352840d7763c8..8bf3654f4827b1ffa01ce635fc7028db9b62a7d6 100644 (file)
@@ -1308,11 +1308,11 @@ static int _dlm_master_lookup(struct dlm_ls *ls, int from_nodeid, const char *na
        }
 
  do_inactive:
-       /* unlikely path - relookup under write */
+       /* unlikely path - check if still part of ls_rsbtbl */
        write_lock_bh(&ls->ls_rsbtbl_lock);
 
-       error = dlm_search_rsb_tree(&ls->ls_rsbtbl, name, len, &r);
-       if (!error) {
+       /* see comment in find_rsb_dir */
+       if (rsb_flag(r, RSB_HASHED)) {
                if (!rsb_flag(r, RSB_INACTIVE)) {
                        write_unlock_bh(&ls->ls_rsbtbl_lock);
                        /* something as changed, very unlikely but