searchdir
ret |= searchdir(ino, blk,
ret |= searchdir(ino, blkno,
static int searchdir(ino_t, daddr_t, long, off_t, u_int64_t *, int);
static struct direct *searchdir(ino_t, char *);
if ((dp = searchdir(ino, name)) == NULL)
if (searchdir == NULL) {
vrele(searchdir);
*searchdir_ret = searchdir = NULL;
vn_lock(searchdir, lktype | LK_RETRY);
lookup_lktype(struct vnode *searchdir, struct componentname *cnp)
if ((searchdir->v_mount->mnt_iflag & IMNT_SHRLOOKUP) != 0 &&
struct vnode *searchdir,
*newsearchdir_ret = searchdir;
if (searchdir == ndp->ni_rootdir ||
searchdir == rootvnode) {
foundobj = searchdir;
lktype = lookup_lktype(searchdir, cnp);
vn_lock(searchdir, lktype | LK_RETRY);
retval = vn_isunder(searchdir, ndp->ni_rootdir,
vrele(searchdir);
searchdir = NULL;
if ((searchdir->v_vflag & VV_ROOT) == 0 ||
tmpvn = searchdir;
searchdir = searchdir->v_mount->mnt_vnodecovered;
vref(searchdir);
*newsearchdir_ret = searchdir;
lktype = lookup_lktype(searchdir, cnp);
vn_lock(searchdir, lktype | LK_RETRY);
error = VOP_LOOKUP(searchdir, &foundobj, cnp);
KASSERT(VOP_ISLOCKED(searchdir) == LK_SHARED);
if (vn_lock(searchdir, LK_UPGRADE | LK_NOWAIT)) {
VOP_UNLOCK(searchdir);
(searchdir->v_vflag & VV_ROOT) &&
(searchdir->v_mount->mnt_flag & MNT_UNION)) {
tmpvn = searchdir;
searchdir = searchdir->v_mount->mnt_vnodecovered;
vref(searchdir);
*newsearchdir_ret = searchdir;
if (searchdir != NULL) {
VOP_UNLOCK(searchdir);
struct vnode *foundobj, *searchdir;
searchdir = *searchdir_ret;
if ((error = lookup_parsepath(state, searchdir)) != 0) {
if ((searchdir->v_vflag & VV_ROOT) != 0 &&
if (!cache_lookup_linked(searchdir, cnp->cn_nameptr,
if ((searchdir->v_vflag & VV_ROOT) != 0 &&
(searchdir->v_mount->mnt_flag & MNT_UNION) != 0) {
searchdir = NULL;
searchdir = foundobj;
} else if (searchdir != *searchdir_ret) {
if (searchdir == NULL) {
error2 = vcache_tryvget(searchdir);
*searchdir_ret = searchdir;
struct vnode *searchdir, *foundobj;
error = namei_start(state, isnfsd, &searchdir);
KASSERT(searchdir->v_type == VDIR);
foundobj = searchdir;
searchdir = NULL;
KASSERT(searchdir != NULL);
error = lookup_fastforward(state, &searchdir, &foundobj);
error = lookup_once(state, searchdir, &searchdir,
error = lookup_crossmount(state, &searchdir,
if (searchdir != NULL) {
vput(searchdir);
vrele(searchdir);
KASSERT(searchdir != NULL ||
VOP_UNLOCK(searchdir);
} else if (searchdir == NULL) {
searchdir, foundobj,
&searchdir);
KASSERT(searchdir != foundobj);
if (searchdir != NULL) {
vrele(searchdir);
KASSERT(searchdir != NULL);
foundobj = searchdir;
searchdir = NULL;
KASSERT(foundobj != searchdir);
if (searchdir) {
vput(searchdir);
vrele(searchdir);
if (searchdir != NULL) {
vput(searchdir);
vrele(searchdir);
searchdir = foundobj;
KASSERT((cnp->cn_flags & LOCKPARENT) == 0 || searchdir == NULL ||
VOP_ISLOCKED(searchdir) == LK_EXCLUSIVE);
if (searchdir != NULL) {
vput(searchdir);
vrele(searchdir);
searchdir = NULL;
(searchdir == NULL ||
searchdir->v_mount != foundobj->v_mount) &&
if (searchdir) {
vput(searchdir);
vrele(searchdir);
searchdir = NULL;
if (searchdir) {
vput(searchdir);
vrele(searchdir);
searchdir = NULL;
searchdir == foundobj) {
VOP_UNLOCK(searchdir);
(searchdir != foundobj ||
if ((cnp->cn_flags & LOCKPARENT) == 0 && searchdir != NULL) {
vrele(searchdir);
searchdir = NULL;
ndp->ni_dvp = searchdir;
struct vnode *searchdir, struct vnode *foundobj,
vrele(searchdir);
searchdir = ndp->ni_erootdir;
if (searchdir == NULL ||
searchdir = ndp->ni_rootdir;
vref(searchdir);
*newsearchdir_ret = searchdir;
lookup_parsepath(struct namei_state *state, struct vnode *searchdir)
error = VOP_PARSEPATH(searchdir, cnp->cn_nameptr, &cnp->cn_namelen);
struct vnode *searchdir;
searchdir = *searchdir_ret;
KASSERT(searchdir != NULL);
lktype = VOP_ISLOCKED(searchdir);
VOP_UNLOCK(searchdir);
dtfs_dirgetnth(struct dtfs_file *searchdir, int n)
LIST_FOREACH(dirent, &searchdir->df_dirents, dfd_entries) {
dtfs_dirgetbyname(struct dtfs_file *searchdir, const char *fname, size_t fnlen)
LIST_FOREACH(dirent, &searchdir->df_dirents, dfd_entries)