AFS_STATCNT(afs_unmount);
afs_globalVFS = 0;
- afs_cold_shutdown = 1;
- afs_shutdown();
+ afs_shutdown(AFS_COLD);
AFS_VFSUNLOCK();
return 0;
vflush(mp, NULLVP, FORCECLOSE/*0*/);
AFS_GLOCK();
afs_globalVFS = 0;
- afs_shutdown();
+ afs_shutdown(AFS_WARM);
} else {
AFS_GUNLOCK();
return EBUSY;
AFS_GLOCK();
AFS_STATCNT(afs_unmount);
afs_globalVFS = 0;
- afs_shutdown();
+ afs_shutdown(AFS_WARM);
AFS_GUNLOCK();
out:
AFS_STATCNT(afs_unmount);
afs_globalVFS = 0;
- afs_shutdown();
+ afs_shutdown(AFS_WARM);
AFS_GUNLOCK();
return 0;
}
ReleaseWriteLock(&afs_xvcache);
afs_globalVFS = 0;
- afs_shutdown();
+ afs_shutdown(AFS_WARM);
#ifdef AFS_SGI65_ENV
VFS_REMOVEBHV(afsp, &afs_vfs_bhv);
#endif
afs_globalVFS = 0;
afs_globalVp = 0;
- afs_shutdown();
+ afs_shutdown(AFS_WARM);
mntput(afs_cacheMnt);
osi_linux_verify_alloced_memory();
vflush(mp, NULLVP, 0); /* don't support forced */
AFS_GLOCK();
afs_globalVFS = NULL;
- afs_cold_shutdown = 1;
- afs_shutdown(); /* XXX */
+ afs_shutdown(AFS_COLD);
AFS_GUNLOCK();
mp->mnt_data = NULL;
afsp->mnt_data = NULL;
AFS_GLOCK();
afs_globalVFS = 0;
- afs_cold_shutdown = 1;
- afs_shutdown(); /* XXX */
+ afs_shutdown(AFS_COLD);
AFS_GUNLOCK();
/* give up syscall entries for ioctl & setgroups, which we've stolen */
afs_globalVFS = 0;
- afs_shutdown();
+ afs_shutdown(AFS_WARM);
}
int
{
AFS_STATCNT(afs_unmount);
afs_globalVFS = 0;
- afs_shutdown();
+ afs_shutdown(AFS_WARM);
return 0;
}
if (afs_globalVFS != 0) {
afs_warn("AFS isn't unmounted yet! Call aborted\n");
code = EACCES;
+ } else if (parm2 == AFS_COLD) {
+ afs_shutdown(AFS_COLD);
} else {
- afs_cold_shutdown = 0;
- if (parm2 == 1) {
- afs_cold_shutdown = 1;
- }
- afs_shutdown();
+ afs_shutdown(AFS_WARM);
}
} else if (parm == AFSOP_AFS_VFSMOUNT) {
#ifdef AFS_HPUX_ENV
enum afs_shutdown_state afs_shuttingdown = AFS_RUNNING;
void
-afs_shutdown(void)
+afs_shutdown(enum afs_shutdown_type cold_flag)
{
extern short afs_brsDaemons;
extern afs_int32 afs_CheckServerDaemonStarted;
if (afs_shuttingdown != AFS_RUNNING)
return;
+ afs_cold_shutdown = ((cold_flag == AFS_COLD) ? 1 : 0);
+
afs_shuttingdown = AFS_FLUSHING_CB;
/* Give up all of our callbacks if we can. */
extern char afs_rootVolumeName[MAXROOTVOLNAMELEN];
extern void afs_FlushCBs(void);
extern int afs_CheckInit(void);
-extern void afs_shutdown(void);
+/* for afs_shutdown */
+enum afs_shutdown_type {
+ AFS_WARM = 0,
+ AFS_COLD = 1,
+};
+extern void afs_shutdown(enum afs_shutdown_type);
+
+
extern void shutdown_afstest(void);
extern int afs_syscall_call(long parm, long parm2, long parm3,
long parm4, long parm5, long parm6);
* Cold shutdown is the default
*/
printf("afsd: Shutting down all afs processes and afs state\n");
- code = afsd_syscall(AFSOP_SHUTDOWN, 1);
+ code = afsd_syscall(AFSOP_SHUTDOWN, 1); /* always AFS_COLD */
if (code) {
printf("afsd: AFS still mounted; Not shutting down\n");
exit(1);