diff options
author | dfr <dfr@FreeBSD.org> | 1997-03-03 18:01:01 +0000 |
---|---|---|
committer | dfr <dfr@FreeBSD.org> | 1997-03-03 18:01:01 +0000 |
commit | 7e67e1e73230219ea55118f095cc1800faf2c534 (patch) | |
tree | e33dd16a7d9cf5ad26d4f75d4b2d3db1b3d2fdd9 /share/man/man9/VOP_LINK.9 | |
parent | 6c38eceeb9c3076678e4763e02440823894d2323 (diff) | |
download | FreeBSD-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.9 | 124 |
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. |