]> Pileus Git - ~andy/linux/blobdiff - kernel/async.c
workqueue: implement current_is_async()
[~andy/linux] / kernel / async.c
index 9d31183848582ca8da812d70d2d68364ff898f1d..d9bf2a9b5cee36c4f8292f435d723333785f4498 100644 (file)
@@ -57,6 +57,8 @@ asynchronous and synchronous parts of the kernel.
 #include <linux/slab.h>
 #include <linux/workqueue.h>
 
+#include "workqueue_internal.h"
+
 static async_cookie_t next_cookie = 1;
 
 #define MAX_WORK       32768
@@ -337,3 +339,15 @@ void async_synchronize_cookie(async_cookie_t cookie)
        async_synchronize_cookie_domain(cookie, &async_running);
 }
 EXPORT_SYMBOL_GPL(async_synchronize_cookie);
+
+/**
+ * current_is_async - is %current an async worker task?
+ *
+ * Returns %true if %current is an async worker task.
+ */
+bool current_is_async(void)
+{
+       struct worker *worker = current_wq_worker();
+
+       return worker && worker->current_func == async_run_entry_fn;
+}