anchor.diff:  -spec await_open_file(torrent_id(), file_path()) -> {ok, pid()}.
   await_open_file(TorrentID, Path) ->
       Name = {etorrent, TorrentID, Path, file, open},
  -    {FilePid, undefined} = gproc:await({n, l Name}),
  +    {FilePid, undefined} = gproc:await({n, l, Name}),
       {ok, FilePid}.
   
   %%
  
positive.code: -spec write_file_blocks(torrent_id(), chunk_bin(), list(block_pos())) -> 'ok'.
  write_file_blocks(TorrentID, <<>>, []) ->
      ok;
  write_file_blocks(TorrentID, Chunk, [{Path, Offset, Length}|T]) ->
      FilePid = lookup_file_server(TorrentID, Path),
      <<Block:Length/binary, Rest/binary>> = Chunk,
      ok = etorrent_io_file:write(FilePid, Offset, Block),
      write_file_blocks(TorrentID, Rest, T).
  
  
  file_paths(Torrent) ->
  
negative.code: -spec read_file_blocks(torrent_id(), list(block_pos())) -> iolist().
  read_file_blocks(_, []) ->
      [];
  read_file_blocks(TorrentID, [{Path, Offset, Length}|T]=L) ->
      {ok, FilePid} = await_open_file(TorrentID, Path),
      case etorrent_io_file:read(FilePid, Offset, Length) of
          {error, eagain} ->
              %% XXX - potential race condition
              read_file_blocks(TorrentID, L);
          {ok, Block} ->
              [Block|read_file_blocks(TorrentID, T)]
      end.
  
  %%
  %% Write blocks of a chunk seqeuntially to the file servers
  