---
name: "VOP_RENAME"
section: "9freebsd"
platform: "linux"
package: "freebsd-manpages"
version: "12.2-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/VOP_RENAME/9freebsd"
---

# VOP\_RENAME(9freebsd)

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.
