]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
dlm: use defines for force values in dlm_release_lockspace
authorAlexander Aring <aahringo@redhat.com>
Wed, 23 Jul 2025 15:21:53 +0000 (11:21 -0400)
committerDavid Teigland <teigland@redhat.com>
Tue, 12 Aug 2025 16:22:49 +0000 (11:22 -0500)
Clarify the use of the force parameter by renaming it to
"release_option" and adding defines (with descriptions) for
each of the accepted values.

Signed-off-by: Alexander Aring <aahringo@redhat.com>
Signed-off-by: David Teigland <teigland@redhat.com>
drivers/md/md-cluster.c
fs/dlm/lockspace.c
fs/dlm/user.c
fs/gfs2/lock_dlm.c
fs/ocfs2/stack_user.c
include/linux/dlm.h

index 5497eaee96e7d31d5fee874a135a993f0ae79a03..6e9a0045f0ffcad01debe6fe8a935c596a710531 100644 (file)
@@ -979,7 +979,7 @@ err:
        lockres_free(cinfo->resync_lockres);
        lockres_free(cinfo->bitmap_lockres);
        if (cinfo->lockspace)
-               dlm_release_lockspace(cinfo->lockspace, 2);
+               dlm_release_lockspace(cinfo->lockspace, DLM_RELEASE_NORMAL);
        mddev->cluster_info = NULL;
        kfree(cinfo);
        return ret;
@@ -1042,7 +1042,7 @@ static int leave(struct mddev *mddev)
        lockres_free(cinfo->resync_lockres);
        lockres_free(cinfo->bitmap_lockres);
        unlock_all_bitmaps(mddev);
-       dlm_release_lockspace(cinfo->lockspace, 2);
+       dlm_release_lockspace(cinfo->lockspace, DLM_RELEASE_NORMAL);
        kfree(cinfo);
        return 0;
 }
