Whamcloud - gitweb
b=18790 Add config check to avoid type conflict.
[fs/lustre-release.git] / lnet / klnds / ptllnd / ptllnd_ptltrace.c
index ff98d5e..bf226bb 100644 (file)
@@ -37,8 +37,8 @@
 #include "ptllnd.h"
 
 #ifdef CRAY_XT3
-static struct semaphore   ptltrace_mutex;
-static struct semaphore   ptltrace_signal;
+static cfs_semaphore_t    ptltrace_mutex;
+static cfs_waitq_t        ptltrace_debug_ctlwq;
 
 void
 kptllnd_ptltrace_to_file(char *filename)
@@ -136,10 +136,10 @@ kptllnd_dump_ptltrace_thread(void *arg)
 {
         static char fname[1024];
 
-        libcfs_daemonize("ptltracedump");
+        libcfs_daemonize("kpt_ptltrace_dump");
 
         /* serialise with other instances of me */
-        mutex_down(&ptltrace_mutex);
+        cfs_mutex_down(&ptltrace_mutex);
 
         snprintf(fname, sizeof(fname), "%s.%ld.%ld",
                  *kptllnd_tunables.kptl_ptltrace_basename,
@@ -147,21 +147,24 @@ kptllnd_dump_ptltrace_thread(void *arg)
 
         kptllnd_ptltrace_to_file(fname);
 
-        mutex_up(&ptltrace_mutex);
+        cfs_mutex_up(&ptltrace_mutex);
 
         /* unblock my creator */
-        mutex_up(&ptltrace_signal);
-        
+        cfs_waitq_signal(&ptltrace_debug_ctlwq);
         return 0;
 }
 
 void
 kptllnd_dump_ptltrace(void)
 {
-        int            rc;     
+        int            rc;
+        cfs_waitlink_t wait;
+        ENTRY;
 
-        if (!*kptllnd_tunables.kptl_ptltrace_on_timeout)
-                return;
+        /* taken from libcfs_debug_dumplog */
+        cfs_waitlink_init(&wait);
+        cfs_set_current_state(CFS_TASK_INTERRUPTIBLE);
+        cfs_waitq_add(&ptltrace_debug_ctlwq, &wait);
 
         rc = cfs_kernel_thread(kptllnd_dump_ptltrace_thread,
                                (void *)(long)cfs_curproc_pid(),
@@ -169,28 +172,19 @@ kptllnd_dump_ptltrace(void)
         if (rc < 0) {
                 CERROR("Error %d starting ptltrace dump thread\n", rc);
         } else {
-                /* block until thread completes */
-                mutex_down(&ptltrace_signal);
+                cfs_waitq_wait(&wait, CFS_TASK_INTERRUPTIBLE);
         }
-}
 
-void
-kptllnd_init_ptltrace(void)
-{
-        init_mutex(&ptltrace_mutex);
-        init_mutex_locked(&ptltrace_signal);
-}
-
-#else
-
-void
-kptllnd_dump_ptltrace(void)
-{
+        /* teardown if cfs_kernel_thread() failed */
+        cfs_waitq_del(&ptltrace_debug_ctlwq, &wait);
+        cfs_set_current_state(CFS_TASK_RUNNING);
+        EXIT;
 }
 
 void
 kptllnd_init_ptltrace(void)
 {
+        cfs_waitq_init(&ptltrace_debug_ctlwq);
+        cfs_init_mutex(&ptltrace_mutex);
 }
-
 #endif