VOP_LINK -- create a new name for a file
#include <sys/param.h>
#include <sys/vnode.h>
int
VOP_LINK(struct vnode *dvp, struct vnode *vp, struct componentname *cnp);
This links a new name in the specified directory to an existing 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 released on
exit.
VOP_LINK() expects the directory and file vnodes to be locked on entry
and will leave the vnodes locked on return.
Zero is returned if the file was linked successfully, otherwise an error
is returned.
int
vop_link(struct vnode *dvp, struct vnode *vp, struct componentname *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-disc version of it.
*/
...;
if (!error) {
/*
* Add the new name to the directory.
*/
...;
}
return error;
}
[EMLINK] The file has too many links.
[EPERM] The file is immutable.
[EXDEV] A hard link is not possible between different file
systems.
vnode(9), vn_lock(9)
This man page was originally written by Doug Rabson.
FreeBSD 5.2.1 July 24, 1996 FreeBSD 5.2.1 [ Back ] |