#include <sys/syscall.h>
#include <sys/syscallargs.h>
+/* from /usr/src/sys/kern/vfs_subr.c */
+extern void insmntque(struct vnode *, struct mount *);
+
#define NBSD_DONTFOLLOW_LINK 0
#define NBSD_FOLLOW_LINK 1
+
static int lkmid = -1;
static int afs_badcall(struct proc *p, void *xx, register_t *yy);
return error;
}
-#if 0
-int
-afs_rdwr(struct vnode *vp, struct uio *uiop, enum uio_rw op,
- int flags, struct AFS_UCRED *cred)
-{
- uiop->uio_rw = op;
- if (op == UIO_READ)
- return VOP_READ(vp, uiop, flags, cred);
- if (op == UIO_WRITE)
- return VOP_WRITE(vp, uiop, flags, cred);
-#ifdef DIAGNOSTIC
- panic("afs_rdwr mode");
-#endif
- return EINVAL;
-}
-#endif
-
int
afs_quotactl()
{
return EBUSY;
}
- AFS_GLOCK();
AFS_STATCNT(afs_mount);
#ifdef AFS_DISCON_ENV
mp->osi_vfs_fsid.val[0] = AFS_VFSMAGIC; /* magic */
mp->osi_vfs_fsid.val[1] = (int) AFS_VFSFSID;
- AFS_GUNLOCK();
-
(void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN-1, &size);
bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
bzero(mp->mnt_stat.f_mntfromname, MNAMELEN);
vflush(afsp, NULLVP, 0); /* don't support forced */
afsp->mnt_data = NULL;
-#ifdef AFS_GLOBAL_SUNLOCK
- mutex_enter(&afs_global_lock);
-#endif
+ AFS_GLOCK();
afs_globalVFS = 0;
afs_cold_shutdown = 1;
afs_shutdown(); /* XXX */
-#ifdef AFS_GLOBAL_SUNLOCK
- mutex_exit(&afs_global_lock);
-#endif
+ AFS_GUNLOCK();
/* give up syscall entries for ioctl & setgroups, which we've stolen */
sysent[SYS_ioctl].sy_call = sys_ioctl;
AFS_STATCNT(afs_root);
-#ifdef AFS_GLOBAL_SUNLOCK
- mutex_enter(&afs_global_lock);
-#endif
+ AFS_GLOCK();
if (!(code = afs_InitReq(&treq, osi_curcred())) &&
!(code = afs_CheckInit())) {
tvp = afs_GetVCache(&afs_rootFid, &treq, NULL, NULL);
} else
code = ENOENT;
}
-#ifdef AFS_GLOBAL_SUNLOCK
- mutex_exit(&afs_global_lock);
-#endif
+ AFS_GUNLOCK();
if (!code)
vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY, curproc); /* return it locked */
afs_statfs(struct osi_vfs *afsp, struct statfs *abp)
{
AFS_STATCNT(afs_statfs);
-#ifdef AFS_GLOBAL_SUNLOCK
- mutex_enter(&afs_global_lock);
-#endif
abp->f_bsize = afsp->osi_vfs_bsize;
- /* Fake a high number below to satisfy programs that use the ustat (for AIX), or statfs (for the rest) call to make sure that there's enough space in the device partition before storing something there (like ed(1)) */
- abp->f_blocks = abp->f_bfree = abp->f_bavail = abp->f_files = abp->f_ffree = 9000000; /* XXX */
+
+ /*
+ * Fake a high number below to satisfy programs that use the ustat (for
+ * * AIX), or statfs (for the rest) call to make sure that there's
+ * enough * space in the device partition before storing something there
+ * (like * ed(1))
+ */
+ abp->f_blocks = abp->f_bfree = abp->f_bavail = abp->f_files = abp->f_ffree = 9000000;
abp->f_fsid.val[0] = AFS_VFSMAGIC; /* magic */
abp->f_fsid.val[1] = (int) AFS_VFSFSID;
-#ifdef AFS_GLOBAL_SUNLOCK
- mutex_exit(&afs_global_lock);
-#endif
return 0;
}