---
name: "VOP_RENAME"
section: "9"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/VOP_RENAME"
---

# VOP\_RENAME(9)

rename a file

## NAME

**VOP\_RENAME** – rename a file

## SYNOPSIS

**#include \<sys/param.h\>**

**#include \<sys/vnode.h\>**

*int*\

**VOP\_RENAME**(*struct vnode \*fdvp*, *struct vnode \*fvp*, *struct componentname \*fcnp*, *struct vnode \*tdvp*, *struct vnode \*tvp*, *struct componentname \*tcnp*);

## DESCRIPTION

This renames a file and possibly changes its parent directory. If the destination object exists, it will be removed first.

Its arguments are:

- *fdvp*

  The vnode of the old parent directory.

- *fvp*

  The vnode of the file to be renamed.

- *fcnp*

  Pathname information about the file's current name.

- *tdvp*

  The vnode of the new parent directory.

- *tvp*

  The vnode of the target file (if it exists).

- *tcnp*

  Pathname information about the file's new name.

## LOCKS

The source directory and file are unlocked but are expected to have their ref count bumped on entry. The VOP routine is expected to [vrele(9)](/vrele/9.md) both prior to returning.

The destination directory and file are locked as well as having their ref count bumped. The VOP routine is expected to [vput(9)](/vput/9.md) both prior to returning.

## ERRORS

- \[EPERM\]

  The file is immutable.

- \[EXDEV\]

  It is not possible to rename a file between different file systems.

- \[EINVAL\]

  An attempt was made to rename *.* or *..*, or to perform an operation which would break the directory tree structure.

- \[ENOTDIR\]

  An attempt was made to rename a directory to a file or vice versa.

- \[ENOTEMPTY\]

  An attempt was made to remove a directory which is not empty.

## SEE ALSO

[vnode(9)](/vnode/9.md)

## AUTHORS

This manual page was written by Doug Rabson.
