summaryrefslogtreecommitdiffstats
path: root/share/man/man9/VOP_LINK.9
diff options
context:
space:
mode:
authordfr <dfr@FreeBSD.org>1997-03-03 18:01:01 +0000
committerdfr <dfr@FreeBSD.org>1997-03-03 18:01:01 +0000
commit7e67e1e73230219ea55118f095cc1800faf2c534 (patch)
treee33dd16a7d9cf5ad26d4f75d4b2d3db1b3d2fdd9 /share/man/man9/VOP_LINK.9
parent6c38eceeb9c3076678e4763e02440823894d2323 (diff)
downloadFreeBSD-src-7e67e1e73230219ea55118f095cc1800faf2c534.zip
FreeBSD-src-7e67e1e73230219ea55118f095cc1800faf2c534.tar.gz
This is the current draft of my filesystem manpages. Some files are
incomplete and some are just placeholders but I wanted to try to get something at least into 2.2 on the grounds that what I have is a lot better than nothing. I also wanted to commit something which documents the interfaces in 2.2 before I start updating the documentation for 3.0. This is a definite 2.2 candidate and is also relavent to 2.1 if people still care about that branch.
Diffstat (limited to 'share/man/man9/VOP_LINK.9')
-rw-r--r--share/man/man9/VOP_LINK.9124
1 files changed, 124 insertions, 0 deletions
diff --git a/share/man/man9/VOP_LINK.9 b/share/man/man9/VOP_LINK.9
new file mode 100644
index 0000000..ecac98f
--- /dev/null
+++ b/share/man/man9/VOP_LINK.9
@@ -0,0 +1,124 @@
+.\" -*- nroff -*-
+.\"
+.\" Copyright (c) 1996 Doug Rabson
+.\"
+.\" All rights reserved.
+.\"
+.\" This program is free software.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
+.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.\" $Id$
+.\"
+.Dd July 24, 1996
+.Os
+.Dt VOP_LINK 9
+.Sh NAME
+.Nm VOP_LINK
+.Nd create a new name for a file
+.Sh SYNOPSIS
+.Fd #include <sys/vnode.h>
+.Ft int
+.Fn VOP_LINK "struct vnode *dvp" "struct vnode *vp" "struct componentname *cnp"
+.Sh DESCRIPTION
+This links a new name in the specified directory to an existing file.
+.Pp
+Its arguments are:
+.Bl -tag -width 8X
+.It Ar dvp
+the vnode of the directory
+.It At vp
+the vnode of the file to be linked
+.It Ar cnp
+pathname information about the file
+.El
+.Pp
+The directory vnode is unlocked and released on exit.
+.Sh LOCKS
+The directory,
+.Fa dvp
+should be locked on entry and will be unlocked and released on exit.
+The file
+.Fa vp
+should not be locked.
+.Sh RETURN VALUES
+Zero is returned if the file was linked successfully, otherwise an
+error is returned.
+.Sh PSEUDOCODE
+.Bd -literal
+int
+vop_link(struct vnode *dvp, struct vnode *vp, struct componentname *cnp)
+{
+ int error = 0;
+
+ if (vp->v_mount != dvp->v_mount) {
+ VOP_ABORTOP(dvp, cnp);
+ error = EXDEV;
+ goto out2;
+ }
+ if (vp != dvp && (error = VOP_LOCK(vp))) {
+ VOP_ABORTOP(dvp, cnp);
+ goto out2;
+ }
+
+ if (vp would have too many links) {
+ VOP_ABORTOP(dvp, cnp);
+ error = EMLINK;
+ goto out1;
+ }
+
+ if (vp is immutable) {
+ VOP_ABORTOP(dvp, cnp);
+ error = EPERM;
+ goto out1;
+ }
+
+ /*
+ * Increment link count of vp and write back the on-disc version of it.
+ */
+ ...;
+
+ if (!error) {
+ /*
+ * Add the new name to the directory.
+ */
+ ...;
+ }
+
+ free(cnp->cn_pnbuf, M_NAMEI);
+out1:
+ if (vp != dvp)
+ VOP_UNLOCK(vp);
+out2:
+ vput(dvp);
+
+ return error;
+}
+.Ed
+.Sh ERRORS
+.Bl -tag -width EPERM
+.It Bq Er EPERM
+the file is immutable
+.El
+.Sh SEE ALSO
+.Xr vnode 9
+.Sh AUTHORS
+This man page was written by Doug Rabson.
OpenPOWER on IntegriCloud