xref: /freebsd/share/man/man9/namei.9 (revision 15c3fb05e511e749a54e9aa8470e086b39129130)
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