X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libcfs%2Flibcfs%2Fwatchdog.c;h=ed1acf7f4382543b14cb9e13c63dd50c24073f23;hb=2fbf36f5e3890d8b560b5682931999f229021b2d;hp=0e329548829014d63745698541f820fa2fe136fc;hpb=3f92a017ae2d97506db89b34c374bbcf9670db54;p=fs%2Flustre-release.git diff --git a/libcfs/libcfs/watchdog.c b/libcfs/libcfs/watchdog.c index 0e32954..ed1acf7 100644 --- a/libcfs/libcfs/watchdog.c +++ b/libcfs/libcfs/watchdog.c @@ -44,22 +44,22 @@ #include "tracefile.h" struct lc_watchdog { - spinlock_t lcw_lock; /* check or change lcw_list */ - int lcw_refcount; /* must hold lcw_pending_timers_lock */ - cfs_timer_t lcw_timer; /* kernel timer */ - cfs_list_t lcw_list; /* chain on pending list */ - cfs_time_t lcw_last_touched; /* last touched stamp */ - cfs_task_t *lcw_task; /* owner task */ - void (*lcw_callback)(pid_t, void *); - void *lcw_data; - - pid_t lcw_pid; - - enum { - LC_WATCHDOG_DISABLED, - LC_WATCHDOG_ENABLED, - LC_WATCHDOG_EXPIRED - } lcw_state; + spinlock_t lcw_lock; /* check or change lcw_list */ + int lcw_refcount; /* must hold lcw_pending_timers_lock */ + struct timer_list lcw_timer; /* kernel timer */ + struct list_head lcw_list; /* chain on pending list */ + cfs_time_t lcw_last_touched;/* last touched stamp */ + struct task_struct *lcw_task; /* owner task */ + void (*lcw_callback)(pid_t, void *); + void *lcw_data; + + pid_t lcw_pid; + + enum { + LC_WATCHDOG_DISABLED, + LC_WATCHDOG_ENABLED, + LC_WATCHDOG_EXPIRED + } lcw_state; }; #ifdef WITH_WATCHDOG @@ -70,7 +70,7 @@ struct lc_watchdog { */ static struct completion lcw_start_completion; static struct completion lcw_stop_completion; -static cfs_waitq_t lcw_event_waitq; +static wait_queue_head_t lcw_event_waitq; /* * Set this and wake lcw_event_waitq to stop the dispatcher. @@ -94,7 +94,7 @@ static DEFINE_MUTEX(lcw_refcount_mutex); */ /* BH lock! */ static DEFINE_SPINLOCK(lcw_pending_timers_lock); -static cfs_list_t lcw_pending_timers = CFS_LIST_HEAD_INIT(lcw_pending_timers); +static struct list_head lcw_pending_timers = LIST_HEAD_INIT(lcw_pending_timers); /* Last time a watchdog expired */ static cfs_time_t lcw_last_watchdog_time; @@ -130,12 +130,12 @@ static void lcw_cb(ulong_ptr_t data) lcw->lcw_state = LC_WATCHDOG_EXPIRED; spin_lock_bh(&lcw->lcw_lock); - LASSERT(cfs_list_empty(&lcw->lcw_list)); + LASSERT(list_empty(&lcw->lcw_list)); spin_lock_bh(&lcw_pending_timers_lock); lcw->lcw_refcount++; /* +1 for pending list */ - cfs_list_add(&lcw->lcw_list, &lcw_pending_timers); - cfs_waitq_signal(&lcw_event_waitq); + list_add(&lcw->lcw_list, &lcw_pending_timers); + wake_up(&lcw_event_waitq); spin_unlock_bh(&lcw_pending_timers_lock); spin_unlock_bh(&lcw->lcw_lock); @@ -150,7 +150,7 @@ static int is_watchdog_fired(void) return 1; spin_lock_bh(&lcw_pending_timers_lock); - rc = !cfs_list_empty(&lcw_pending_timers); + rc = !list_empty(&lcw_pending_timers); spin_unlock_bh(&lcw_pending_timers_lock); return rc; } @@ -206,7 +206,7 @@ static int lcw_dispatch_main(void *data) { int rc = 0; struct lc_watchdog *lcw; - CFS_LIST_HEAD (zombies); + struct list_head zombies = LIST_HEAD_INIT(zombies); ENTRY; @@ -222,7 +222,7 @@ static int lcw_dispatch_main(void *data) CDEBUG(D_INFO, "LCW_FLAG_STOP set, shutting down...\n"); spin_lock_bh(&lcw_pending_timers_lock); - rc = !cfs_list_empty(&lcw_pending_timers); + rc = !list_empty(&lcw_pending_timers); spin_unlock_bh(&lcw_pending_timers_lock); if (rc) { CERROR("pending timers list was not empty at " @@ -232,32 +232,32 @@ static int lcw_dispatch_main(void *data) } spin_lock_bh(&lcw_pending_timers_lock); - while (!cfs_list_empty(&lcw_pending_timers)) { - int is_dumplog; - - lcw = cfs_list_entry(lcw_pending_timers.next, - struct lc_watchdog, lcw_list); - /* +1 ref for callback to make sure lwc wouldn't be - * deleted after releasing lcw_pending_timers_lock */ - lcw->lcw_refcount++; + while (!list_empty(&lcw_pending_timers)) { + int is_dumplog; + + lcw = list_entry(lcw_pending_timers.next, + struct lc_watchdog, lcw_list); + /* +1 ref for callback to make sure lwc wouldn't be + * deleted after releasing lcw_pending_timers_lock */ + lcw->lcw_refcount++; spin_unlock_bh(&lcw_pending_timers_lock); /* lock ordering */ spin_lock_bh(&lcw->lcw_lock); spin_lock_bh(&lcw_pending_timers_lock); - if (cfs_list_empty(&lcw->lcw_list)) { + if (list_empty(&lcw->lcw_list)) { /* already removed from pending list */ lcw->lcw_refcount--; /* -1 ref for callback */ if (lcw->lcw_refcount == 0) - cfs_list_add(&lcw->lcw_list, &zombies); + list_add(&lcw->lcw_list, &zombies); spin_unlock_bh(&lcw->lcw_lock); - /* still hold lcw_pending_timers_lock */ - continue; - } + /* still hold lcw_pending_timers_lock */ + continue; + } - cfs_list_del_init(&lcw->lcw_list); - lcw->lcw_refcount--; /* -1 ref for pending list */ + list_del_init(&lcw->lcw_list); + lcw->lcw_refcount--; /* -1 ref for pending list */ spin_unlock_bh(&lcw_pending_timers_lock); spin_unlock_bh(&lcw->lcw_lock); @@ -277,17 +277,17 @@ static int lcw_dispatch_main(void *data) spin_lock_bh(&lcw_pending_timers_lock); lcw->lcw_refcount--; /* -1 ref for callback */ if (lcw->lcw_refcount == 0) - cfs_list_add(&lcw->lcw_list, &zombies); + list_add(&lcw->lcw_list, &zombies); } spin_unlock_bh(&lcw_pending_timers_lock); - while (!cfs_list_empty(&zombies)) { - lcw = cfs_list_entry(lcw_pending_timers.next, - struct lc_watchdog, lcw_list); - cfs_list_del(&lcw->lcw_list); - LIBCFS_FREE(lcw, sizeof(*lcw)); - } - } + while (!list_empty(&zombies)) { + lcw = list_entry(zombies.next, + struct lc_watchdog, lcw_list); + list_del_init(&lcw->lcw_list); + LIBCFS_FREE(lcw, sizeof(*lcw)); + } + } complete(&lcw_stop_completion); @@ -296,14 +296,14 @@ static int lcw_dispatch_main(void *data) static void lcw_dispatch_start(void) { - cfs_task_t *task; + struct task_struct *task; ENTRY; LASSERT(lcw_refcount == 1); init_completion(&lcw_stop_completion); init_completion(&lcw_start_completion); - cfs_waitq_init(&lcw_event_waitq); + init_waitqueue_head(&lcw_event_waitq); CDEBUG(D_INFO, "starting dispatch thread\n"); task = kthread_run(lcw_dispatch_main, NULL, "lc_watchdogd"); @@ -327,7 +327,7 @@ static void lcw_dispatch_stop(void) CDEBUG(D_INFO, "trying to stop watchdog dispatcher.\n"); set_bit(LCW_FLAG_STOP, &lcw_flags); - cfs_waitq_signal(&lcw_event_waitq); + wake_up(&lcw_event_waitq); wait_for_completion(&lcw_stop_completion); @@ -351,14 +351,14 @@ struct lc_watchdog *lc_watchdog_add(int timeout, spin_lock_init(&lcw->lcw_lock); lcw->lcw_refcount = 1; /* refcount for owner */ - lcw->lcw_task = cfs_current(); + lcw->lcw_task = current; lcw->lcw_pid = current_pid(); lcw->lcw_callback = (callback != NULL) ? callback : lc_watchdog_dumplog; lcw->lcw_data = data; lcw->lcw_state = LC_WATCHDOG_DISABLED; - CFS_INIT_LIST_HEAD(&lcw->lcw_list); - cfs_timer_init(&lcw->lcw_timer, lcw_cb, lcw); + INIT_LIST_HEAD(&lcw->lcw_list); + cfs_timer_init(&lcw->lcw_timer, lcw_cb, lcw); mutex_lock(&lcw_refcount_mutex); if (++lcw_refcount == 1) @@ -401,9 +401,9 @@ static void lcw_update_time(struct lc_watchdog *lcw, const char *message) static void lc_watchdog_del_pending(struct lc_watchdog *lcw) { spin_lock_bh(&lcw->lcw_lock); - if (unlikely(!cfs_list_empty(&lcw->lcw_list))) { + if (unlikely(!list_empty(&lcw->lcw_list))) { spin_lock_bh(&lcw_pending_timers_lock); - cfs_list_del_init(&lcw->lcw_list); + list_del_init(&lcw->lcw_list); lcw->lcw_refcount--; /* -1 ref for pending list */ spin_unlock_bh(&lcw_pending_timers_lock); } @@ -455,8 +455,8 @@ void lc_watchdog_delete(struct lc_watchdog *lcw) spin_lock_bh(&lcw->lcw_lock); spin_lock_bh(&lcw_pending_timers_lock); - if (unlikely(!cfs_list_empty(&lcw->lcw_list))) { - cfs_list_del_init(&lcw->lcw_list); + if (unlikely(!list_empty(&lcw->lcw_list))) { + list_del_init(&lcw->lcw_list); lcw->lcw_refcount--; /* -1 ref for pending list */ }