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 (10 years, 2 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 .