Barrier between vkcmdfillbuffer and vkcmdcopyquerypoolresults

I have problem with vkcmdfillbuffer and vkcmdcopyquerypoolresults. The first runs after vkcmdcopyquerypoolresults. I made barrier but still doesnt works.

vkCmdFillBuffer(info.cmd, query_result_buf, 0, 2 * sizeof(uint64_t), 1u);

VkBufferMemoryBarrier barrier = {};
barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER;
barrier.pNext = NULL;
barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
barrier.srcQueueFamilyIndex = 0;
barrier.dstQueueFamilyIndex = 0;
barrier.buffer = query_result_buf;
barrier.offset = 0;
barrier.size = 2 * sizeof(uint64_t);

vkCmdPipelineBarrier(info.cmd, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, NULL, 1, &barrier, 0, NULL);

vkCmdCopyQueryPoolResults(info.cmd, query_pool, 0 /*firstQuery*/, 1 /*queryCount*/, query_result_buf, 0 /*dstOffset*/,
    sizeof(uint64_t) /*stride*/, VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT);

Define “doesnt works”. What behavior do you expect, and what behavior do you get.

How is the vkCmdFillBuffer relevant, if you overwrite it anyway?