File size is updated correctly according to 

> fdatasync() is similar to fsync(), but does not flush modified metadata unless that metadata is needed in order to allow a subsequent data retrieval to be correctly handled.  For example, changes to  st_atime  or  st_mtime  (respec‐
       tively,  time  of  last  access  and  time  of last modification; see inode(7)) do not require flushing because they are not necessary for a subsequent data read to be handled correctly.  On the other hand, a change to the file size
       (st_size, as made by say ftruncate(2)), would require a metadata flush.

And we don't care about modification times.
Should work alright.
bool cell_is_expired = false;
            KeyState::State key_state = KeyState::found;
            if (now > cell.deadline)
            {
                cell_is_expired = true;
                key_state = KeyState::expired;
            }
            result.expired_keys_size += static_cast<size_t>(cell_is_expired);
            result.found_keys_size += static_cast<size_t>(!cell_is_expired);
            switch (cell.state)
            {
                case Cell::in_memory:
                {
                    result.key_index_to_state[key_index] = {key_state, fetched_columns_index};
                    ++fetched_columns_index;
                    const auto & partition = memory_buffer_partitions[cell.in_memory_partition_index];
                    char * serialized_columns_place = partition.getPlace(cell.index);
                    deserializeAndInsertIntoColumns(result.fetched_columns, fetch_request, serialized_columns_place);
                    break;
                }
                case Cell::on_disk:
                {
                    PaddedPODArray<KeyToBlockOffset> & keys_block = block_to_keys_map[cell.index.block_index];
                    keys_block.emplace_back(key_index, cell.index.offset_in_block);
                    KeyState::State state = cell_is_expired ? KeyState::expired : KeyState::found;
                    
                    result.key_index_to_state[key_index] = {state, 0};
                    auto insert_result = unique_blocks_to_request.insert(cell.index.block_index);
                    bool was_inserted = insert_result.second;
                    if (was_inserted)