ret.res = 0;
ret.res   = 0; ret.error = 0;
cm_link (VenusFid dir_fid,	 const char *name,	 VenusFid existing_fid,	 AFSFetchStatus *existing_status,	 CredCacheEntry* ce){     FCacheEntry *dire, *file;     Result ret;     int error;     error = fcache_get (&dire, dir_fid, ce);     if (error) {	 ret.res = -1;	 ret.error = error;	 return ret;     }     error = fcache_get_data (dire, ce);     if (error) {	 ReleaseWriteLock (&dire->lock);	 ret.res = -1;	 ret.error = error;	 return ret;     }     error = fcache_get (&file, existing_fid, ce);     if (error) {	 ReleaseWriteLock (&dire->lock);	 ret.res = -1;	 ret.error = error;	 return ret;     }     error = fcache_get_attr (file, ce);     if (error) {	 ret.res = -1;	 ret.error = error;	 goto out;     }     if (checkright (dire, AINSERT, ce)) {	  error = create_link (dire, name, 			       file, ce);	  if (error) {	      ret.res = -1;	      ret.error = error;	  } else {	      error = adir_creat (dire, name, existing_fid.fid);	      if (error) {		  ret.res = -1;		  ret.error = error;	      } else {		  *existing_status = file->status;		  ret.res = 0;	      }	  }     } else {	  ret.res = -1;	  ret.error = EACCES;     }     log_operation ("link (%ld,%lu,%lu,%lu) (%ld,%lu,%lu,%lu) %s\n",	      dir_fid.Cell,	      dir_fid.fid.Volume, dir_fid.fid.Vnode, dir_fid.fid.Unique,	      existing_fid.Cell,	      existing_fid.fid.Volume,	      existing_fid.fid.Vnode,	      existing_fid.fid.Unique,	      name);out:     ReleaseWriteLock (&dire->lock);     ReleaseWriteLock (&file->lock);     return ret;}