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
= 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 * Replace all of the bogus special-purpose memory allocators...
66 osi_fbsd_alloc(size_t size
, int dropglobal
)
72 glocked
= ISAFS_GLOCK();
75 rv
= malloc(size
, M_AFS
, M_WAITOK
);
79 rv
= malloc(size
, M_AFS
, M_NOWAIT
);
85 osi_fbsd_free(void *p
)
91 * check if a vcache is in use
95 * @retcode EBUSY vcache is in use by someone else
96 * @retcode otherwise other error
98 * @pre The caller must hold the vnode interlock for the associated vnode
99 * @post The vnode interlock for the associated vnode will still be held
100 * and must be VI_UNLOCK'd by the caller
103 osi_fbsd_checkinuse(struct vcache
*avc
)
105 struct vnode
*vp
= AFSTOV(avc
);
107 ASSERT_VI_LOCKED(vp
, "osi_fbsd_checkinuse");
109 /* The interlock is needed to check the usecount. */
110 if (vp
->v_usecount
> 0) {
115 * The value of avc->opens here came to be, at some point,
116 * typically -1. This was caused by incorrectly performing afs_close
117 * processing on vnodes being recycled */
122 /* if a lock is held, give up */
123 if (CheckLock(&avc
->lock
)) {