VOP_GETATTR
, VOP_SETATTR
—
get and set attributes on a file or directory
#include <sys/param.h>
#include <sys/vnode.h>
int
VOP_GETATTR
(struct
vnode *vp, 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, struct ucred
*active_cred, struct
ucred *file_cred, struct
thread *td);
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)
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.
- td
- The calling thread.
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.
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.
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.
- [
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.
This manual page was written by Doug Rabson.