*
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: background.c,v 1.50 2004/11/16 20:36:10 dwmw2 Exp $
+ * $Id: background.c,v 1.52 2005/05/19 16:18:08 gleixner Exp $
  *
  */
 
        if (c->gc_task)
                BUG();
 
-       init_MUTEX_LOCKED(&c->gc_thread_start);
+       init_completion(&c->gc_thread_start);
        init_completion(&c->gc_thread_exit);
 
        pid = kernel_thread(jffs2_garbage_collect_thread, c, CLONE_FS|CLONE_FILES);
        } else {
                /* Wait for it... */
                D1(printk(KERN_DEBUG "JFFS2: Garbage collect thread is pid %d\n", pid));
-               down(&c->gc_thread_start);
+               wait_for_completion(&c->gc_thread_start);
        }
  
        return ret;
        allow_signal(SIGCONT);
 
        c->gc_task = current;
-       up(&c->gc_thread_start);
+       complete(&c->gc_thread_start);
 
        set_user_nice(current, 10);
 
 
-/* $Id: jffs2_fs_sb.h,v 1.51 2005/02/28 08:21:06 dedekind Exp $ */
+/* $Id: jffs2_fs_sb.h,v 1.52 2005/05/19 16:12:17 gleixner Exp $ */
 
 #ifndef _JFFS2_FS_SB
 #define _JFFS2_FS_SB
        unsigned int flags;
 
        struct task_struct *gc_task;    /* GC task struct */
-       struct semaphore gc_thread_start; /* GC thread start mutex */
+       struct completion gc_thread_start; /* GC thread start completion */
        struct completion gc_thread_exit; /* GC thread exit completion port */
 
        struct semaphore alloc_sem;     /* Used to protect all the following