From 4633f57accdd1e2d2d619ed986a39e0861d4ff92 Mon Sep 17 00:00:00 2001 From: bobijam Date: Wed, 21 Oct 2009 09:52:10 +0000 Subject: [PATCH] Branch b1_8 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 | 2 ++ lnet/include/libcfs/user-prim.h | 5 +++-- lnet/libcfs/debug.c | 13 ++++++------- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/lnet/include/libcfs/linux/linux-prim.h b/lnet/include/libcfs/linux/linux-prim.h index 091d703..1171c74 100644 --- a/lnet/include/libcfs/linux/linux-prim.h +++ b/lnet/include/libcfs/linux/linux-prim.h @@ -57,6 +57,7 @@ #include #include #include +#include #include #include @@ -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 *); diff --git a/lnet/include/libcfs/user-prim.h b/lnet/include/libcfs/user-prim.h index 889174b..bdcc683 100644 --- a/lnet/include/libcfs/user-prim.h +++ b/lnet/include/libcfs/user-prim.h @@ -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 *); diff --git a/lnet/libcfs/debug.c b/lnet/libcfs/debug.c index e52f614..311b4910 100644 --- a/lnet/libcfs/debug.c +++ b/lnet/libcfs/debug.c @@ -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); -- 1.8.3.1