[Ocfs2-tools-devel] [PATCH 3/6] o2cb.init: Cleanup userdlm domains during o2cb offline

Sunil Mushran sunil.mushran at oracle.com
Mon Mar 14 12:31:31 PDT 2011


The o2cb init service now cleans up userdlm domains during offline. It also
creates /var/lock/susbsys/o2cb to ensure the service is stopped during shutdown.

Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
---
 vendor/common/o2cb.init.sh |   73 +++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 68 insertions(+), 5 deletions(-)

diff --git a/vendor/common/o2cb.init.sh b/vendor/common/o2cb.init.sh
index d3cb4a2..f61ea33 100644
--- a/vendor/common/o2cb.init.sh
+++ b/vendor/common/o2cb.init.sh
@@ -32,6 +32,8 @@ OCFS2_SYS_DIR="/sys/fs/ocfs2"
 LOADED_PLUGINS_FILE="${OCFS2_SYS_DIR}/loaded_cluster_plugins"
 CLUSTER_STACK_FILE="${OCFS2_SYS_DIR}/cluster_stack"
 DLMFS_CAPABILITIES_FILE='/sys/module/ocfs2_dlmfs/parameters/capabilities'
+DLMFS_DIR="/dlm"
+DLMFS_MAGIC="76a9f425"
 
 if [ -f /etc/sysconfig/o2cb ]
 then
@@ -82,6 +84,21 @@ configfs_path()
     fi
 }
 
+touch_lockfile()
+{
+    if [ -d /var/lock/subsys ]
+    then
+        touch /var/lock/subsys/o2cb
+    fi
+}
+
+remove_lockfile()
+{
+    if [ -e /var/lock/subsys/o2cb ]
+    then
+        rm /var/lock/subsys/o2cb
+    fi
+}
 
 #
 # if_fail()
@@ -910,13 +927,51 @@ load_stack_o2cb()
         fi
     fi
 
-    mount_filesystem "ocfs2_dlmfs" "/dlm"
+    mount_filesystem "ocfs2_dlmfs" $DLMFS_DIR
     if_fail $?
 
     return 0
 }
 
 #
+# Return the list of userdlm domains
+#
+userdlm_domains()
+{
+    magic=$(stat -f --printf="%t" ${DLMFS_DIR})
+    if [ "x$magic" = "x$DLMFS_MAGIC" ]
+    then
+        ls ${DLMFS_DIR}
+    fi
+}
+
+#
+# Print userdlm domains
+#
+userdlm_status()
+{
+    [ -n "$(userdlm_domains)" ] && {
+        echo "Active userdlm domains: " $(userdlm_domains)
+    }
+}
+
+#
+# Force removes all userdlm domains
+#
+clean_userdlm_domains()
+{
+    for domain in $(userdlm_domains)
+    do
+        domain_path="${DLMFS_DIR}/${domain}"
+        magic=$(stat -f --printf="%t" ${domain_path})
+        if [ "x$magic" = "x$DLMFS_MAGIC" ]
+        then
+            rm -rf ${domain_path}
+        fi
+    done
+}
+
+#
 # dlmfs_user_capable()
 # Check if dlmfs supports user stacks.
 #
@@ -978,7 +1033,7 @@ load_stack_user()
 
     if dlmfs_user_capable
     then
-        mount_filesystem "ocfs2_dlmfs" "/dlm"
+        mount_filesystem "ocfs2_dlmfs" $DLMFS_DIR
         if_fail $?
     fi
 
@@ -1035,7 +1090,7 @@ unload_stack_o2cb()
         fi
     fi
 
-    unmount_filesystem "ocfs2_dlmfs" "/dlm"
+    unmount_filesystem "ocfs2_dlmfs" $DLMFS_DIR
     if_fail $?
 
     unload_stack_plugins
@@ -1058,7 +1113,7 @@ unload_stack_user()
         exit 1
     fi
 
-    unmount_filesystem "ocfs2_dlmfs" "/dlm"
+    unmount_filesystem "ocfs2_dlmfs" $DLMFS_DIR
     if_fail $?
 
     unload_stack_plugins
@@ -1090,7 +1145,7 @@ status_stack_plugin()
 status_stack_o2cb()
 {
     status_stack_plugin
-    status_filesystem "ocfs2_dlmfs" "/dlm"
+    status_filesystem "ocfs2_dlmfs" $DLMFS_DIR
 }
 
 status_stack_user()
@@ -1178,6 +1233,8 @@ load()
 {
     PLUGIN="$(select_stack_plugin)"
 
+    touch_lockfile
+
     # XXX: SPECIAL CASE!  We must load configfs for configfs_path() to work
     load_filesystem "configfs"
     if_fail $?
@@ -1546,6 +1603,8 @@ offline()
         FORCE=0
     fi
 
+    clean_userdlm_domains
+
     offline_$PLUGIN "$CLUSTER" "$FORCE"
 
     unload_filesystem "ocfs2"
@@ -1569,6 +1628,8 @@ unload()
 
     unload_stack_$PLUGIN
 
+    remove_lockfile
+
     # Only unmount configfs if there are no other users
     if [ -z "$(ls -1 "$(configfs_path)" 2>/dev/null)" ]
     then
@@ -1662,6 +1723,8 @@ status()
     fi
 
     online_status "$CLUSTER"
+
+    userdlm_status
 }
 
 
-- 
1.7.1




More information about the Ocfs2-tools-devel mailing list