index ee11a70def92d534aa93ab110f2a9b8a90c1dc57..be8dbf482229538bace8c3f3ab5d5f4a424df810 100644 (file)
@@ -671,19 +671,20 @@ int dlm_new_user_lockspace(const char *name, const char *cluster,
    This is because there may be LKBs queued as ASTs that have been unlinked
    from their RSBs and are pending deletion once the AST has been delivered */
 
-static int lockspace_busy(struct dlm_ls *ls, int force)
+static int lockspace_busy(struct dlm_ls *ls, int release_option)
 {
        struct dlm_lkb *lkb;
        unsigned long id;
        int rv = 0;
 
        read_lock_bh(&ls->ls_lkbxa_lock);
-       if (force == 0) {
+       if (release_option == DLM_RELEASE_NO_LOCKS) {
                xa_for_each(&ls->ls_lkbxa, id, lkb) {
                        rv = 1;
                        break;
                }
-       } else if (force == 1) {
+       } else if (release_option == DLM_RELEASE_UNUSED) {
+               /* TODO: handle this UNUSED option as NO_LOCKS in later patch */
                xa_for_each(&ls->ls_lkbxa, id, lkb) {
                        if (lkb->lkb_nodeid == 0 &&
                            lkb->lkb_grmode != DLM_LOCK_IV) {
@@ -698,11 +699,11 @@ static int lockspace_busy(struct dlm_ls *ls, int force)
        return rv;
 }
 
-static int release_lockspace(struct dlm_ls *ls, int force)
+static int release_lockspace(struct dlm_ls *ls, int release_option)
 {
        int busy, rv;
 
-       busy = lockspace_busy(ls, force);
+       busy = lockspace_busy(ls, release_option);
 
        spin_lock_bh(&lslist_lock);
        if (ls->ls_create_count == 1) {
@@ -730,7 +731,8 @@ static int release_lockspace(struct dlm_ls *ls, int force)
 
        dlm_device_deregister(ls);
 
-       if (force != 3 && dlm_user_daemon_available())
+       if (release_option != DLM_RELEASE_NO_EVENT &&
+           dlm_user_daemon_available())
                do_uevent(ls, 0);
 
        dlm_recoverd_stop(ls);
@@ -782,11 +784,7 @@ static int release_lockspace(struct dlm_ls *ls, int force)
  * lockspace must continue to function as usual, participating in recoveries,
  * until this returns.
  *
- * Force has 4 possible values:
- * 0 - don't destroy lockspace if it has any LKBs
- * 1 - destroy lockspace if it has remote LKBs but not if it has local LKBs
- * 2 - destroy lockspace regardless of LKBs
- * 3 - destroy lockspace as part of a forced shutdown
+ * See DLM_RELEASE defines for release_option values and their meaning.
  */
 
 int dlm_release_lockspace(void *lockspace, int force)
index 5cb3896be8260f34791e6c260bf55f2f48cd5b67..51daf4acbe318bc6ff139c9da804ac495daebc23 100644 (file)
@@ -425,7 +425,7 @@ static int device_create_lockspace(struct dlm_lspace_params *params)
        dlm_put_lockspace(ls);
 
        if (error)
-               dlm_release_lockspace(lockspace, 0);
+               dlm_release_lockspace(lockspace, DLM_RELEASE_NO_LOCKS);
        else
                error = ls->ls_device.minor;
 
@@ -436,7 +436,7 @@ static int device_remove_lockspace(struct dlm_lspace_params *params)
 {
        dlm_lockspace_t *lockspace;
        struct dlm_ls *ls;
-       int error, force = 0;
+       int error, force = DLM_RELEASE_NO_LOCKS;
 
        if (!capable(CAP_SYS_ADMIN))
                return -EPERM;
@@ -446,7 +446,7 @@ static int device_remove_lockspace(struct dlm_lspace_params *params)
                return -ENOENT;
 
        if (params->flags & DLM_USER_LSFLG_FORCEFREE)
-               force = 2;
+               force = DLM_RELEASE_NORMAL;
 
        lockspace = ls;
        dlm_put_lockspace(ls);
index cee5d199d2d87086afbb61e4727f9422501365db..aac4dd6d0381f7bca933492351d3a6c8e12f698b 100644 (file)
@@ -1400,7 +1400,7 @@ static int gdlm_mount(struct gfs2_sbd *sdp, const char *table)
        return 0;
 
 fail_release:
-       dlm_release_lockspace(ls->ls_dlm, 2);
+       dlm_release_lockspace(ls->ls_dlm, DLM_RELEASE_NORMAL);
 fail_free:
        free_recover_size(ls);
 fail:
@@ -1437,7 +1437,7 @@ static void gdlm_unmount(struct gfs2_sbd *sdp)
        /* mounted_lock and control_lock will be purged in dlm recovery */
 release:
        if (ls->ls_dlm) {
-               dlm_release_lockspace(ls->ls_dlm, 2);
+               dlm_release_lockspace(ls->ls_dlm, DLM_RELEASE_NORMAL);
                ls->ls_dlm = NULL;
        }
 
index 0f045e45fa0c3e6a7cc9ca0a756e1fc79bafdaae..765105f1ff8a2cce4dda335da8310278f5cf0ad2 100644 (file)
@@ -952,7 +952,7 @@ static const struct dlm_lockspace_ops ocfs2_ls_ops = {
 static int user_cluster_disconnect(struct ocfs2_cluster_connection *conn)
 {
        version_unlock(conn);
-       dlm_release_lockspace(conn->cc_lockspace, 2);
+       dlm_release_lockspace(conn->cc_lockspace, DLM_RELEASE_NORMAL);
        conn->cc_lockspace = NULL;
        ocfs2_live_connection_drop(conn->cc_private);
        conn->cc_private = NULL;
index bacda9898f2b6c50cd222b49db53b237c0ad363a..cc7a36244893d0baeb4baa864df31b7edd5039c0 100644 (file)
@@ -87,13 +87,37 @@ int dlm_new_lockspace(const char *name, const char *cluster,
                      const struct dlm_lockspace_ops *ops, void *ops_arg,
                      int *ops_result, dlm_lockspace_t **lockspace);
 
+/*
+ * dlm_release_lockspace() release_option values:
+ *
+ * DLM_RELEASE_NO_LOCKS returns -EBUSY if any locks (lkb's)
+ *   exist in the local lockspace.
+ *
+ * DLM_RELEASE_UNUSED previous value that is no longer used.
+ *
+ * DLM_RELEASE_NORMAL releases the lockspace regardless of any
+ *   locks managed in the local lockspace.
+ *
+ * DLM_RELEASE_NO_EVENT release the lockspace regardless of any
+ *   locks managed in the local lockspace, and does not submit
+ *   a leave event to the cluster manager, so other nodes will
+ *   not be notified that the node should be removed from the
+ *   list of lockspace members.
+ */
+#define DLM_RELEASE_NO_LOCKS           0
+#define DLM_RELEASE_UNUSED             1
+#define DLM_RELEASE_NORMAL             2
+#define DLM_RELEASE_NO_EVENT           3
+
 /*
  * dlm_release_lockspace
  *
  * Stop a lockspace.
+ *
+ * release_option: see DLM_RELEASE values above.
  */
 
-int dlm_release_lockspace(dlm_lockspace_t *lockspace, int force);
+int dlm_release_lockspace(dlm_lockspace_t *lockspace, int release_option);
 
 /*
  * dlm_lock