fs: dlm: call dlm_lsop_recover_prep once
authorAlexander Aring <aahringo@redhat.com>
Wed, 22 Jun 2022 18:45:14 +0000 (14:45 -0400)
committerDavid Teigland <teigland@redhat.com>
Fri, 24 Jun 2022 16:57:46 +0000 (11:57 -0500)
A lockspace can be "stopped" multiple times consecutively before
being "started" (when recoveries overlap.)  In this case, the
lsop_recover_prep callback only needs to be called once when the
lockspace is first stopped, and not repeatedly for each stop.

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

index 7e5f5ae..67b0566 100644 (file)
@@ -679,7 +679,16 @@ int dlm_ls_stop(struct dlm_ls *ls)
        if (!ls->ls_recover_begin)
                ls->ls_recover_begin = jiffies;
 
-       dlm_lsop_recover_prep(ls);
+       /* call recover_prep ops only once and not multiple times
+        * for each possible dlm_ls_stop() when recovery is already
+        * stopped.
+        *
+        * If we successful was able to clear LSFL_RUNNING bit and
+        * it was set we know it is the first dlm_ls_stop() call.
+        */
+       if (new)
+               dlm_lsop_recover_prep(ls);
+
        return 0;
 }