res = cm_lookup (*dirfid, h->name, &fid, &ce); if (res.res == 0) { res = cm_getattr (fid, &status, &real_fid, ce, &ae); if (res.res == 0) { fcacheentry2xfsnode (&fid, &real_fid, &status, &msg.node, ae);
do { res = cm_lookup (*dirfid, h->name, &fid, &ce); if (res.res == 0) res = cm_getattr (fid, &status, &real_fid, ce, &ae);
xfs_message_getnode (int fd, struct xfs_message_getnode *h, u_int size){     struct xfs_message_installnode msg;     VenusFid *dirfid = (VenusFid *)&h->parent_handle;     VenusFid fid;     VenusFid real_fid;     Result res;     AFSFetchStatus status;     CredCacheEntry *ce;     AccessEntry *ae;     struct xfs_message_header *h0 = NULL;     size_t h0_len = 0;     ce = cred_get (dirfid->Cell, h->cred.pag, CRED_ANY);     assert (ce != NULL);     res = cm_lookup (*dirfid, h->name, &fid, &ce);     if (res.res == 0) {	  res = cm_getattr (fid, &status, &real_fid, ce, &ae);	  if (res.res == 0) {	       fcacheentry2xfsnode (&fid, &real_fid,				    &status, &msg.node, ae);	       msg.node.tokens = res.tokens & ~XFS_DATA_MASK;	       msg.parent_handle = h->parent_handle;	       strcpy (msg.name, h->name);	       msg.header.opcode = XFS_MSG_INSTALLNODE;	       h0 = (struct xfs_message_header *)&msg;	       h0_len = sizeof(msg);	  }     }     if (res.res != 0 && res.error == RXKADEXPIRED) {	 cred_expire (ce);	 cred_free (ce);	 return xfs_message_getnode (fd, h, size);     }     cred_free (ce);     xfs_send_message_wakeup_multiple (fd,				       h->header.sequence_num,				       res.res == -1 ? res.error : res.res,				       h0, h0_len,				       NULL, 0);     return 0;}