vop_link(9)
NAME
VOP_LINK - create a new name for a file
SYNOPSIS
#include <sys/param.h> #include <sys/vnode.h> int VOP_LINK(struct vnode *dvp, struct vnode *vp, struct componentname *cnp);
DESCRIPTION
- This links a new name in the specified directory to an ex
- isting file.
- Its arguments are:
- dvp The vnode of the directory.
- vp The vnode of the file to be linked.
- cnp Pathname information about the file.
- The pathname info should not be released on exit because it
- is done by
the caller. The directory and file vnodes should not be re - leased on
exit.
LOCKS
- VOP_LINK() expects the directory and file vnodes to be
- locked on entry
and will leave the vnodes locked on return.
RETURN VALUES
- Zero is returned if the file was linked successfully, other
- wise an error
is returned.
PSEUDOCODE
- int
vop_link(struct vnode *dvp, struct vnode *vp, struct compo - nentname *cnp)
{ - int error = 0;
- if (vp->v_mount != dvp->v_mount)
return (EXDEV);
- if (vp would have too many links)
return (EMLINK);
- if (vp is immutable)
return (EPERM);
- /*
* Increment link count of vp and write back the on-discversion of it.
*/ - ...;
- if (!error) {
/** Add the new name to the directory.
*/...; - }
- return error;
- }
ERRORS
[EMLINK] The file has too many links.
[EPERM] The file is immutable.
- [EXDEV] A hard link is not possible between dif
- ferent file
- systems.
SEE ALSO
AUTHORS
- This manual page was originally written by Doug Rabson.
- BSD July 24, 1996