2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
15 #include <afsconfig.h>
16 #include "afs/param.h"
19 #include "afs/sysincludes.h" /* Standard vendor system headers */
20 #include "afsincludes.h" /* Afs-based standard headers */
21 #include <sys/namei.h>
24 osi_lookupname(char *aname, enum uio_seg seg, int followlink,
28 int flags, error, glocked;
30 glocked = ISAFS_GLOCK();
34 #if __FreeBSD_version >= 1000021 /* MPSAFE is gone for good! */
37 flags = LOCKLEAF | MPSAFE; /* namei must take Giant if needed */
43 NDINIT(&n, LOOKUP, flags, seg, aname, curthread);
44 if ((error = namei(&n)) != 0) {
50 /* XXX should we do this? Usually NOT (matt) */
51 #if defined(AFS_FBSD80_ENV)
52 /*VOP_UNLOCK(n.ni_vp, 0);*/
54 VOP_UNLOCK(n.ni_vp, 0, curthread);
56 NDFREE(&n, NDF_ONLY_PNBUF);
63 * does not implement security features of kern_time.c:settime()
66 afs_osi_SetTime(osi_timeval_t * atv)
68 printf("afs attempted to set clock; use \"afsd -nosettime\"\n");
72 * Replace all of the bogus special-purpose memory allocators...
75 osi_fbsd_alloc(size_t size, int dropglobal)
81 glocked = ISAFS_GLOCK();
84 rv = malloc(size, M_AFS, M_WAITOK);
88 rv = malloc(size, M_AFS, M_NOWAIT);
94 osi_fbsd_free(void *p)
100 * check if a vcache is in use
104 * @retcode EBUSY vcache is in use by someone else
105 * @retcode otherwise other error
107 * @pre The caller must hold the vnode interlock for the associated vnode
108 * @post The vnode interlock for the associated vnode will still be held
109 * and must be VI_UNLOCK'd by the caller
112 osi_fbsd_checkinuse(struct vcache *avc)
114 struct vnode *vp = AFSTOV(avc);
116 ASSERT_VI_LOCKED(vp, "osi_fbsd_checkinuse");
118 /* The interlock is needed to check the usecount. */
119 if (vp->v_usecount > 0) {
124 * The value of avc->opens here came to be, at some point,
125 * typically -1. This was caused by incorrectly performing afs_close
126 * processing on vnodes being recycled */
131 /* if a lock is held, give up */
132 if (CheckLock(&avc->lock)) {