/*
* osi_misc.c
*
- * Implements:
- * afs_suser
*/
#include <afsconfig.h>
#include "afs/param.h"
-RCSID
- ("$Header$");
#include "afs/sysincludes.h" /* Standard vendor system headers */
#include "afsincludes.h" /* Afs-based standard headers */
#include <sys/namei.h>
-#ifdef AFS_FBSD50_ENV
-/* serious cheating */
-#undef curproc
-#define curproc curthread
-#endif
-
int
osi_lookupname(char *aname, enum uio_seg seg, int followlink,
struct vnode **vpp)
{
struct nameidata n;
- int flags, error, wasowned;
+ int flags, error, glocked;
-#ifdef AFS_FBSD50_ENV
- wasowned = mtx_owned(&afs_global_mtx);
- if (wasowned)
- mtx_unlock(&afs_global_mtx);
-#endif
+ glocked = ISAFS_GLOCK();
+ if (glocked)
+ AFS_GUNLOCK();
- flags = 0;
- flags = LOCKLEAF;
+ flags = LOCKLEAF | MPSAFE; /* namei must take Giant if needed */
if (followlink)
flags |= FOLLOW;
else
flags |= NOFOLLOW;
- NDINIT(&n, LOOKUP, flags, seg, aname, curproc);
+ NDINIT(&n, LOOKUP, flags, seg, aname, curthread);
if ((error = namei(&n)) != 0) {
-#ifdef AFS_FBSD50_ENV
- if (wasowned)
- mtx_lock(&afs_global_mtx);
-#endif
+ if (glocked)
+ AFS_GLOCK();
return error;
}
*vpp = n.ni_vp;
- /* should we do this? */
- VOP_UNLOCK(n.ni_vp, 0, curproc);
- NDFREE(&n, NDF_ONLY_PNBUF);
-#ifdef AFS_FBSD50_ENV
- if (wasowned)
- mtx_lock(&afs_global_mtx);
+ /* XXX should we do this? Usually NOT (matt) */
+#if defined(AFS_FBSD80_ENV)
+ /*VOP_UNLOCK(n.ni_vp, 0);*/
+#else
+ VOP_UNLOCK(n.ni_vp, 0, curthread);
#endif
+ NDFREE(&n, NDF_ONLY_PNBUF);
+ if (glocked)
+ AFS_GLOCK();
return 0;
}
void
afs_osi_SetTime(osi_timeval_t * atv)
{
-#ifdef AFS_FBSD50_ENV
printf("afs attempted to set clock; use \"afsd -nosettime\"\n");
-#else
- struct timespec ts;
- struct timeval tv, delta;
- int s;
-
- AFS_GUNLOCK();
- s = splclock();
- microtime(&tv);
- delta = *atv;
- timevalsub(&delta, &tv);
- ts.tv_sec = atv->tv_sec;
- ts.tv_nsec = atv->tv_usec * 1000;
- set_timecounter(&ts);
- (void)splsoftclock();
- lease_updatetime(delta.tv_sec);
- splx(s);
- resettodr();
- AFS_GLOCK();
-#endif
}
/*
osi_fbsd_alloc(size_t size, int dropglobal)
{
void *rv;
-#ifdef AFS_FBSD50_ENV
- int wasowned;
+ int glocked;
if (dropglobal) {
- wasowned = mtx_owned(&afs_global_mtx);
- if (wasowned)
- mtx_unlock(&afs_global_mtx);
- rv = malloc(size, M_AFS, M_WAITOK);
- if (wasowned)
- mtx_lock(&afs_global_mtx);
+ glocked = ISAFS_GLOCK();
+ if (glocked)
+ AFS_GUNLOCK();
+ rv = malloc(size, M_AFS, M_WAITOK);
+ if (glocked)
+ AFS_GLOCK();
} else
-#endif
- rv = malloc(size, M_AFS, M_NOWAIT);
+ rv = malloc(size, M_AFS, M_NOWAIT);
return (rv);
}
void
osi_fbsd_free(void *p)
{
-
- free(p, M_AFS);
-}
-
-void
-osi_AllocMoreSSpace(afs_int32 preallocs)
-{
- ;
-}
-
-void
-osi_FreeLargeSpace(void *p)
-{
- osi_fbsd_free(p);
-}
-
-void
-osi_FreeSmallSpace(void *p)
-{
- osi_fbsd_free(p);
-}
-
-void *
-osi_AllocLargeSpace(size_t size)
-{
- AFS_ASSERT_GLOCK();
- AFS_STATCNT(osi_AllocLargeSpace);
- return (osi_fbsd_alloc(size, 1));
-}
-
-void *
-osi_AllocSmallSpace(size_t size)
-{
- AFS_ASSERT_GLOCK();
- AFS_STATCNT(osi_AllocSmallSpace);
- return (osi_fbsd_alloc(size, 1));
-}
-
-void
-shutdown_osinet(void)
-{
- ;
+ free(p, M_AFS);
}