[Ocfs2-devel] Patch to fix error if mount fails

John L. Villalovos john.l.villalovos at intel.com
Tue Mar 23 10:29:55 CST 2004


I had an issue where if the mount failed after the threads had started that the thread would crash later on.

This patch makes sure that the NM thread is terminated if the mount fails and the thread has been started.

I didn't really see an easy way to terminate the listener thread :(

John

Index: super.c
===================================================================
--- super.c     (revision 803)
+++ super.c     (working copy)
@@ -868,6 +868,7 @@
         ocfs_vol_label *vol_label = NULL;
         int child_pid, i;
         struct buffer_head *bhs[] = { NULL, NULL };
+        int nm_thread_created = 0;        // keep track if the NM thread has been created

         LOG_ENTRY ();

@@ -973,6 +974,7 @@
         } else {
                 init_completion (&osb->dlm_complete);
         }
+        nm_thread_created = 1;

         /* Launch the commit thread */
         osb->commit = (ocfs_commit_task *)ocfs_malloc(sizeof(ocfs_commit_task));
@@ -1080,6 +1082,22 @@
                         OCFS_BH_PUT_DATA(bhs[1]);
                 brelse(bhs[1]);
         }
+        // If we failed to mount and we created the NM thread then we need to
+        // have it terminate
+        if (status<0 && nm_thread_created)
+        {
+                /* Dismount */
+                OCFS_SET_FLAG (osb->osb_flags, OCFS_OSB_FLAGS_BEING_DISMOUNTED);
+                osb->vol_state = VOLUME_BEING_DISMOUNTED;
+
+                /* Wait for this volume's NM thread to exit */
+                if (osb->dlm_task) {
+                        LOG_TRACE_STR ("Waiting for ocfs2nm to exit....");
+                        send_sig (SIGINT, osb->dlm_task, 0);
+                        wait_for_completion (&(osb->dlm_complete));
+                        osb->dlm_task = NULL;
+                }
+        }
         LOG_EXIT_STATUS (status);
         return status;
  }                              /* ocfs_mount_volume */



More information about the Ocfs2-devel mailing list