From: Tim Chase Date: Wed, 9 Apr 2014 18:40:12 +0000 (-0500) Subject: De-inline spl_kthread_create(). X-Git-Tag: zfs-0.8.0-rc1~152^2~239 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ed650dee76e928ce266e9d204637516d3a375b77;p=zfs De-inline spl_kthread_create(). The function was defined as a static inline with variable arguments which causes gcc to generate errors on some distros. Signed-off-by: Brian Behlendorf Signed-off-by: Tim Chase Closes #346 --- diff --git a/include/sys/thread.h b/include/sys/thread.h index f6c197255..433a0761d 100644 --- a/include/sys/thread.h +++ b/include/sys/thread.h @@ -59,33 +59,7 @@ extern kthread_t *__thread_create(caddr_t stk, size_t stksize, void *args, size_t len, proc_t *pp, int state, pri_t pri); extern void __thread_exit(void); - -/* - * spl_kthread_create - Wrapper providing pre-3.13 semantics for - * kthread_create() in which it is not killable and less likely - * to return -ENOMEM. - */ -static inline struct task_struct * -spl_kthread_create(int (*func)(void *), void *data, const char namefmt[], ...) -{ - struct task_struct *tsk; - va_list args; - - va_start(args, namefmt); - do { - tsk = kthread_create_on_node(func, data, - -1, namefmt, args); - if (IS_ERR(tsk)) { - if (signal_pending(current)) { - clear_thread_flag(TIF_SIGPENDING); - continue; - } - if (PTR_ERR(tsk) == -ENOMEM) - continue; - return (NULL); - } else - return (tsk); - } while (1); -} +extern struct task_struct *spl_kthread_create(int (*func)(void *), + void *data, const char namefmt[], ...); #endif /* _SPL_THREAD_H */ diff --git a/module/spl/spl-thread.c b/module/spl/spl-thread.c index b0fa4d795..a74b9d9ac 100644 --- a/module/spl/spl-thread.c +++ b/module/spl/spl-thread.c @@ -137,3 +137,31 @@ __thread_create(caddr_t stk, size_t stksize, thread_func_t func, SRETURN((kthread_t *)tsk); } EXPORT_SYMBOL(__thread_create); + +/* + * spl_kthread_create - Wrapper providing pre-3.13 semantics for + * kthread_create() in which it is not killable and less likely + * to return -ENOMEM. + */ +struct task_struct * +spl_kthread_create(int (*func)(void *), void *data, const char namefmt[], ...) +{ + struct task_struct *tsk; + va_list args; + + va_start(args, namefmt); + do { + tsk = kthread_create(func, data, namefmt, args); + if (IS_ERR(tsk)) { + if (signal_pending(current)) { + clear_thread_flag(TIF_SIGPENDING); + continue; + } + if (PTR_ERR(tsk) == -ENOMEM) + continue; + return (NULL); + } else + return (tsk); + } while (1); +} +EXPORT_SYMBOL(spl_kthread_create);