]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
OpenBSD: allow for more graceful shutdown
authorAntoine Verheijen <antoine@ualberta.ca>
Mon, 8 Feb 2010 22:33:38 +0000 (15:33 -0700)
committerDerrick Brashear <shadow@dementia.org>
Tue, 9 Feb 2010 17:11:55 +0000 (09:11 -0800)
A shutdown or unmount of AFS on OpenBSD will invariably result in a kernel
panic. This is because the afs_unmount() routine does not (can not?) force
vnode releases if the vnode is still busy. However, it continues on
nonetheless and dies a horrible death a little later.

This update causes a return from afs_unmount() with EBUSY if all the vnodes
weren't released. This results in error messages on shutdown but the overall
process continues more reliably and reboots, for example, work.

There is likely a better solution to this but at least this is no worse than
a system crash and it doesn't require console (or power button) intervention
so it should do until I have the chance to explore further.

Change-Id: Ia70f83bda748ea3d0b81b341a292e83121446567
Reviewed-on: http://gerrit.openafs.org/1275
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>
(cherry picked from commit 5f39ae64bafe1e2073ff419fe62c2d5a86fc98f5)
Change-Id: I5b74a5b80c6e33ae49ac4f23fb6b3b5d7002b28a
Reviewed-on: http://gerrit.openafs.org/1260

src/afs/OBSD/osi_vfsops.c

index 6daaf5d8527a36376d38a7c6f36d4c14ef5c5538..b248c68fc2b69f93b265e49dc7d53e9490c5f6f1 100644 (file)
@@ -268,6 +268,13 @@ afs_unmount(afsp, flags, p)
 {
     extern int sys_ioctl(), sys_setgroups();
 
+    struct vnode *vp;
+
+    for (vp = LIST_FIRST(&afsp->mnt_vnodelist); vp != NULL;
+       vp = LIST_NEXT(vp, v_mntvnodes)) {
+       if (vp->v_usecount) return EBUSY;
+    }
+
     AFS_STATCNT(afs_unmount);
 #ifdef AFS_DISCON_ENV
     give_up_cbs();