VOP_REMOVE(9)

NAME
VOP_REMOVE, VOP_RMDIR - remove a file or directory

SYNOPSIS
#include <sys/vnode.h>
int
VOP_REMOVE(struct vnode *dvp, struct vnode *vp, struct componentname *cnp);
int
VOP_RMDIR(struct vnode *dvp, struct vnode *vp, struct componentname *cnp);

DESCRIPTION
These entry points remove files and directories respectively.

The arguments are:

dvp the vnode of the directory

vp  the vnode of the file to be removed

cnp pathname information about the file

LOCKS
Both dvp and vp should be locked on entry and are unlocked and released on exit.

RETURN VALUES
Zero is returned on success, otherwise an error code is returned.

PSEUDOCODE

    int
    vop_remove(struct vnode *dvp, struct vnode *vp, struct componentname *cnp)
    {
        int error = 0;
        if (vp is immutable) {
    	error = EPERM;
    	goto out;
        }
        /*
         * Remove name cnp->cn_nameptr from directory and update link count
         * of vp.
         */
        ...;
        /*
         * Careful about trying to remove ".".  XXX this should be handled
         * higher up.
         */
        if (dvp == vp)
    	vrele(vp);
        else
    	vput(vp);
        vput(dvp);
        return error;
    }

ERRORS

[EPERM]
    the file is immutable

[ENOTEMPTY]
    attempt to remove a directory which is not empty

SEE ALSO
vnode(9), VOP_LOOKUP(9)

AUTHORS
This man page was written by Doug Rabson.