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
{
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();