arla_warn (ADEBFCACHE, ret, "copyrx2fd");
goto out;
read_data (FCacheEntry *entry, ConnCacheEntry *conn, CredCacheEntry *ce){    struct rx_call *call;    int ret = 0;    u_int32_t sizefs;    int fd;    AFSFetchStatus status;    AFSCallBack callback;    AFSVolSync volsync;    arla_warnx (ADEBMISC, "read_data");    assert (CheckLock(&entry->lock) == -1);    if (connected_mode == DISCONNECTED) 	return ENETDOWN;    if (usedbytes + entry->status.Length > highbytes)	emergency_remove_data (entry->status.Length);    if (usedbytes + entry->status.Length > highbytes) {	ret = ENOSPC;	goto out;    }    call = rx_NewCall (conn->connection);    if (call == NULL) {	arla_warnx (ADEBMISC, "rx_NewCall failed");	ret = ENOMEM;	goto out;    }    ret = StartRXAFS_FetchData (call, &entry->fid.fid, 				0, entry->status.Length);    if(ret) {	arla_warn (ADEBFCACHE, ret, "fetch-data");	goto out;    }    ret = rx_Read (call, &sizefs, sizeof(sizefs));    if (ret != sizeof(sizefs)) {	ret = rx_Error(call);	arla_warn (ADEBFCACHE, ret, "Error reading length");	rx_EndCall(call, 0);	goto out;    }    sizefs = ntohl (sizefs);    assert (sizefs == entry->status.Length);    fd = fcache_open_file (entry, O_RDWR | O_CREAT | O_TRUNC, 0666);    if (fd < 0) {	ret = errno;	arla_warn (ADEBFCACHE, ret, "open cache file %u",		   (unsigned)entry->inode);	rx_EndCall(call, 0);	goto out;    }    if (copyrx2fd (call, fd, sizefs)) {	ret = errno;	rx_EndCall(call, ret);	arla_warn (ADEBFCACHE, ret, "copyrx2fd");    }    usedbytes += sizefs;		/* XXX - sync */    ret = rx_EndCall (call, EndRXAFS_FetchData (call,						&status,						&callback,						&volsync));    if(ret) {	arla_warn (ADEBFCACHE, ret, "rx_EndCall");	goto out;    }        update_entry (entry, &status, &callback, &volsync,		  rx_HostOf(rx_PeerOf(conn->connection)),		  ce->cred);    entry->flags.datap = TRUE;    entry->tokens |= XFS_DATA_R | XFS_DATA_W | XFS_OPEN_NR | XFS_OPEN_NW;out:    return ret;}