:man| Alphabetical   Categories   About us 
 
VOP_LINK (9) | Kernel routines | Unix Manual Pages | :man

NAME

VOP_LINK - create a new name for a file

CONTENTS

Synopsis
Description
Locks
Return Values
Pseudocode
Errors
See Also
Authors

SYNOPSIS


.In sys/param.h
.In 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 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.

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, otherwise an error is returned.

PSEUDOCODE


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;
}

ERRORS

[EMLINK]
The file has too many links.
[EPERM]
The file is immutable.
[EXDEV]
A hard link is not possible between different file systems.

SEE ALSO

vn_lock(9), vnode(9)

AUTHORS

 
Created by Blin Media, 2008-2013