]> granicus.if.org Git - zfs/commitdiff
OpenZFS 6871 - libzpool implementation of thread_create should enforce length is 0
authorGeorge Melikov <mail@gmelikov.ru>
Tue, 24 Jan 2017 17:13:49 +0000 (20:13 +0300)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 24 Jan 2017 17:13:49 +0000 (09:13 -0800)
Porting notes:
- Several direct callers of zk_thread_create() are passing TS_RUN for the
length.  The `len` and `state` were inverted,this commit fixes them.

Authored by: Eli Rosenthal <eli.rosenthal@delphix.com>
Reviewed by: Paul Dagnelie <pcd@delphix.com>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Approved by: Robert Mustacchi <rm@joyent.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Ported-by: George Melikov mail@gmelikov.ru
OpenZFS-issue: https://www.illumos.org/issues/6871
OpenZFS-commit: https://github.com/openzfs/openzfs/commit/8fc9228
Closes #5621

cmd/raidz_test/raidz_test.c
cmd/ztest/ztest.c
include/sys/zfs_context.h
lib/libzpool/kernel.c

index 55bfbf0ab1f24cb12c8e7080658cb55eb98c47d7..500ac3dae1a2f1843aaca800048e6b9441aaeb0f 100644 (file)
@@ -704,7 +704,7 @@ run_sweep(void)
 
                VERIFY3P(zk_thread_create(NULL, 0,
                    (thread_func_t)sweep_thread,
-                   (void *) opts, TS_RUN, NULL, 0, 0,
+                   (void *) opts, 0, NULL, TS_RUN, 0,
                    PTHREAD_CREATE_JOINABLE), !=, NULL);
        }
 
index 139ff00cde88fad6abc53807703274909962e020..279e49fa3a193b8986cf11a9926abb61690c2897 100644 (file)
@@ -6240,7 +6240,7 @@ ztest_run(ztest_shared_t *zs)
         * Create a thread to periodically resume suspended I/O.
         */
        VERIFY3P((resume_thread = zk_thread_create(NULL, 0,
-           (thread_func_t)ztest_resume_thread, spa, TS_RUN, NULL, 0, 0,
+           (thread_func_t)ztest_resume_thread, spa, 0, NULL, TS_RUN, 0,
            PTHREAD_CREATE_JOINABLE)), !=, NULL);
 
 #if 0
@@ -6296,7 +6296,7 @@ ztest_run(ztest_shared_t *zs)
 
                VERIFY3P(thread = zk_thread_create(NULL, 0,
                    (thread_func_t)ztest_thread,
-                   (void *)(uintptr_t)t, TS_RUN, NULL, 0, 0,
+                   (void *)(uintptr_t)t, 0, NULL, TS_RUN, 0,
                    PTHREAD_CREATE_JOINABLE), !=, NULL);
                tid[t] = thread->t_tid;
        }
index 6e950716c036f8546e0ae6755a9a637ea5c39e49..bca89e1c954f538920ae1190fa9421c8476f03a8 100644 (file)
@@ -262,7 +262,7 @@ typedef struct kthread {
 extern kthread_t *zk_thread_current(void);
 extern void zk_thread_exit(void);
 extern kthread_t *zk_thread_create(caddr_t stk, size_t  stksize,
-       thread_func_t func, void *arg, size_t len,
+       thread_func_t func, void *arg, uint64_t len,
        proc_t *pp, int state, pri_t pri, int detachstate);
 extern void zk_thread_join(kt_did_t tid);
 
index b0418cb0956ccd7a18b70e0981a5ceb95d315200..40b96dabaff4dab2f27b2ce2ba3d33f3f92334b3 100644 (file)
@@ -147,13 +147,14 @@ zk_thread_helper(void *arg)
 
 kthread_t *
 zk_thread_create(caddr_t stk, size_t stksize, thread_func_t func, void *arg,
-    size_t len, proc_t *pp, int state, pri_t pri, int detachstate)
+    uint64_t len, proc_t *pp, int state, pri_t pri, int detachstate)
 {
        kthread_t *kt;
        pthread_attr_t attr;
        char *stkstr;
 
        ASSERT0(state & ~TS_RUN);
+       ASSERT0(len);
 
        kt = umem_zalloc(sizeof (kthread_t), UMEM_NOFAIL);
        kt->t_func = func;