anchor.diff:      {Reply, S1} = do_put_tag_commit(Tag, TagVol, S),
       {reply, Reply, S1}.
   
  +-type casts() :: rescan_tags
  +               | {update_vols, [volume()]}
  +               | {update_tags, gb_tree()}.
  +-spec handle_cast(casts(), state()) -> {noreply, state()}.
   handle_cast(rescan_tags, #state{scanner = Scanner} = S) ->
       Scanner ! rescan,
       {noreply, S};
  
positive.code:     {noreply, S#state{putq = NewPutQ, getq = NewGetQ}}.
  
  % callback stubs
  terminate(_Reason, _State) ->
      {}.
  
  code_change(_OldVsn, State, _Extra) ->
      {ok, State}.
  
  
negative.code: -include("ddfs_tag.hrl").
  
  -record(state, {nodename :: string(),
                  root :: path(),
                  vols :: [volume()],
                  putq :: http_queue:q(),
                  getq :: http_queue:q(),
                  tags :: gb_tree(),
                  scanner :: pid()}).
  -type state() :: #state{}.
  
  -spec start_link(term()) -> no_return().
  start_link(Config) ->
  