Currently we call init_hckernel_init inside afs_InitSetup, to
initialize the hcrypto mutex. However, we use the hcrypto mutex in the
AFSOP_SEED_ENTROPY syscall, which afsd calls before any syscall that
cals afs_InitSetup. This means we crash on trying to
AFSOP_SEED_ENTROPY.
To avoid this, just call init_hckernel_init inside osi_Init instead,
which is called when our kernel module itself is initialized. This
ensures that the mutex is initialized early on, regardless of what
happens with afsd and the startup syscalls.
Change-Id: Ib6cbed7abcfd8f9a61685f613a848e9f36d6050d
Reviewed-on: http://gerrit.openafs.org/11509
Tested-by: Andrew Deason <adeason@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
#endif
#include <hcrypto/rand.h>
-/* No hckernel-specific header for this prototype. */
-#ifndef UKERNEL
-extern void init_hckernel_mutex(void);
-#endif
-
#if defined(AFS_SUN5_ENV) || defined(AFS_AIX_ENV) || defined(AFS_SGI_ENV) || defined(AFS_HPUX_ENV)
#define AFS_MINBUFFERS 100
#else
if (afs_InitSetup_done)
return EAGAIN;
- /* Initialize a lock for the kernel hcrypto bits. */
-#ifndef UKERNEL
- init_hckernel_mutex();
-#endif
-
#ifdef AFS_SUN510_ENV
/* Initialize a RW lock for the ifinfo global array */
rw_init(&afsifinfo_lock, NULL, RW_DRIVER, NULL);
* -- On HP called from afsc_link.
* -- On SGI called from afs_init. */
+/* No hckernel-specific header for this prototype. */
+#ifndef UKERNEL
+extern void init_hckernel_mutex(void);
+#endif
+
afs_lock_t afs_ftf; /* flush text lock */
#ifdef AFS_SGI53_ENV
osi_InitGlock();
+ /* Initialize a lock for the kernel hcrypto bits. */
+#ifndef UKERNEL
+ init_hckernel_mutex();
+#endif
+
+
if (!afs_osicred_initialized) {
#if defined(AFS_DARWIN80_ENV)
afs_osi_ctxtp_initialized = 0;