---
name: "VOP_GETATTR"
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_ATTRIB"
---

# VOP\_GETATTR(9)

get and set attributes on a file or directory

Part of [VOP\_ATTRIB(9)](/VOP_ATTRIB/9.md).

## NAME

**VOP\_GETATTR**, **VOP\_SETATTR** – get and set attributes on a file or directory

## SYNOPSIS

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

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

*int*\

**VOP\_GETATTR**(*struct*, *vnode*, *\*vp*, *flags*, *struct*, *vattr*, *\*vap*, *struct*, *ucred*, *\*cred*);

*int*\

**VOP\_SETATTR**(*struct*, *vnode*, *\*vp*, *struct*, *vattr*, *\*vap*, *struct*, *ucred*, *\*cred*);

*int*\

**VOP\_STAT**(*struct*, *vnode*, *\*vp*, *struct*, *stat*, *\*sb*, *flags*, *struct*, *ucred*, *\*active\_cred*, *struct*, *ucred*, *\*file\_cred*);

## DESCRIPTION

These entry points manipulate various attributes of a file or directory, including file permissions, owner, group, size, access time and modification time.

**VOP\_STAT**() returns data in a format suitable for the [stat(2)](/stat/2.md) system call and by default is implemented as a wrapper around **VOP\_GETATTR**(). Filesystems may want to implement their own variant for performance reasons.

For **VOP\_GETATTR**() and **VOP\_SETATTR**() the arguments are:

- *vp*

  The vnode of the file.

- *vap*

  The attributes of the file.

- *cred*

  The user credentials of the calling thread.

For **VOP\_STAT**() the arguments are:

- *vp*

  The vnode of the file.

- *sb*

  The attributes of the file.

- *active\_cred*

  The user credentials of the calling thread.

- *file\_cred*

  The credentials installed on the file description pointing to the vnode or NOCRED.

Attributes which are not being modified by **VOP\_SETATTR**() should be set to the value VNOVAL; **VATTR\_NULL**() may be used to clear all the values, and should generally be used to reset the contents of *\*vap* prior to setting specific values.

## LOCKS

Both **VOP\_GETATTR**() and **VOP\_STAT**() expect the vnode to be locked on entry and will leave the vnode locked on return. The lock type can be either shared or exclusive.

**VOP\_SETATTR**() expects the vnode to be locked on entry and will leave the vnode locked on return. The lock type must be exclusive.

## RETURN VALUES

**VOP\_GETATTR**() returns 0 if it was able to retrieve the attribute data via *\*vap*, otherwise an appropriate error is returned. **VOP\_SETATTR**() returns zero if the attributes were changed successfully, otherwise an appropriate error is returned. **VOP\_STAT**() returns 0 if it was able to retrieve the attribute data *\*sb*, otherwise an appropriate error is returned.

## ERRORS

- \[EPERM\]

  The file is immutable.

- \[EACCES\]

  The caller does not have permission to modify the file or directory attributes.

- \[EROFS\]

  The file system is read-only.

## SEE ALSO

[VFS(9)](/VFS/9.md), [vnode(9)](/vnode/9.md), [VOP\_ACCESS(9)](/VOP_ACCESS/9.md)

## AUTHORS

This manual page was written by Doug Rabson.
