

Cc: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 kernel/timer.c |   19 +++++++++++--------
 1 files changed, 11 insertions(+), 8 deletions(-)

diff -puN kernel/timer.c~timers-fix-__mod_timer-vs-__run_timers-deadlock-tidy kernel/timer.c
--- 25/kernel/timer.c~timers-fix-__mod_timer-vs-__run_timers-deadlock-tidy	2005-05-01 02:22:00.502889928 -0700
+++ 25-akpm/kernel/timer.c	2005-05-01 02:26:22.532055440 -0700
@@ -211,14 +211,13 @@ int __mod_timer(struct timer_list *timer
 	timer_base_t *base;
 	tvec_base_t *new_base;
 	unsigned long flags;
-	int ret;
+	int ret = 0;
 
 	BUG_ON(!timer->function);
 	check_timer(timer);
 
 	base = lock_timer_base(timer, &flags);
 
-	ret = 0;
 	if (timer_pending(timer)) {
 		detach_timer(timer, 0);
 		ret = 1;
@@ -227,14 +226,18 @@ int __mod_timer(struct timer_list *timer
 	new_base = &__get_cpu_var(tvec_bases);
 
 	if (base != &new_base->t_base) {
-		if (unlikely(base->running_timer == timer))
-			/* Don't change timer's base while it is running.
-			 * Needed for serialization of timer wrt itself. */
+		if (unlikely(base->running_timer == timer)) {
+			/*
+			 * Don't change timer's base while it is running.
+			 * Needed for serialization of timer wrt itself.
+			 */
 			new_base = container_of(base, tvec_base_t, t_base);
-		else {
+		} else {
 			timer->base = NULL;
-			/* Safe: the timer can't be seen via ->entry,
-			 * and lock_timer_base checks ->base != 0. */
+			/*
+			 * Safe: the timer can't be seen via ->entry and
+			 * lock_timer_base() checks ->base != 0.
+			 */
 			spin_unlock(&base->lock);
 			spin_lock(&new_base->t_base.lock);
 			timer->base = &new_base->t_base;
_
