VINVALBUF(9)

NAME
vinvalbuf - flush and invalidate all buffers associated with a vnode

SYNOPSIS
#include <sys/param.h>
#include <sys/vnode.h>
int
vinvalbuf(struct vnode *vp, int flags, struct ucred *cred, struct proc *p, int slpflag, uint64_t slptimeo);

DESCRIPTION
The vinvalbuf() function invalidates all of the buffers associated with the given vnode. This includes buffers on the clean list and the dirty list. If the V_SAVE flag is specified then the buffers on the dirty list are synced prior to being released. If the V_SAVEMETA flag is set, indirect blocks will not be flushed.

Its arguments are:

vp  A pointer to the vnode whose buffers will be invalidated.

flags
    The supported flags are V_SAVE and V_SAVEMETA. V_SAVE indicates that dirty buffers should be synced with the disk. V_SAVEMETA indicates that indirect blocks should not be flushed.

cred
    The user credentials that are used to VOP_FSYNC(9) buffers if V_SAVE is set.

p   The process responsible for this call.

slpflag
    The slp flag that will be used in the priority of any calls to tsleep_nsec(9) in the function.

slptimeo
    The timeout for any calls to tsleep_nsec(9) in the function.

LOCKS
The vnode is assumed to be locked prior to the call and remains locked upon return.

RETURN VALUES
A value of 0 is returned on success.

PSEUDOCODE

    vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
    error = vinvalbuf(devvp, V_SAVE, cred, p, 0, 0);
    VOP_UNLOCK(devvp);
    if (error)
    	return (error);

ERRORS

[ENOSPC]
    The file system is full. (With V_SAVE)

[EDQUOT]
    Disc quota exceeded. (With V_SAVE)

[EWOULDBLOCK]
    Sleep operation timed out. (See slptimeo)

[ERESTART]
    A signal needs to be delivered and the system call should be restarted. (With PCATCH set in slpflag)

[EINTR]
    The system has been interrupted by a signal. (With PCATCH set in slpflag)

SEE ALSO
tsleep(9), vnode(9)

AUTHORS
This man page was originally written by Chad David <davidc@acns.ab.ca> for FreeBSD.