Whamcloud - gitweb
Branch b1_8
authorbobijam <bobijam>
Wed, 21 Oct 2009 09:52:10 +0000 (09:52 +0000)
committerbobijam <bobijam>
Wed, 21 Oct 2009 09:52:10 +0000 (09:52 +0000)
b=20592
i=johann
i=andrew.perepechko (panda)

use kthread_run() instead of kernel_thread() so that log dumper won't stuck
in do_exit().

lnet/include/libcfs/linux/linux-prim.h
lnet/include/libcfs/user-prim.h
lnet/libcfs/debug.c

index 091d703..1171c74 100644 (file)
@@ -57,6 +57,7 @@
 #include <linux/timer.h>
 #include <linux/signal.h>
 #include <linux/sched.h>
+#include <linux/kthread.h>
 
 #include <linux/miscdevice.h>
 #include <libcfs/linux/portals_compat25.h>
@@ -152,6 +153,7 @@ typedef long                            cfs_task_state_t;
 #define cfs_waitq_timedwait(l, s, t)    schedule_timeout(t)
 #define cfs_schedule_timeout(s, t)      schedule_timeout(t)
 #define cfs_schedule()                  schedule()
+#define cfs_kthread_run(fn, data, fmt, arg...) kthread_run(fn, data, fmt, ##arg)
 
 /* Kernel thread */
 typedef int (*cfs_thread_t)(void *);
index 889174b..bdcc683 100644 (file)
@@ -84,7 +84,7 @@ typedef struct cfs_waitq {
 void cfs_waitq_init(struct cfs_waitq *waitq);
 void cfs_waitlink_init(struct cfs_waitlink *link);
 void cfs_waitq_add(struct cfs_waitq *waitq, struct cfs_waitlink *link);
-void cfs_waitq_add_exclusive(struct cfs_waitq *waitq, 
+void cfs_waitq_add_exclusive(struct cfs_waitq *waitq,
                              struct cfs_waitlink *link);
 void cfs_waitq_forward(struct cfs_waitlink *link, struct cfs_waitq *waitq);
 void cfs_waitq_del(struct cfs_waitq *waitq, struct cfs_waitlink *link);
@@ -273,7 +273,7 @@ cfs_time_t cfs_timer_deadline(struct cfs_timer *t);
 static inline void cfs_pause(cfs_duration_t d)
 {
         struct timespec s;
-        
+
         cfs_duration_nsec(d, &s);
         nanosleep(&s, NULL);
 }
@@ -294,6 +294,7 @@ static inline int cfs_psdev_deregister(cfs_psdev_t *foo)
 #define cfs_sigfillset(l) do {}         while (0)
 #define cfs_recalc_sigpending(l)        do {} while (0)
 #define cfs_kernel_thread(l,m,n)        LBUG()
+#define cfs_kthread_run(fn,d,fmt,...)   LBUG()
 
 #ifdef HAVE_LIBPTHREAD
 typedef int (*cfs_thread_t)(void *);
index e52f614..311b491 100644 (file)
@@ -450,7 +450,6 @@ void libcfs_debug_dumplog_internal(void *arg)
 
 int libcfs_debug_dumplog_thread(void *arg)
 {
-        cfs_daemonize("");
         libcfs_debug_dumplog_internal(arg);
         cfs_waitq_signal(&debug_ctlwq);
         return 0;
@@ -458,8 +457,8 @@ int libcfs_debug_dumplog_thread(void *arg)
 
 void libcfs_debug_dumplog(void)
 {
-        int            rc;
         cfs_waitlink_t wait;
+        cfs_task_t    *dumper;
         ENTRY;
 
         /* we're being careful to ensure that the kernel thread is
@@ -469,12 +468,12 @@ void libcfs_debug_dumplog(void)
         set_current_state(TASK_INTERRUPTIBLE);
         cfs_waitq_add(&debug_ctlwq, &wait);
 
-        rc = cfs_kernel_thread(libcfs_debug_dumplog_thread,
-                               (void *)(long)cfs_curproc_pid(),
-                               CLONE_VM | CLONE_FS | CLONE_FILES);
-        if (rc < 0)
+        dumper = cfs_kthread_run(libcfs_debug_dumplog_thread,
+                                 (void*)(long)cfs_curproc_pid(),
+                                 "libcfs_debug_dumper");
+        if (IS_ERR(dumper))
                 printk(KERN_ERR "LustreError: cannot start log dump thread: "
-                       "%d\n", rc);
+                       "%ld\n", PTR_ERR(dumper));
         else
                 cfs_waitq_wait(&wait, CFS_TASK_INTERRUPTIBLE);