---
name: "VOP_RMDIR"
section: "9"
platform: "linux"
package: "freebsd-manpages"
version: "6.0-5"
release: "Debian 4.0 (Etch)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/VOP_RMDIR"
---

# VOP\_RMDIR(9)

remove a file or directory

## 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)](/vnode/9.md), [VOP\_LOOKUP(9)](/VOP_LOOKUP/9.md)

## AUTHORS

This manual page was written by Doug Rabson.
