afs: clarify cold and warm shutdown logic 82/12182/7
authorMark Vitale <mvitale@sinenomine.net>
Fri, 29 Jan 2016 06:00:56 +0000 (01:00 -0500)
committerBenjamin Kaduk <kaduk@mit.edu>
Fri, 7 May 2021 04:35:30 +0000 (00:35 -0400)
Currently, any code that wants to perform a cold shutdown must first set
global afs_cold_shutdown = 1, then call afs_shutdown(void).

Instead, modify afs_shutdown() to accept a single parm which specifies
AFS_WARM or AFS_COLD shutdown, and to set the value of global
afs_cold_shutdown based on this parm.  Remove all other assignments for
afs_cold_shutdown.  Modify all callers of afs_shutdown() to specify
AFS_WARM or AFS_COLD as needed to maintain equivalent function.

This should make it much easier to tell at a glance what type of
shutdown is being requested by each caller to afs_shutdown().

No functional change should be incurred by this commit.

Change-Id: I921eca5b4d2659209154fbe37d575db69bf708b8
Reviewed-on: https://gerrit.openafs.org/12182
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>

13 files changed:
src/afs/AIX/osi_vfsops.c
src/afs/DARWIN/osi_vfsops.c
src/afs/FBSD/osi_vfsops.c
src/afs/HPUX/osi_vfsops.c
src/afs/IRIX/osi_vfsops.c
src/afs/LINUX/osi_vfsops.c
src/afs/NBSD/osi_vfsops.c
src/afs/OBSD/osi_vfsops.c
src/afs/SOLARIS/osi_vfsops.c
src/afs/UKERNEL/osi_vfsops.c
src/afs/afs_call.c
src/afs/afs_prototypes.h
src/afsd/afsd.c

index 3c895d8..2aea66a 100644 (file)
@@ -100,8 +100,7 @@ afs_unmount(struct vfs *afsp, int flag)
     AFS_STATCNT(afs_unmount);
 
     afs_globalVFS = 0;
-    afs_cold_shutdown = 1;
-    afs_shutdown();
+    afs_shutdown(AFS_COLD);
 
     AFS_VFSUNLOCK();
     return 0;
index 60b3a18..e9b4383 100644 (file)
@@ -196,7 +196,7 @@ afs_unmount(struct mount *mp, int flags, CTX_TYPE ctx)
                vflush(mp, NULLVP, FORCECLOSE/*0*/);
                AFS_GLOCK();
                afs_globalVFS = 0;
-               afs_shutdown();
+               afs_shutdown(AFS_WARM);
            } else {
                AFS_GUNLOCK();
                return EBUSY;
index f160e7b..d15620c 100644 (file)
@@ -184,7 +184,7 @@ afs_unmount(struct mount *mp, int flags)
     AFS_GLOCK();
     AFS_STATCNT(afs_unmount);
     afs_globalVFS = 0;
-    afs_shutdown();
+    afs_shutdown(AFS_WARM);
     AFS_GUNLOCK();
 
 out:
index 6383d53..175db35 100644 (file)
@@ -103,7 +103,7 @@ afs_unmount(struct vfs *afsp)
     AFS_STATCNT(afs_unmount);
 
     afs_globalVFS = 0;
-    afs_shutdown();
+    afs_shutdown(AFS_WARM);
 
     AFS_GUNLOCK();
     return 0;
index ae81156..a41bb56 100644 (file)
@@ -245,7 +245,7 @@ afs_unmount(OSI_VFS_ARG(afsp), flags, cr)
     }
     ReleaseWriteLock(&afs_xvcache);
     afs_globalVFS = 0;
-    afs_shutdown();
+    afs_shutdown(AFS_WARM);
 #ifdef AFS_SGI65_ENV
     VFS_REMOVEBHV(afsp, &afs_vfs_bhv);
 #endif
index 5457fbe..e253c2e 100644 (file)
@@ -355,7 +355,7 @@ afs_put_super(struct super_block *sbp)
     afs_globalVFS = 0;
     afs_globalVp = 0;
 
-    afs_shutdown();
+    afs_shutdown(AFS_WARM);
     mntput(afs_cacheMnt);
 
     osi_linux_verify_alloced_memory();
index adfcebe..70d0a4a 100644 (file)
@@ -302,8 +302,7 @@ afs_unmount(struct mount *mp, int mntflags)
     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;
index 78b7ed6..a1c56e4 100644 (file)
@@ -290,8 +290,7 @@ afs_unmount(afsp, flags, p)
     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 */
index 1f03b8f..30da483 100644 (file)
@@ -75,7 +75,7 @@ afs_freevfs(void)
 
     afs_globalVFS = 0;
 
-    afs_shutdown();
+    afs_shutdown(AFS_WARM);
 }
 
 int
index 38b1e72..a76d4bd 100644 (file)
@@ -53,7 +53,7 @@ afs_unmount(struct vfs *afsp)
 {
     AFS_STATCNT(afs_unmount);
     afs_globalVFS = 0;
-    afs_shutdown();
+    afs_shutdown(AFS_WARM);
     return 0;
 }
 
index ed40804..b046df3 100644 (file)
@@ -1467,12 +1467,10 @@ afs_syscall_call(long parm, long parm2, long parm3,
        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
@@ -1662,7 +1660,7 @@ afs_CheckInit(void)
 
 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;
@@ -1678,6 +1676,8 @@ afs_shutdown(void)
     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. */
index a672b22..77eb1f8 100644 (file)
@@ -33,7 +33,14 @@ extern int afs_cold_shutdown;
 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);
index 1f92ebe..5c714d0 100644 (file)
@@ -2264,7 +2264,7 @@ CheckOptions(struct cmd_syndesc *as)
         * 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);