1c78f3f0dSEivind Eklund.\" 29a8fa3c1SEivind Eklund.\" Copyright (c) 1998, 1999 Eivind Eklund 315c3fb05SHiten Pandya.\" Copyright (c) 2003, Hiten M. Pandya 4c78f3f0dSEivind Eklund.\" 5c78f3f0dSEivind Eklund.\" All rights reserved. 6c78f3f0dSEivind Eklund.\" 7c78f3f0dSEivind Eklund.\" This program is free software. 8c78f3f0dSEivind Eklund.\" 9c78f3f0dSEivind Eklund.\" Redistribution and use in source and binary forms, with or without 10c78f3f0dSEivind Eklund.\" modification, are permitted provided that the following conditions 11c78f3f0dSEivind Eklund.\" are met: 12c78f3f0dSEivind Eklund.\" 1. Redistributions of source code must retain the above copyright 13c78f3f0dSEivind Eklund.\" notice, this list of conditions and the following disclaimer. 14c78f3f0dSEivind Eklund.\" 2. Redistributions in binary form must reproduce the above copyright 15c78f3f0dSEivind Eklund.\" notice, this list of conditions and the following disclaimer in the 16c78f3f0dSEivind Eklund.\" documentation and/or other materials provided with the distribution. 17c78f3f0dSEivind Eklund.\" 18c78f3f0dSEivind Eklund.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR 19c78f3f0dSEivind Eklund.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20c78f3f0dSEivind Eklund.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21c78f3f0dSEivind Eklund.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, 22c78f3f0dSEivind Eklund.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 23c78f3f0dSEivind Eklund.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24c78f3f0dSEivind Eklund.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25c78f3f0dSEivind Eklund.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26c78f3f0dSEivind Eklund.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27c78f3f0dSEivind Eklund.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28c78f3f0dSEivind Eklund.\" 29c78f3f0dSEivind Eklund.\" 30c78f3f0dSEivind Eklund.\" If you integrate this manpage in another OS, I'd appreciate a note 31e87b9f28SJeroen Ruigrok van der Werven.\" - eivind@FreeBSD.org 32c78f3f0dSEivind Eklund.\" 337f3dea24SPeter Wemm.\" $FreeBSD$ 34c78f3f0dSEivind Eklund.\" 3515c3fb05SHiten Pandya.Dd May 27, 2003 36c78f3f0dSEivind Eklund.Os 37def37e7cSMike Pritchard.Dt NAMEI 9 38c78f3f0dSEivind Eklund.Sh NAME 39c78f3f0dSEivind Eklund.Nm namei , 4015c3fb05SHiten Pandya.Nm NDINIT , 4115c3fb05SHiten Pandya.Nm NDFREE 4215c3fb05SHiten Pandya.Nd pathname translation and lookup operations 43c78f3f0dSEivind Eklund.Sh SYNOPSIS 44f16b3c0dSChad David.In sys/param.h 45f16b3c0dSChad David.In sys/proc.h 4632eef9aeSRuslan Ermilov.In sys/namei.h 47c78f3f0dSEivind Eklund.Ft int 48c78f3f0dSEivind Eklund.Fn namei "struct nameidata *ndp" 49c78f3f0dSEivind Eklund.Ft void 5015c3fb05SHiten Pandya.Fn NDINIT "struct nameidata *ndp" "u_long op" "u_long flags" "enum uio_seg segflg" "const char *namep" "struct thread *td" 51eac993bcSBruce Evans.Ft void 5215c3fb05SHiten Pandya.Fn NDFREE "struct nameidata *ndp" "const uint flags" 53c78f3f0dSEivind Eklund.Sh DESCRIPTION 5460dca836SPhilippe CharnierThe 5515c3fb05SHiten Pandya.Nm 5615c3fb05SHiten Pandyafacility allows the client to perform pathname translation and lookup 5715c3fb05SHiten Pandyaoperations. 5815c3fb05SHiten PandyaThe 5915c3fb05SHiten Pandya.Nm 6015c3fb05SHiten Pandyafunctions will increment the reference count for the vnode in question. 6115c3fb05SHiten PandyaThe reference count has to be decremented after use of the vnode, by 6215c3fb05SHiten Pandyausing either 63c78f3f0dSEivind Eklund.Xr vrele 9 64c78f3f0dSEivind Eklundor 65c78f3f0dSEivind Eklund.Xr vput 9 , 6615c3fb05SHiten Pandyadepending on whether you specified the 6715c3fb05SHiten Pandya.Dv LOCKLEAF 6815c3fb05SHiten Pandyaflag or not. 69c78f3f0dSEivind Eklund.Pp 7015c3fb05SHiten PandyaThe 7115c3fb05SHiten Pandya.Fn NDINIT 7215c3fb05SHiten Pandyafunction is used to initialize 7315c3fb05SHiten Pandya.Nm 7415c3fb05SHiten Pandyacomponents. 75c78f3f0dSEivind EklundIt takes the following arguments: 76c78f3f0dSEivind Eklund.Pp 7715c3fb05SHiten Pandya.Bl -tag -width segflg 7815c3fb05SHiten Pandya.It Fa ndp 7915c3fb05SHiten PandyaThe 8015c3fb05SHiten Pandya.Vt "struct nameidata" 8115c3fb05SHiten Pandyato initialize. 8215c3fb05SHiten Pandya.It Fa op 8315c3fb05SHiten PandyaThe operation which 84c78f3f0dSEivind Eklund.Fn namei 8515c3fb05SHiten Pandyawill perform. 8615c3fb05SHiten PandyaThe following operations are valid: 87c78f3f0dSEivind Eklund.Dv LOOKUP , 88c78f3f0dSEivind Eklund.Dv CREATE , 89c78f3f0dSEivind Eklund.Dv DELETE , 90c78f3f0dSEivind Eklundand 91c78f3f0dSEivind Eklund.Dv RENAME . 92c78f3f0dSEivind EklundThe latter three are just setup for those 93c78f3f0dSEivind Eklundeffects; just calling 94c78f3f0dSEivind Eklund.Fn namei 95c78f3f0dSEivind Eklundwill not result in 96c78f3f0dSEivind Eklund.Fn VOP_RENAME 97c78f3f0dSEivind Eklundbeing called. 9815c3fb05SHiten Pandya.It Fa flags 9915c3fb05SHiten PandyaOperation flags. 10015c3fb05SHiten PandyaSeveral of these can be effective at the same time. 10115c3fb05SHiten Pandya.It Fa segflg 10215c3fb05SHiten PandyaUIO segment indicator. 10315c3fb05SHiten PandyaThis indicates if the name of the object is in userspace 10415c3fb05SHiten Pandya.Pq Dv UIO_USERSPACE 10515c3fb05SHiten Pandyaor in the kernel address space 10615c3fb05SHiten Pandya.Pq Dv UIO_SYSSPACE . 10715c3fb05SHiten Pandya.It Fa namep 10815c3fb05SHiten PandyaPointer to the component's pathname buffer 10915c3fb05SHiten Pandya.Pq the file or directory name that will be looked up . 11015c3fb05SHiten Pandya.It Fa td 11115c3fb05SHiten PandyaThe thread context to use for 11215c3fb05SHiten Pandya.Nm 11315c3fb05SHiten Pandyaoperations and locks. 114c78f3f0dSEivind Eklund.El 115c78f3f0dSEivind Eklund.Sh NAMEI OPERATION FLAGS 11660dca836SPhilippe CharnierThe 117c78f3f0dSEivind Eklund.Fn namei 11815c3fb05SHiten Pandyafunction takes the following set of 11915c3fb05SHiten Pandya.Dq operation flags 12015c3fb05SHiten Pandyathat influence its operation: 121c78f3f0dSEivind Eklund.Bl -tag -width WANTPARENT 122c78f3f0dSEivind Eklund.It Dv LOCKLEAF 12315c3fb05SHiten PandyaLock vnode on return. 12415c3fb05SHiten PandyaThis is a full lock of the vnode; you'll have to use 125c78f3f0dSEivind Eklund.Xr VOP_UNLOCK 9 126c78f3f0dSEivind Eklundto release the lock (or use 127c78f3f0dSEivind Eklund.Xr vput 9 128c78f3f0dSEivind Eklundto release the lock and do a 129c78f3f0dSEivind Eklund.Xr vrele 9 , 130c78f3f0dSEivind Eklundall in one). 131c78f3f0dSEivind Eklund.It Dv LOCKPARENT 13215c3fb05SHiten PandyaThis flag lets the 133c78f3f0dSEivind Eklund.Fn namei 13415c3fb05SHiten Pandyafunction return the parent (directory) vnode, 13515c3fb05SHiten Pandya.Va ni_dvp 13615c3fb05SHiten Pandyain locked state, unless it is identical to 13715c3fb05SHiten Pandya.Va ni_vp , 13815c3fb05SHiten Pandyain which case 13915c3fb05SHiten Pandya.Va ni_dvp 14015c3fb05SHiten Pandyais not locked per se (but may be locked due to 14115c3fb05SHiten Pandya.Dv LOCKLEAF ). 14215c3fb05SHiten PandyaIf a lock is enforced, it should be released using 143c78f3f0dSEivind Eklund.Xr vput 9 144c78f3f0dSEivind Eklundor 145c78f3f0dSEivind Eklund.Xr VOP_UNLOCK 9 146c78f3f0dSEivind Eklundand 14715c3fb05SHiten Pandya.Xr vrele 9 . 148c78f3f0dSEivind Eklund.It Dv WANTPARENT 14915c3fb05SHiten PandyaThis flag allows the 150c78f3f0dSEivind Eklund.Fn namei 15115c3fb05SHiten Pandyafunction to return the parent (directory) vnode in an unlocked state. 15215c3fb05SHiten PandyaThe parent vnode must be released separately by using 15315c3fb05SHiten Pandya.Xr vrele 9 . 154c78f3f0dSEivind Eklund.It Dv NOCACHE 155c78f3f0dSEivind EklundAvoid 156c78f3f0dSEivind Eklund.Fn namei 157c78f3f0dSEivind Eklundcreating this entry in the namecache if it is not 158c78f3f0dSEivind Eklundalready present. Normally 159c78f3f0dSEivind Eklund.Fn namei 160c78f3f0dSEivind Eklundwill add entries to the name cache 161c78f3f0dSEivind Eklundif they're not already there. 162c78f3f0dSEivind Eklund.It Dv FOLLOW 163c78f3f0dSEivind EklundWith this flag, 164c78f3f0dSEivind Eklund.Fn namei 165c78f3f0dSEivind Eklundwill follow the symbolic link if the last part 166c78f3f0dSEivind Eklundof the path supplied is a symbolic link (i.e., it will return a vnode 167c78f3f0dSEivind Eklundfor whatever the link points at, instead for the link itself). 168c78f3f0dSEivind Eklund.It Dv NOOBJ 169c78f3f0dSEivind EklundDo not call 170c78f3f0dSEivind Eklund.Fn vfs_object_create 17115c3fb05SHiten Pandyafor the returned vnode, even though it meets required criteria for VM support. 172c78f3f0dSEivind Eklund.It Dv NOFOLLOW 1739a8fa3c1SEivind EklundDo not follow symbolic links (pseudo). 1749a8fa3c1SEivind EklundThis flag is not looked for by the actual code, which looks for 17515c3fb05SHiten Pandya.Dv FOLLOW . 17615c3fb05SHiten Pandya.Dv NOFOLLOW 17715c3fb05SHiten Pandyais used to indicate to the source code reader that symlinks 1789a8fa3c1SEivind Eklundare intentionally not followed. 179060c42c3SRobert Watson.It Dv SAVENAME 18015c3fb05SHiten PandyaDo not free the pathname buffer at the end of the 181060c42c3SRobert Watson.Fn namei 182060c42c3SRobert Watsoninvocation, instead free it later in 183060c42c3SRobert Watson.Fn NDFREE 18415c3fb05SHiten Pandyaso that the caller may access the pathname buffer. 185060c42c3SRobert WatsonSee below for details. 186060c42c3SRobert Watson.It Dv SAVESTART 187060c42c3SRobert WatsonRetain an additional reference to the parent directory; do not free 18815c3fb05SHiten Pandyathe pathname buffer. 189060c42c3SRobert WatsonSee below for details. 190c78f3f0dSEivind Eklund.El 1919a8fa3c1SEivind Eklund.Sh ALLOCATED ELEMENTS 19215c3fb05SHiten PandyaThe 19315c3fb05SHiten Pandya.Vt nameidata 19415c3fb05SHiten Pandyastructure is composed of the following fields: 19515c3fb05SHiten Pandya.Bl -tag -width ni_cnd.cn_pnbuf 19615c3fb05SHiten Pandya.It Va ni_startdir 1979a8fa3c1SEivind EklundIn the normal case, this is either the current directory or the root. 1989a8fa3c1SEivind EklundIt is the current directory if the name passed in doesn't start with / 1999a8fa3c1SEivind Eklundand we have not gone through any symlinks with an absolute path, and 2009a8fa3c1SEivind Eklundthe root otherwise. 2013136363fSRuslan Ermilov.Pp 2029e28aca5SDima DorfmanIn this case, it is only used by 2039e28aca5SDima Dorfman.Fn lookup , 2049e28aca5SDima Dorfmanand should not be 2059e28aca5SDima Dorfmanconsidered valid after a call to 2069e28aca5SDima Dorfman.Fn namei . 20715c3fb05SHiten PandyaIf 20815c3fb05SHiten Pandya.Dv SAVESTART 20915c3fb05SHiten Pandyais set, this is set to the same as 21015c3fb05SHiten Pandya.Va ni_dvp , 21115c3fb05SHiten Pandyawith an extra 21215c3fb05SHiten Pandya.Xr vref 9 . 21315c3fb05SHiten PandyaTo block 21415c3fb05SHiten Pandya.Fn NDFREE 21515c3fb05SHiten Pandyafrom releasing 21615c3fb05SHiten Pandya.Va ni_startdir , 21715c3fb05SHiten Pandyathe 21815c3fb05SHiten Pandya.Dv NDF_NO_STARTDIR_RELE 21915c3fb05SHiten Pandyacan be set. 22015c3fb05SHiten Pandya.It Va ni_dvp 22115c3fb05SHiten PandyaVnode pointer to directory of the object on which lookup is performed. 22215c3fb05SHiten PandyaThis is available on successful return if 22315c3fb05SHiten Pandya.Dv LOCKPARENT 22415c3fb05SHiten Pandyaor 22515c3fb05SHiten Pandya.Dv WANTPARENT 22615c3fb05SHiten Pandyais set. 22715c3fb05SHiten PandyaIt is locked if 22815c3fb05SHiten Pandya.Dv LOCKPARENT 22915c3fb05SHiten Pandyais set. 23015c3fb05SHiten PandyaFreeing this in 23115c3fb05SHiten Pandya.Dv NDFREE 23215c3fb05SHiten Pandyacan be inhibited by 23315c3fb05SHiten Pandya.Dv NDF_NO_DVP_RELE , 23415c3fb05SHiten Pandya.Dv NDF_NO_DVP_PUT , 23515c3fb05SHiten Pandyaor 23615c3fb05SHiten Pandya.Dv NDF_NO_DVP_UNLOCK 2379a8fa3c1SEivind Eklund(with the obvious effects). 23815c3fb05SHiten Pandya.It Va ni_vp 23915c3fb05SHiten PandyaVnode pointer to the resulting object, 24015c3fb05SHiten Pandya.Dv NULL 24115c3fb05SHiten Pandyaotherwise. 24215c3fb05SHiten PandyaThe 24315c3fb05SHiten Pandya.Va v_usecount 24415c3fb05SHiten Pandyafield of this vnode is incremented. 24515c3fb05SHiten PandyaIf 24615c3fb05SHiten Pandya.Dv LOCKLEAF 24715c3fb05SHiten Pandyais set, it is also locked. 2483136363fSRuslan Ermilov.Pp 24915c3fb05SHiten PandyaFreeing this in 25015c3fb05SHiten Pandya.Fn NDFREE 25115c3fb05SHiten Pandyacan be inhibited by 25215c3fb05SHiten Pandya.Dv NDF_NO_VP_RELE , 25315c3fb05SHiten Pandya.Dv NDF_NO_VP_PUT , 25415c3fb05SHiten Pandyaor 25515c3fb05SHiten Pandya.Dv NDF_NO_VP_UNLOCK 25615c3fb05SHiten Pandya.Pq with the obvious effects . 25715c3fb05SHiten Pandya.It Va ni_cnd.cn_pnbuf 25815c3fb05SHiten PandyaThe pathname buffer contains the location of the file or directory 25915c3fb05SHiten Pandyathat will be used by the 26015c3fb05SHiten Pandya.Nm 26115c3fb05SHiten Pandyaoperations. 26215c3fb05SHiten PandyaIt is managed by the 26315c3fb05SHiten Pandya.Xr uma 9 26415c3fb05SHiten Pandyazone allocation interface. 26515c3fb05SHiten PandyaIf the 26615c3fb05SHiten Pandya.Dv SAVESTART 26715c3fb05SHiten Pandyaor 26815c3fb05SHiten Pandya.Dv SAVENAME 26915c3fb05SHiten Pandyaflag is set, then the pathname buffer is available 27015c3fb05SHiten Pandyaafter calling the 27115c3fb05SHiten Pandya.Nm namei 27215c3fb05SHiten Pandyafunction. 2733136363fSRuslan Ermilov.Pp 27415c3fb05SHiten PandyaTo only deallocate resources used by the pathname buffer, 27515c3fb05SHiten Pandya.Va ni_cnd.cn_pnbuf , 27615c3fb05SHiten Pandyathen 27715c3fb05SHiten Pandya.Dv NDF_ONLY_PNBUF 27815c3fb05SHiten Pandyaflag can be passed to the 27915c3fb05SHiten Pandya.Fn NDFREE 28015c3fb05SHiten Pandyafunction. 28115c3fb05SHiten PandyaTo keep the pathname buffer intact, 28215c3fb05SHiten Pandyathe 28315c3fb05SHiten Pandya.Dv ND_NO_FREE_PNBUF 28415c3fb05SHiten Pandyaflag can be passed to the 28515c3fb05SHiten Pandya.Fn NDFREE 28615c3fb05SHiten Pandyafunction. 2873136363fSRuslan Ermilov.El 28815c3fb05SHiten Pandya.Sh FILES 289e1e5fdf6SAlexey Zelkin.Pa src/sys/kern/vfs_lookup.c 29015c3fb05SHiten Pandya.Sh SEE ALSO 29115c3fb05SHiten Pandya.Xr uio 9 , 29215c3fb05SHiten Pandya.Xr uma 9 , 29315c3fb05SHiten Pandya.Xr VFS 9 , 29415c3fb05SHiten Pandya.Xr vnode 9 , 29515c3fb05SHiten Pandya.Xr vput 9 , 29615c3fb05SHiten Pandya.Xr vref 9 297c78f3f0dSEivind Eklund.Sh AUTHORS 29815c3fb05SHiten PandyaThis manual page was written by 29915c3fb05SHiten Pandya.An Eivind Eklund Aq eivind@FreeBSD.ORG 30015c3fb05SHiten Pandyaand later significantly revised by 30115c3fb05SHiten Pandya.An Hiten M. Pandya Aq hmp@FreeBSD.ORG . 30215c3fb05SHiten Pandya.Sh BUGS 30315c3fb05SHiten PandyaThe 30415c3fb05SHiten Pandya.Dv LOCKPARENT 30515c3fb05SHiten Pandyaflag does not always result in the parent vnode being locked. 30615c3fb05SHiten PandyaThis results in complications when the 30715c3fb05SHiten Pandya.Dv LOCKPARENT 30815c3fb05SHiten Pandyais used. 30915c3fb05SHiten PandyaIn order to solve this for the cases where both 31015c3fb05SHiten Pandya.Dv LOCKPARENT 31115c3fb05SHiten Pandyaand 31215c3fb05SHiten Pandya.Dv LOCKLEAF 31315c3fb05SHiten Pandyaare used, it is necessary to resort to recursive locking. 314