VOP_REMOVE(9)

HOME || NAME SYNOPSIS DESCRIPTION LOCKS RETURN VALUES PSEUDOCODE ERRORS SEE ALSO AUTHORS
NAME
     VOP_REMOVE, VOP_RMDIR -- remove a file or directory
SYNOPSIS
     #include <sys/param.h>
     #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 remain locked on return.
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]	An attempt was made to remove a directory which is not
			empty.
SEE ALSO
     vnode(9), VOP_LOOKUP(9)
AUTHORS
     This man page was written by Doug Rabson.