sched: add wait_for_completion_killable_timeout
authorSage Weil <sage@newdream.net>
Sat, 29 May 2010 16:12:30 +0000 (09:12 -0700)
committerSage Weil <sage@newdream.net>
Sat, 29 May 2010 16:12:30 +0000 (09:12 -0700)
Add missing _killable_timeout variant for wait_for_completion that will
return when a timeout expires or the task is killed.

CC: Ingo Molnar <mingo@elte.hu>
CC: Andreas Herrmann <andreas.herrmann3@amd.com>
CC: Thomas Gleixner <tglx@linutronix.de>
CC: Mike Galbraith <efault@gmx.de>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Sage Weil <sage@newdream.net>
include/linux/completion.h
kernel/sched.c

index 4a6b604ef7e4ae323d9f71fe2569ef5ed318b70c..51e3145196f6f77e852cca9b5f141155bbf10685 100644 (file)
@@ -83,6 +83,8 @@ extern unsigned long wait_for_completion_timeout(struct completion *x,
                                                   unsigned long timeout);
 extern unsigned long wait_for_completion_interruptible_timeout(
                        struct completion *x, unsigned long timeout);
+extern unsigned long wait_for_completion_killable_timeout(
+                       struct completion *x, unsigned long timeout);
 extern bool try_wait_for_completion(struct completion *x);
 extern bool completion_done(struct completion *x);
 
index 3c2a54f70ffed7ca1e0954666e3d333e43d36b95..4d051c7517fd3caac81b629901696bd3d3cf5daa 100644 (file)
@@ -4160,6 +4160,23 @@ int __sched wait_for_completion_killable(struct completion *x)
 }
 EXPORT_SYMBOL(wait_for_completion_killable);
 
+/**
+ * wait_for_completion_killable_timeout: - waits for completion of a task (w/(to,killable))
+ * @x:  holds the state of this particular completion
+ * @timeout:  timeout value in jiffies
+ *
+ * This waits for either a completion of a specific task to be
+ * signaled or for a specified timeout to expire. It can be
+ * interrupted by a kill signal. The timeout is in jiffies.
+ */
+unsigned long __sched
+wait_for_completion_killable_timeout(struct completion *x,
+                                    unsigned long timeout)
+{
+       return wait_for_common(x, timeout, TASK_KILLABLE);
+}
+EXPORT_SYMBOL(wait_for_completion_killable_timeout);
+
 /**
  *     try_wait_for_completion - try to decrement a completion without blocking
  *     @x:     completion structure