XFSDEB(XDEBMSG, ("cache_handle = '%s'\n", tmp));
XFSDEB(XDEBMSG, ("cache_name = '%s'\n", message->cache_name)); XFSDEB(XDEBMSG, ("fileno = %ld, gen = %ld\n", SCARG(fh_args, fileid), SCARG(fh_args, gen)));
xfs_message_installdata(int fd,			struct xfs_message_installdata *message,			u_int size,			struct proc *p){	struct xfs_node	*t;	int		error = 0;	XFSDEB(XDEBMSG, ("xfs_message_installdata\n"));	t = xfs_node_find(&xfs[fd], &message->node.handle);	if (t != NULL) {		struct nameidata	nd;		char			tmp[CACHEHANDLESIZE + 1];		struct vnode		*vp;		bcopy((char *) &message->cache_handle.data, tmp, sizeof(tmp));		tmp[CACHEHANDLESIZE] = '\0';		XFSDEB(XDEBMSG, ("cache_handle = '%s'\n", tmp));		NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, tmp, p);		error = namei(&nd);		vp = nd.ni_vp;		if (error == 0) {			if (DATA_FROM_XNODE(t))				vrele(DATA_FROM_XNODE(t));			VOP_UNLOCK(vp, 0, p);			DATA_FROM_XNODE(t) = vp;			XFSDEB(XDEBMSG,			       ("xfs_message_installdata: t= %p tokens= %x\n",				t, message->node.tokens));			t->tokens = message->node.tokens;			xfs_attr2vattr(&message->node.attr, &t->attr);			if (XNODE_TO_VNODE(t)->v_type == VDIR)				cache_purge (XNODE_TO_VNODE(t));			bcopy(message->node.id, t->id, sizeof(t->id));			bcopy(message->node.rights, t->rights,			      sizeof(t->rights));			t->anonrights = message->node.anonrights;		} else {			printf("XFS WARNING! xfs_message_installdata fail!\n");			printf("Reason: lookup failed on cache file '%s', "			       "error = %d\n", tmp, error);		}	} else {		printf("XFS WARNING! xfs_message_installdata failed\n");		printf("Reason: No node to install the data into!\n");		error = ENOENT;	}	return error;}