Exemplo n.º 1
0
/*
 * Revalidate the Linux inode from the vnode.
 */
int
vn_revalidate(
	struct vnode	*vp)
{
	vattr_t		va;
	int		error;

	vn_trace_entry(vp, "vn_revalidate", (inst_t *)__return_address);
	ASSERT(vp->v_fbhv != NULL);

	va.va_mask = XFS_AT_STAT|XFS_AT_XFLAGS;
	VOP_GETATTR(vp, &va, 0, NULL, error);
	if (!error) {
		vn_revalidate_core(vp, &va);
		VUNMODIFY(vp);
	}
	return -error;
}
/*
 * Revalidate the Linux inode from the vnode.
 */
int
vn_revalidate(
	struct vnode	*vp)
{
	struct inode	*inode;
	vattr_t		va;
	int		error;

	vn_trace_entry(vp, "vn_revalidate", (inst_t *)__return_address);
	ASSERT(vp->v_fbhv != NULL);

	va.va_mask = XFS_AT_STAT|XFS_AT_XFLAGS;
	VOP_GETATTR(vp, &va, 0, NULL, error);
	if (!error) {
		inode = LINVFS_GET_IP(vp);
		inode->i_mode	    = VTTOIF(va.va_type) | va.va_mode;
		inode->i_nlink	    = va.va_nlink;
		inode->i_uid	    = va.va_uid;
		inode->i_gid	    = va.va_gid;
		inode->i_blocks	    = va.va_nblocks;
		inode->i_mtime	    = va.va_mtime;
		inode->i_ctime	    = va.va_ctime;
		inode->i_atime	    = va.va_atime;
		if (va.va_xflags & XFS_XFLAG_IMMUTABLE)
			inode->i_flags |= S_IMMUTABLE;
		else
			inode->i_flags &= ~S_IMMUTABLE;
		if (va.va_xflags & XFS_XFLAG_APPEND)
			inode->i_flags |= S_APPEND;
		else
			inode->i_flags &= ~S_APPEND;
		if (va.va_xflags & XFS_XFLAG_SYNC)
			inode->i_flags |= S_SYNC;
		else
			inode->i_flags &= ~S_SYNC;
		if (va.va_xflags & XFS_XFLAG_NOATIME)
			inode->i_flags |= S_NOATIME;
		else
			inode->i_flags &= ~S_NOATIME;
		VUNMODIFY(vp);
	}
	return -error;
}