static void
afs_freevfs(void)
{
- int i;
- struct vcache *vc, *nvc;
- extern struct vcache *afs_vhashT[VCSIZE];
afs_globalVFS = 0;
afsp->vfs_flag |= VFS_UNMOUNTED;
- /* release the root vnode, which should be the last reference to us
- * besides the caller of afs_unmount */
- rootvp = afs_globalVp;
- afs_globalVp = NULL;
- AFS_RELE(rootvp);
+ if (afs_globalVp) {
+ /* release the root vnode, which should be the last reference to us
+ * besides the caller of afs_unmount */
+ rootvp = afs_globalVp;
+ afs_globalVp = NULL;
+ AFS_RELE(AFSTOV(rootvp));
+ }
AFS_GUNLOCK();
return 0;
if (!(code = afs_InitReq(&treq, proc->p_cred))
&& !(code = afs_CheckInit())) {
- tvp = afs_GetVCache(&afs_rootFid, &treq, NULL, NULL);
+ tvp = afs_GetVCache(&afs_rootFid, &treq);
/* we really want this to stay around */
if (tvp) {
if (afs_globalVp) {
}
afs_globalVp = tvp;
} else
- code = ENOENT;
+ code = EIO;
}
}
if (tvp) {
- AFS_FAST_HOLD(tvp);
+ osi_Assert(osi_vnhold(tvp) == 0);
mutex_enter(&AFSTOV(tvp)->v_lock);
AFSTOV(tvp)->v_flag |= VROOT;
mutex_exit(&AFSTOV(tvp)->v_lock);
AFS_STATCNT(afs_statfs);
abp->f_frsize = 1024;
- abp->f_favail = 9000000;
abp->f_bsize = afsp->vfs_bsize;
abp->f_blocks = abp->f_bfree = abp->f_bavail = abp->f_files =
- abp->f_ffree = 9000000;
- abp->f_fsid = (AFS_VFSMAGIC << 16) || AFS_VFSFSID;
+ abp->f_favail = abp->f_ffree = AFS_VFS_FAKEFREE;
+ abp->f_fsid = (AFS_VFSMAGIC << 16) | AFS_VFSFSID;
AFS_GUNLOCK();
return 0;
*avcp = NULL;
if (!(code = afs_InitReq(&treq, credp))) {
- code = afs_osi_vget((struct vcache **)avcp, fidp, &treq);
+ struct vcache *tvc = NULL;
+ code = afs_osi_vget(&tvc, fidp, &treq);
+ if (tvc) {
+ *avcp = AFSTOV(tvc);
+ }
}
afs_Trace3(afs_iclSetp, CM_TRACE_VGET, ICL_TYPE_POINTER, *avcp,
VFSDEF_VERSION,
"afs",
afsinit,
- 0,
+ VSW_STATS,
NULL
};
#else
VFSDEF_VERSION,
"afs",
afsinit,
- 0
+ VSW_STATS
};
#endif
#else
};
#endif /* AFS_SUN511_ENV */
-/* inter-module dependencies */
-char _depends_on[] = "drv/ip drv/udp strmod/rpcmod";
-
/*
* Info/Structs to link the afs module into the kernel
*/