1*95acdafaSAntonio Huete Jimenez.\" Copyright (c) 1996 Doug Rabson 2*95acdafaSAntonio Huete Jimenez.\" 3*95acdafaSAntonio Huete Jimenez.\" All rights reserved. 4*95acdafaSAntonio Huete Jimenez.\" 5*95acdafaSAntonio Huete Jimenez.\" This program is free software. 6*95acdafaSAntonio Huete Jimenez.\" 7*95acdafaSAntonio Huete Jimenez.\" Redistribution and use in source and binary forms, with or without 8*95acdafaSAntonio Huete Jimenez.\" modification, are permitted provided that the following conditions 9*95acdafaSAntonio Huete Jimenez.\" are met: 10*95acdafaSAntonio Huete Jimenez.\" 1. Redistributions of source code must retain the above copyright 11*95acdafaSAntonio Huete Jimenez.\" notice, this list of conditions and the following disclaimer. 12*95acdafaSAntonio Huete Jimenez.\" 2. Redistributions in binary form must reproduce the above copyright 13*95acdafaSAntonio Huete Jimenez.\" notice, this list of conditions and the following disclaimer in the 14*95acdafaSAntonio Huete Jimenez.\" documentation and/or other materials provided with the distribution. 15*95acdafaSAntonio Huete Jimenez.\" 16*95acdafaSAntonio Huete Jimenez.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR 17*95acdafaSAntonio Huete Jimenez.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18*95acdafaSAntonio Huete Jimenez.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19*95acdafaSAntonio Huete Jimenez.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, 20*95acdafaSAntonio Huete Jimenez.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21*95acdafaSAntonio Huete Jimenez.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22*95acdafaSAntonio Huete Jimenez.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23*95acdafaSAntonio Huete Jimenez.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24*95acdafaSAntonio Huete Jimenez.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25*95acdafaSAntonio Huete Jimenez.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26*95acdafaSAntonio Huete Jimenez.\" 27*95acdafaSAntonio Huete Jimenez.\" $FreeBSD: src/share/man/man9/VOP_LOOKUP.9,v 1.8.2.5 2001/12/17 11:30:18 ru Exp $ 28*95acdafaSAntonio Huete Jimenez.\" 29*95acdafaSAntonio Huete Jimenez.Dd October 13, 2014 30*95acdafaSAntonio Huete Jimenez.Dt VOP_OLD_LOOKUP 9 31*95acdafaSAntonio Huete Jimenez.Os 32*95acdafaSAntonio Huete Jimenez.Sh NAME 33*95acdafaSAntonio Huete Jimenez.Nm VOP_OLD_LOOKUP 34*95acdafaSAntonio Huete Jimenez.Nd lookup a component of a pathname 35*95acdafaSAntonio Huete Jimenez.Sh SYNOPSIS 36*95acdafaSAntonio Huete Jimenez.In sys/param.h 37*95acdafaSAntonio Huete Jimenez.In sys/vnode.h 38*95acdafaSAntonio Huete Jimenez.In sys/namei.h 39*95acdafaSAntonio Huete Jimenez.Ft int 40*95acdafaSAntonio Huete Jimenez.Fn VOP_OLD_LOOKUP "struct vnode *dvp" "struct vnode **vpp" "struct componentname *cnp" 41*95acdafaSAntonio Huete Jimenez.Sh DESCRIPTION 42*95acdafaSAntonio Huete JimenezThis entry point looks up a single pathname component in a given directory. 43*95acdafaSAntonio Huete Jimenez.Pp 44*95acdafaSAntonio Huete JimenezIts arguments are: 45*95acdafaSAntonio Huete Jimenez.Bl -tag -width vpp 46*95acdafaSAntonio Huete Jimenez.It Fa dvp 47*95acdafaSAntonio Huete Jimenezthe locked vnode of the directory to search 48*95acdafaSAntonio Huete Jimenez.It Fa vpp 49*95acdafaSAntonio Huete Jimenezthe address of a variable where the resulting locked vnode should be stored 50*95acdafaSAntonio Huete Jimenez.It Fa cnp 51*95acdafaSAntonio Huete Jimenezthe pathname component to be searched for 52*95acdafaSAntonio Huete Jimenez.El 53*95acdafaSAntonio Huete Jimenez.Pp 54*95acdafaSAntonio Huete Jimenez.Fa Cnp 55*95acdafaSAntonio Huete Jimenezis a pointer to a componentname structure defined as follows: 56*95acdafaSAntonio Huete Jimenez.Bd -literal 57*95acdafaSAntonio Huete Jimenezstruct componentname { 58*95acdafaSAntonio Huete Jimenez /* 59*95acdafaSAntonio Huete Jimenez * Arguments to lookup. 60*95acdafaSAntonio Huete Jimenez */ 61*95acdafaSAntonio Huete Jimenez u_long cn_nameiop; /* namei operation */ 62*95acdafaSAntonio Huete Jimenez u_long cn_flags; /* flags to namei */ 63*95acdafaSAntonio Huete Jimenez struct thread *cn_td; /* process requesting lookup */ 64*95acdafaSAntonio Huete Jimenez struct ucred *cn_cred; /* credentials */ 65*95acdafaSAntonio Huete Jimenez /* 66*95acdafaSAntonio Huete Jimenez * Shared between lookup and commit routines. 67*95acdafaSAntonio Huete Jimenez */ 68*95acdafaSAntonio Huete Jimenez char *cn_nameptr; /* pointer to looked up name */ 69*95acdafaSAntonio Huete Jimenez long cn_namelen; /* length of looked up component */ 70*95acdafaSAntonio Huete Jimenez long cn_consume; /* chars to consume in lookup() */ 71*95acdafaSAntonio Huete Jimenez int cn_timeout; /* if CNP_CACHETIMEOUT is set, in ticks */ 72*95acdafaSAntonio Huete Jimenez struct vnode *cn_notvp; /* used by NFS to check for collision */ 73*95acdafaSAntonio Huete Jimenez}; 74*95acdafaSAntonio Huete Jimenez.Ed 75*95acdafaSAntonio Huete Jimenez.Pp 76*95acdafaSAntonio Huete JimenezConvert a component of a pathname into a pointer to a locked vnode. 77*95acdafaSAntonio Huete JimenezThis is a very central and rather complicated routine. 78*95acdafaSAntonio Huete JimenezIf the file system is not maintained in a strict tree hierarchy, 79*95acdafaSAntonio Huete Jimenezthis can result in a deadlock situation. 80*95acdafaSAntonio Huete Jimenez.Pp 81*95acdafaSAntonio Huete JimenezThe 82*95acdafaSAntonio Huete Jimenez.Fa cnp->cn_nameiop 83*95acdafaSAntonio Huete Jimenezargument is 84*95acdafaSAntonio Huete Jimenez.Dv NAMEI_LOOKUP , 85*95acdafaSAntonio Huete Jimenez.Dv NAMEI_CREATE , 86*95acdafaSAntonio Huete Jimenez.Dv NAMEI_RENAME , 87*95acdafaSAntonio Huete Jimenezor 88*95acdafaSAntonio Huete Jimenez.Dv NAMEI_DELETE 89*95acdafaSAntonio Huete Jimenezdepending on the intended use of the object. 90*95acdafaSAntonio Huete JimenezWhen 91*95acdafaSAntonio Huete Jimenez.Dv NAMEI_CREATE , 92*95acdafaSAntonio Huete Jimenez.Dv NAMEI_RENAME , 93*95acdafaSAntonio Huete Jimenezor 94*95acdafaSAntonio Huete Jimenez.Dv NAMEI_DELETE 95*95acdafaSAntonio Huete Jimenezis specified, information usable in 96*95acdafaSAntonio Huete Jimenezcreating, renaming, or deleting a directory entry may be calculated. 97*95acdafaSAntonio Huete Jimenez.Pp 98*95acdafaSAntonio Huete JimenezOverall outline of VOP_LOOKUP: 99*95acdafaSAntonio Huete Jimenez.Bd -ragged -offset indent 100*95acdafaSAntonio Huete JimenezCheck accessibility of directory. 101*95acdafaSAntonio Huete JimenezLook for name in cache, if found, then return name. 102*95acdafaSAntonio Huete JimenezSearch for name in directory, goto to found or notfound as appropriate. 103*95acdafaSAntonio Huete Jimenez.Ed 104*95acdafaSAntonio Huete Jimenez.Pp 105*95acdafaSAntonio Huete Jimeneznotfound: 106*95acdafaSAntonio Huete Jimenez.Bd -ragged -offset indent 107*95acdafaSAntonio Huete JimenezIf creating or renaming and at end of pathname, 108*95acdafaSAntonio Huete Jimenezreturn 109*95acdafaSAntonio Huete Jimenez.Er EJUSTRETURN , 110*95acdafaSAntonio Huete Jimenezleaving info on available slots else return 111*95acdafaSAntonio Huete Jimenez.Er ENOENT . 112*95acdafaSAntonio Huete Jimenez.Ed 113*95acdafaSAntonio Huete Jimenez.Pp 114*95acdafaSAntonio Huete Jimenezfound: 115*95acdafaSAntonio Huete Jimenez.Bd -ragged -offset indent 116*95acdafaSAntonio Huete JimenezIf at end of path and deleting, return information to allow delete. 117*95acdafaSAntonio Huete JimenezIf at end of path and renaming, lock target 118*95acdafaSAntonio Huete Jimenezinode and return info to allow rename. 119*95acdafaSAntonio Huete JimenezIf not at end, add name to cache; if at end and neither creating 120*95acdafaSAntonio Huete Jimeneznor deleting, add name to cache. 121*95acdafaSAntonio Huete Jimenez.Ed 122*95acdafaSAntonio Huete Jimenez.Sh LOCKS 123*95acdafaSAntonio Huete JimenezThe directory, 124*95acdafaSAntonio Huete Jimenez.Fa dvp 125*95acdafaSAntonio Huete Jimenezshould be locked on entry. 126*95acdafaSAntonio Huete JimenezIf an error (note: the return value 127*95acdafaSAntonio Huete Jimenez.Er EJUSTRETURN 128*95acdafaSAntonio Huete Jimenezis not considered an error) 129*95acdafaSAntonio Huete Jimenezis detected, it will be returned locked. 130*95acdafaSAntonio Huete JimenezOtherwise, it will be unlocked unless 131*95acdafaSAntonio Huete Jimenez.Dv CNP_LOCKPARENT 132*95acdafaSAntonio Huete Jimenezis specified in 133*95acdafaSAntonio Huete Jimenez.Fa cnp->cn_flags . 134*95acdafaSAntonio Huete JimenezIf an entry is found in the directory, it will be returned locked. 135*95acdafaSAntonio Huete Jimenez.Sh RETURN VALUES 136*95acdafaSAntonio Huete JimenezZero is returned with 137*95acdafaSAntonio Huete Jimenez.Fa *vpp 138*95acdafaSAntonio Huete Jimenezset to the locked vnode of the file if the component is found. 139*95acdafaSAntonio Huete JimenezIf the component being searched for is ".", then the vnode just has 140*95acdafaSAntonio Huete Jimenezan extra reference added to it with 141*95acdafaSAntonio Huete Jimenez.Xr vref 9 . 142*95acdafaSAntonio Huete JimenezThe caller must take care to release the locks appropriately in this 143*95acdafaSAntonio Huete Jimenezcase. 144*95acdafaSAntonio Huete Jimenez.Pp 145*95acdafaSAntonio Huete JimenezIf the component is not found and the operation is 146*95acdafaSAntonio Huete Jimenez.Dv NAMEI_CREATE 147*95acdafaSAntonio Huete Jimenezor 148*95acdafaSAntonio Huete Jimenez.Dv NAMEI_RENAME 149*95acdafaSAntonio Huete Jimenezthe special return value 150*95acdafaSAntonio Huete Jimenez.Er EJUSTRETURN 151*95acdafaSAntonio Huete Jimenezis returned. 152*95acdafaSAntonio Huete JimenezOtherwise, an appropriate error code is returned. 153*95acdafaSAntonio Huete Jimenez.Sh ERRORS 154*95acdafaSAntonio Huete Jimenez.Bl -tag -width Er 155*95acdafaSAntonio Huete Jimenez.It Bq Er ENOTDIR 156*95acdafaSAntonio Huete JimenezThe vnode 157*95acdafaSAntonio Huete Jimenez.Fa dvp 158*95acdafaSAntonio Huete Jimenezdoes not represent a directory. 159*95acdafaSAntonio Huete Jimenez.It Bq Er ENOENT 160*95acdafaSAntonio Huete JimenezThe component 161*95acdafaSAntonio Huete Jimenez.Fa dvp 162*95acdafaSAntonio Huete Jimenezwas not found in this directory. 163*95acdafaSAntonio Huete Jimenez.It Bq Er EACCES 164*95acdafaSAntonio Huete Jimenezaccess for the specified operation is denied. 165*95acdafaSAntonio Huete Jimenez.It Bq Er EJUSTRETURN 166*95acdafaSAntonio Huete Jimeneza 167*95acdafaSAntonio Huete Jimenez.Dv NAMEI_CREATE 168*95acdafaSAntonio Huete Jimenezor 169*95acdafaSAntonio Huete Jimenez.Dv NAMEI_RENAME 170*95acdafaSAntonio Huete Jimenezoperation would be successful 171*95acdafaSAntonio Huete Jimenez.El 172*95acdafaSAntonio Huete Jimenez.Sh SEE ALSO 173*95acdafaSAntonio Huete Jimenez.Xr vnode 9 , 174*95acdafaSAntonio Huete Jimenez.Xr VOP_ACCESS 9 , 175*95acdafaSAntonio Huete Jimenez.Xr VOP_OLD_CREATE 9 , 176*95acdafaSAntonio Huete Jimenez.Xr VOP_OLD_MKDIR 9 , 177*95acdafaSAntonio Huete Jimenez.Xr VOP_OLD_MKNOD 9 , 178*95acdafaSAntonio Huete Jimenez.Xr VOP_OLD_RENAME 9 , 179*95acdafaSAntonio Huete Jimenez.Xr VOP_OLD_SYMLINK 9 180*95acdafaSAntonio Huete Jimenez.Sh HISTORY 181*95acdafaSAntonio Huete JimenezThe function 182*95acdafaSAntonio Huete Jimenez.Nm 183*95acdafaSAntonio Huete Jimenezappeared in 184*95acdafaSAntonio Huete Jimenez.Bx 4.3 . 185*95acdafaSAntonio Huete Jimenez.Sh AUTHORS 186*95acdafaSAntonio Huete JimenezThis man page was written by 187*95acdafaSAntonio Huete Jimenez.An Doug Rabson , 188*95acdafaSAntonio Huete Jimenezwith some text from comments in 189*95acdafaSAntonio Huete Jimenez.Pa sys/vfs/ufs/ufs_lookup.c . 190