AC_CHECK_LINUX_FUNC([noop_fsync],
[#include <linux/fs.h>],
[void *address = &noop_fsync; printk("%p\n", address)];)
+ AC_CHECK_LINUX_FUNC([kthread_run],
+ [#include <linux/kernel.h>
+ #include <linux/kthread.h>],
+ [kthread_run(NULL, NULL, "test");])
dnl Consequences - things which get set as a result of the
dnl above tests
#include "afsincludes.h" /* Afs-based standard headers */
#include "afs/afs_stats.h"
#include "rx/rx_globals.h"
-#if !defined(UKERNEL) && !defined(AFS_LINUX20_ENV)
-#include "net/if.h"
-#ifdef AFS_SGI62_ENV
-#include "h/hashing.h"
-#endif
-#if !defined(AFS_HPUX110_ENV) && !defined(AFS_DARWIN_ENV)
-#include "netinet/in_var.h"
-#endif
+#if !defined(UKERNEL)
+# if !defined(AFS_LINUX20_ENV)
+# include "net/if.h"
+# ifdef AFS_SGI62_ENV
+# include "h/hashing.h"
+# endif
+# if !defined(AFS_HPUX110_ENV) && !defined(AFS_DARWIN_ENV)
+# include "netinet/in_var.h"
+# endif
+# endif
+# ifdef HAVE_LINUX_KTHREAD_RUN
+# include "h/kthread.h"
+# endif
#endif /* !defined(UKERNEL) */
#ifdef AFS_SUN510_ENV
#include "h/ksynch.h"
# ifdef SYS_SETPRIORITY_EXPORTED
int (*sys_setpriority) (int, int, int) = sys_call_table[__NR_setpriority];
# endif
-# if defined(AFS_LINUX26_ENV)
+# if !defined(HAVE_LINUX_KTHREAD_RUN)
+# if defined(AFS_LINUX26_ENV)
daemonize("afsd");
-# else
+# else
daemonize();
-# endif
+# endif
+# endif /* !HAVE_LINUX_KTHREAD_RUN */
/* doesn't do much, since we were forked from keventd, but
* does call mm_release, which wakes up our parent (since it
* used CLONE_VFORK) */
struct afsd_thread_info *rock = container_of(work, struct afsd_thread_info, tq);
# endif
+# if defined(HAVE_LINUX_KTHREAD_RUN)
+ if (IS_ERR(kthread_run(afsd_thread, (void *)rock, "afsd"))) {
+ afs_warn("kthread_run failed; afs startup will not complete\n");
+ }
+# else /* !HAVE_LINUX_KTHREAD_RUN */
if (!kernel_thread(afsd_thread, (void *)rock, CLONE_VFORK | SIGCHLD))
afs_warn("kernel_thread failed. afs startup will not complete\n");
+# endif /* !HAVE_LINUX_KTHREAD_RUN */
}
void