From: Alexander Aring Date: Fri, 2 Aug 2024 17:26:44 +0000 (-0400) Subject: dlm: use RSB_HASHED to avoid lookup twice X-Git-Tag: v6.12-rc1~137^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=98ff7d95d91b56d8f2fdd0c4d0421f7fbb538cba;p=thirdparty%2Flinux.git dlm: use RSB_HASHED to avoid lookup twice 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 Signed-off-by: David Teigland --- diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c index 30aec123a4833..8bf3654f4827b 100644 --- a/fs/dlm/lock.c +++ b/fs/dlm/lock.c @@ -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