Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/vfs_lookup.c
Show First 20 Lines • Show All 649 Lines • ▼ Show 20 Lines | case CACHE_FPL_STATUS_ABORTED: | ||||
break; | break; | ||||
} | } | ||||
/* | /* | ||||
* Locked lookup. | * Locked lookup. | ||||
*/ | */ | ||||
for (;;) { | for (;;) { | ||||
ndp->ni_startdir = dp; | ndp->ni_startdir = dp; | ||||
error = lookup(ndp); | error = vfs_lookup(ndp); | ||||
if (error != 0) | if (error != 0) | ||||
goto out; | goto out; | ||||
/* | /* | ||||
* If not a symbolic link, we're done. | * If not a symbolic link, we're done. | ||||
*/ | */ | ||||
if ((cnp->cn_flags & ISSYMLINK) == 0) { | if ((cnp->cn_flags & ISSYMLINK) == 0) { | ||||
SDT_PROBE4(vfs, namei, lookup, return, error, | SDT_PROBE4(vfs, namei, lookup, return, error, | ||||
▲ Show 20 Lines • Show All 171 Lines • ▼ Show 20 Lines | |||||
* if result vnode is mounted on and crossing mount points, | * if result vnode is mounted on and crossing mount points, | ||||
* find mounted on vnode | * find mounted on vnode | ||||
* if more components of name, do next level at dirloop | * if more components of name, do next level at dirloop | ||||
* return the answer in ni_vp, locked if LOCKLEAF set | * return the answer in ni_vp, locked if LOCKLEAF set | ||||
* if LOCKPARENT set, return locked parent in ni_dvp | * if LOCKPARENT set, return locked parent in ni_dvp | ||||
* if WANTPARENT set, return unlocked parent in ni_dvp | * if WANTPARENT set, return unlocked parent in ni_dvp | ||||
*/ | */ | ||||
int | int | ||||
lookup(struct nameidata *ndp) | vfs_lookup(struct nameidata *ndp) | ||||
{ | { | ||||
char *cp; /* pointer into pathname argument */ | char *cp; /* pointer into pathname argument */ | ||||
char *prev_ni_next; /* saved ndp->ni_next */ | char *prev_ni_next; /* saved ndp->ni_next */ | ||||
char *nulchar; /* location of '\0' in cn_pnbuf */ | char *nulchar; /* location of '\0' in cn_pnbuf */ | ||||
struct vnode *dp = NULL; /* the directory we are searching */ | struct vnode *dp = NULL; /* the directory we are searching */ | ||||
struct vnode *tdp; /* saved dp */ | struct vnode *tdp; /* saved dp */ | ||||
struct mount *mp; /* mount table entry */ | struct mount *mp; /* mount table entry */ | ||||
struct prison *pr; | struct prison *pr; | ||||
▲ Show 20 Lines • Show All 528 Lines • ▼ Show 20 Lines | bad_eexist: | ||||
return (EEXIST); | return (EEXIST); | ||||
} | } | ||||
/* | /* | ||||
* relookup - lookup a path name component | * relookup - lookup a path name component | ||||
* Used by lookup to re-acquire things. | * Used by lookup to re-acquire things. | ||||
*/ | */ | ||||
int | int | ||||
relookup(struct vnode *dvp, struct vnode **vpp, struct componentname *cnp) | vfs_relookup(struct vnode *dvp, struct vnode **vpp, struct componentname *cnp) | ||||
{ | { | ||||
struct vnode *dp = NULL; /* the directory we are searching */ | struct vnode *dp = NULL; /* the directory we are searching */ | ||||
int rdonly; /* lookup read-only flag bit */ | int rdonly; /* lookup read-only flag bit */ | ||||
int error = 0; | int error = 0; | ||||
KASSERT(cnp->cn_flags & ISLASTCN, | KASSERT(cnp->cn_flags & ISLASTCN, | ||||
("relookup: Not given last component.")); | ("relookup: Not given last component.")); | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 378 Lines • Show Last 20 Lines |