anchor.diff:  %% @private
   -spec new_tar_file_entry(state(), lfm_attrs:file_attributes(), file_meta:path(), 
       file_meta_symlinks:symlink() | undefined) -> {binary(), state()}.
  -new_tar_file_entry(#state{tar_stream = TarStream} = State, FileAttrs, FileRelativePath, SymlinkPath) ->
  +new_tar_file_entry(#state{tar_stream = TarStream, root_dir_path = RootDirPath} = State, FileAttrs, FileRelativePath, SymlinkPath) ->
       #file_attr{mode = Mode, mtime = MTime, type = Type, size = FileSize, guid = Guid} = FileAttrs,
       FinalMode = case {file_id:is_share_guid(Guid), Type} of
           {true, ?REGULAR_FILE_TYPE} -> ?DEFAULT_FILE_PERMS;
  
positive.code: check_result({error, ?EPERM}) -> ignored;
  check_result({error, ?EACCES}) -> ignored;
  check_result({error, _} = Error) -> Error.
  
negative.code:     [#file_attr{guid = Guid, type = ?DIRECTORY_TYPE, name = Name} = FileAttrs | Tail],
      BulkDownloadId, UserCtx, State
  ) ->
      {ok, RootDirPath} = lfm:get_file_path(user_ctx:get_session_id(UserCtx), Guid),
      State1 = State#state{root_dir_path = RootDirPath},
      % add starting dir to the tarball here as traverse does not execute slave job on it
      {Bytes, UpdatedState} = new_tar_file_entry(State1, FileAttrs, Name),
      UpdatedState1 = send_data(Bytes, UpdatedState),
      bulk_download_traverse:start(BulkDownloadId, UserCtx, Guid, State#state.follow_symlinks_policy, Name),
      FinalState = wait_for_traverse(UpdatedState1, user_ctx:get_session_id(UserCtx)),
      handle_multiple_files(Tail, BulkDownloadId, UserCtx, FinalState#state{root_dir_path = undefined});
  handle_multiple_files(
      [#file_attr{type = ?REGULAR_FILE_TYPE, name = Name} = FileAttrs | Tail], 
      BulkDownloadId, UserCtx, State
  