]> granicus.if.org Git - zfs/commitdiff
Minor improvement to taskq handling. This is a small step towards
authorbehlendo <behlendo@7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c>
Wed, 23 Apr 2008 21:19:47 +0000 (21:19 +0000)
committerbehlendo <behlendo@7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c>
Wed, 23 Apr 2008 21:19:47 +0000 (21:19 +0000)
dynamic taskqs which still need to be fully implemented.

git-svn-id: https://outreach.scidac.gov/svn/spl/trunk@87 7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c

include/sys/debug.h
modules/spl/spl-taskq.c

index ab881c5bf47db3683daf10dd2672c9354cd81f79..64aa1808f64ff226785a4eb91c74c5b5898fe50c 100644 (file)
@@ -198,7 +198,7 @@ do {                                                                    \
 do {                                                                    \
         if (unlikely(!(cond))) {                                        \
                 printk(KERN_ERR "ASSERTION(" #cond ") failed");         \
-                SBUG();                                                 \
+                BUG();                                                  \
         }                                                               \
 } while (0)
 
index 4869daa3da4e6230ad39851623a1e67d8f149fc7..d26b40db8ba4455914ed9672402279bc4d118bf2 100644 (file)
@@ -66,10 +66,14 @@ __taskq_dispatch(taskq_t *tq, task_func_t func, void *priv, uint_t flags)
 }
 EXPORT_SYMBOL(__taskq_dispatch);
 
-/* XXX - Most args ignored until we decide if it's worth the effort
- *       to emulate the solaris notion of dynamic thread pools.  For
- *       now we simply serialize everything through one thread which
- *       may come back to bite us as a performance issue.
+/* XXX - We must fully implement dynamic workqueues since they make a
+ *       significant impact in terms of performance.  For now I've made
+ *       a trivial compromise.  If you ask for one thread you get one
+ *       thread, if you ask for more than that you get one per core.
+ *       It's unclear if you ever really need/want more than one per-core
+ *       anyway.  More analysis is required.
+ *
+ * name  - Workqueue names are limited to 10 chars
  * pri   - Ignore priority
  * min   - Ignored until this is a dynamic thread pool
  * max   - Ignored until this is a dynamic thread pool
@@ -79,9 +83,15 @@ taskq_t *
 __taskq_create(const char *name, int nthreads, pri_t pri,
                int minalloc, int maxalloc, uint_t flags)
 {
-       /* NOTE: Linux workqueue names are limited to 10 chars */
+       taskq_t *tq;
        ENTRY;
-        RETURN(create_singlethread_workqueue(name));
+
+       if (nthreads == 1)
+               tq = create_singlethread_workqueue(name);
+       else
+               tq = create_workqueue(name);
+
+       return tq;
 }
 EXPORT_SYMBOL(__taskq_create);