File:
[DragonFly] /
src /
share /
man /
man9 /
VOP_LINK.9
Revision
1.4:
download - view:
text,
annotated -
select for diffs
Tue Jun 1 11:36:53 2004 UTC (8 years, 11 months ago) by
hmp
Branches:
MAIN
CVS tags:
HEAD,
DragonFly_Stable,
DragonFly_Snap29Sep2004,
DragonFly_Snap13Sep2004,
DragonFly_RELEASE_1_6_Slip,
DragonFly_RELEASE_1_6,
DragonFly_RELEASE_1_4_Slip,
DragonFly_RELEASE_1_4,
DragonFly_RELEASE_1_2_Slip,
DragonFly_RELEASE_1_2,
DragonFly_1_0_REL,
DragonFly_1_0_RC1,
DragonFly_1_0A_REL
Remove '-*- nroff -*-'.
Lets make a habit not to put editor-related magic into our base
files. They are redundant and useless.
1: .\" Copyright (c) 1996 Doug Rabson
2: .\"
3: .\" All rights reserved.
4: .\"
5: .\" This program is free software.
6: .\"
7: .\" Redistribution and use in source and binary forms, with or without
8: .\" modification, are permitted provided that the following conditions
9: .\" are met:
10: .\" 1. Redistributions of source code must retain the above copyright
11: .\" notice, this list of conditions and the following disclaimer.
12: .\" 2. Redistributions in binary form must reproduce the above copyright
13: .\" notice, this list of conditions and the following disclaimer in the
14: .\" documentation and/or other materials provided with the distribution.
15: .\"
16: .\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
17: .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18: .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19: .\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
20: .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21: .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22: .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23: .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24: .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25: .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26: .\"
27: .\" $FreeBSD: src/share/man/man9/VOP_LINK.9,v 1.9.2.3 2001/12/17 11:30:18 ru Exp $
28: .\" $DragonFly: src/share/man/man9/VOP_LINK.9,v 1.4 2004/06/01 11:36:53 hmp Exp $
29: .\"
30: .Dd July 24, 1996
31: .Os
32: .Dt VOP_LINK 9
33: .Sh NAME
34: .Nm VOP_LINK
35: .Nd create a new name for a file
36: .Sh SYNOPSIS
37: .In sys/param.h
38: .In sys/vnode.h
39: .Ft int
40: .Fn VOP_LINK "struct vnode *dvp" "struct vnode *vp" "struct componentname *cnp"
41: .Sh DESCRIPTION
42: This links a new name in the specified directory to an existing file.
43: .Pp
44: Its arguments are:
45: .Bl -tag -width 8n
46: .It Fa dvp
47: the vnode of the directory
48: .It Fa vp
49: the vnode of the file to be linked
50: .It Fa cnp
51: pathname information about the file
52: .El
53: .Pp
54: The pathname info must be released on exit. The directory and
55: file vnodes should NOT be released on exit.
56: .Sh LOCKS
57: The directory,
58: .Fa dvp
59: is locked on entry and should remain locked on return.
60: The file
61: .Fa vp
62: is not locked on entry and should remain that way on return.
63: If your VOP code locks
64: .Fa vp ,
65: it must be sure to unlock prior to returning.
66: .Sh RETURN VALUES
67: Zero is returned if the file was linked successfully, otherwise an
68: error is returned.
69: .Sh PSEUDOCODE
70: .Bd -literal
71: int
72: vop_link(struct vnode *dvp, struct vnode *vp, struct componentname *cnp)
73: {
74: int error = 0;
75:
76: if (vp->v_mount != dvp->v_mount) {
77: VOP_ABORTOP(dvp, cnp);
78: error = EXDEV;
79: goto out2;
80: }
81: if (vp != dvp && (error = VOP_LOCK(vp))) {
82: VOP_ABORTOP(dvp, cnp);
83: goto out2;
84: }
85:
86: /*
87: * now that we've locked vp, we have to use out1 instead of out2
88: */
89:
90: if (vp would have too many links) {
91: VOP_ABORTOP(dvp, cnp);
92: error = EMLINK;
93: goto out1;
94: }
95:
96: if (vp is immutable) {
97: VOP_ABORTOP(dvp, cnp);
98: error = EPERM;
99: goto out1;
100: }
101:
102: /*
103: * Increment link count of vp and write back the on-disc version of it.
104: */
105: ...;
106:
107: if (!error) {
108: /*
109: * Add the new name to the directory.
110: */
111: ...;
112: }
113:
114: free(cnp->cn_pnbuf, M_NAMEI);
115: out1:
116: if (vp != dvp)
117: VOP_UNLOCK(vp);
118: out2:
119:
120: return error;
121: }
122: .Ed
123: .Sh ERRORS
124: .Bl -tag -width Er
125: .It Bq Er EPERM
126: the file is immutable
127: .El
128: .Sh SEE ALSO
129: .Xr vnode 9 ,
130: .Xr vn_lock 9
131: .Sh AUTHORS
132: This man page was originally written by
133: .An Doug Rabson .