"fs checkservers" during cache creation can crash client
[openafs.git] / src / afs / afs_call.c
index 685acf1..8c7f75a 100644 (file)
@@ -246,7 +246,7 @@ afs_DaemonOp(long parm, long parm2, long parm3, long parm4, long parm5,
 #endif
 
 
-#if defined(AFS_LINUX24_ENV) && defined(COMPLETION_H_EXISTS)
+#if defined(AFS_LINUX24_ENV) && defined(HAVE_LINUX_COMPLETION_H)
 struct afsd_thread_info {
 #if defined(AFS_LINUX26_ENV) && !defined(INIT_WORK_HAS_DATA)
     struct work_struct tq;
@@ -523,7 +523,7 @@ afs_syscall_call(long parm, long parm2, long parm3,
 #ifdef AFS_DARWIN80_ENV
     put_vfs_context();
 #endif
-#if ((defined(AFS_LINUX24_ENV) && defined(COMPLETION_H_EXISTS)) || defined(AFS_DARWIN80_ENV)) && !defined(UKERNEL)
+#if ((defined(AFS_LINUX24_ENV) && defined(HAVE_LINUX_COMPLETION_H)) || defined(AFS_DARWIN80_ENV)) && !defined(UKERNEL)
 #if defined(AFS_DARWIN80_ENV)
     if (parm == AFSOP_BKG_HANDLER) {
        /* if afs_uspc_param grows this should be checked */
@@ -817,13 +817,14 @@ afs_syscall_call(long parm, long parm2, long parm3,
         */
        char *cell = osi_AllocSmallSpace(AFS_SMALLOCSIZ);
 
-       code = afs_InitDynroot();
-       if (!code) {
-           AFS_COPYINSTR(AFSKPTR(parm2), cell, AFS_SMALLOCSIZ, &bufferSize, code);
-       }
+       afs_CellInit();
+       AFS_COPYINSTR(AFSKPTR(parm2), cell, AFS_SMALLOCSIZ, &bufferSize, code);
        if (!code)
            afs_SetPrimaryCell(cell);
        osi_FreeSmallSpace(cell);
+       if (!code) {
+           code = afs_InitDynroot();
+       }
     } else if (parm == AFSOP_CACHEINIT) {
        struct afs_cacheParams cparms;
 
@@ -1053,12 +1054,10 @@ afs_syscall_call(long parm, long parm2, long parm3,
        afs_cold_shutdown = 0;
        if (parm2 == 1)
            afs_cold_shutdown = 1;
-#ifndef AFS_DARWIN_ENV
        if (afs_globalVFS != 0) {
            afs_warn("AFS isn't unmounted yet! Call aborted\n");
            code = EACCES;
        } else
-#endif
            afs_shutdown();
     } else if (parm == AFSOP_AFS_VFSMOUNT) {
 #ifdef AFS_HPUX_ENV
@@ -1283,10 +1282,15 @@ afs_shutdown(void)
        afs_osi_Sleep(&afs_termState);
     }
 #endif
-#else
-    afs_termState = AFSOP_STOP_COMPLETE;
 #endif
 
+#ifdef AFS_SUN510_ENV
+    afs_warn("NetIfPoller... ");
+    osi_StopNetIfPoller();
+#endif
+
+    afs_termState = AFSOP_STOP_COMPLETE;
+
 #ifdef AFS_AIX51_ENV
     shutdown_daemons();
 #endif