ReleaseWriteLock (&e->lock);
fcache_release(e);
cm_lookup (VenusFid dir_fid,	   const char *name,	   VenusFid *res,	   CredCacheEntry** ce){     char tmp_name[MAXPATHLEN];     Result ret;     int error;     if (strstr (name, "@sys") != NULL) {	 if (expand_sys (tmp_name, sizeof(tmp_name), name,			 "@sys", arlasysname) >= sizeof(tmp_name)) {	     ret.res   = -1;	     ret.error = ENAMETOOLONG;	     return ret;	 }	 name = tmp_name;     }     error = adir_lookup (dir_fid, name, res, *ce);     if (error) {	  ret.res   = -1;	  ret.error = error;	  return ret;     }     error = followmountpoint (res, &dir_fid, ce);     if (error) {	  ret.res   = -1;	  ret.error = error;     } else {	  ret.res    = 0;	  ret.tokens = 0;     }     /* Assume that this means a bad .. */     if (   strcmp("..", name) == 0 	 && dir_fid.Cell == res->Cell 	 && dir_fid.fid.Volume == res->fid.Volume	 && dir_fid.fid.Vnode == res->fid.Vnode 	 && dir_fid.fid.Unique == res->fid.Unique) {	  FCacheEntry *e;	  int error;	  error = fcache_get (&e, dir_fid, *ce);	  if (error) {	      ret.res = -1;	      ret.error = error;	      return ret;	  }	  error = fcache_get_attr (e, *ce);	  if (error) {	      ReleaseWriteLock (&e->lock);	      ret.res = -1;	      ret.error = error;	      return ret;	  }	  assert (e->flags.mountp);	  *res = e->parent;	  ret.res = 0;	  ret.tokens = e->tokens;	  ReleaseWriteLock (&e->lock);     }          log_operation ("lookup (%ld,%lu,%lu,%lu) %s\n",	      dir_fid.Cell,	      dir_fid.fid.Volume, dir_fid.fid.Vnode, dir_fid.fid.Unique,	      name);     return ret;}