Blame source/vdo/base/blockMapTree.h

Packit Service 310c69
/*
Packit Service 310c69
 * Copyright (c) 2020 Red Hat, Inc.
Packit Service 310c69
 *
Packit Service 310c69
 * This program is free software; you can redistribute it and/or
Packit Service 310c69
 * modify it under the terms of the GNU General Public License
Packit Service 310c69
 * as published by the Free Software Foundation; either version 2
Packit Service 310c69
 * of the License, or (at your option) any later version.
Packit Service 310c69
 * 
Packit Service 310c69
 * This program is distributed in the hope that it will be useful,
Packit Service 310c69
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 310c69
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 310c69
 * GNU General Public License for more details.
Packit Service 310c69
 * 
Packit Service 310c69
 * You should have received a copy of the GNU General Public License
Packit Service 310c69
 * along with this program; if not, write to the Free Software
Packit Service 310c69
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
Packit Service 310c69
 * 02110-1301, USA. 
Packit Service 310c69
 *
Packit Service 310c69
 * $Id: //eng/vdo-releases/aluminum/src/c++/vdo/base/blockMapTree.h#7 $
Packit Service 310c69
 */
Packit Service 310c69
Packit Service 310c69
#ifndef BLOCK_MAP_TREE_H
Packit Service 310c69
#define BLOCK_MAP_TREE_H
Packit Service 310c69
Packit Service 310c69
#include "constants.h"
Packit Service 310c69
#include "types.h"
Packit Service 310c69
Packit Service 310c69
typedef struct treePage TreePage;
Packit Service 310c69
Packit Service 310c69
/**
Packit Service 310c69
 * Intialize a BlockMapTreeZone.
Packit Service 310c69
 *
Packit Service 310c69
 * @param zone              The BlockMapZone of the tree zone to intialize
Packit Service 310c69
 * @param layer             The physical layer
Packit Service 310c69
 * @param maximumAge        The number of journal blocks before a dirtied page
Packit Service 310c69
 *                          is considered old and may be written out
Packit Service 310c69
 *
Packit Service 310c69
 * @return VDO_SUCCESS or an error
Packit Service 310c69
 **/
Packit Service 310c69
int initializeTreeZone(BlockMapZone     *zone,
Packit Service 310c69
                       PhysicalLayer    *layer,
Packit Service 310c69
                       BlockCount        maximumAge)
Packit Service 310c69
  __attribute__((warn_unused_result));
Packit Service 310c69
Packit Service 310c69
/**
Packit Service 310c69
 * Clean up a BlockMapTreeZone.
Packit Service 310c69
 *
Packit Service 310c69
 * @param treeZone  The zone to clean up
Packit Service 310c69
 **/
Packit Service 310c69
void uninitializeBlockMapTreeZone(BlockMapTreeZone *treeZone);
Packit Service 310c69
Packit Service 310c69
/**
Packit Service 310c69
 * Set the initial dirty period for a tree zone.
Packit Service 310c69
 *
Packit Service 310c69
 * @param treeZone  The tree zone
Packit Service 310c69
 * @param period    The initial dirty period to set
Packit Service 310c69
 **/
Packit Service 310c69
void setTreeZoneInitialPeriod(BlockMapTreeZone *treeZone,
Packit Service 310c69
                              SequenceNumber    period);
Packit Service 310c69
Packit Service 310c69
/**
Packit Service 310c69
 * Check whether a tree zone is active (i.e. has any active lookups,
Packit Service 310c69
 * outstanding I/O, or pending I/O).
Packit Service 310c69
 *
Packit Service 310c69
 * @param zone  The zone to check
Packit Service 310c69
 *
Packit Service 310c69
 * @return true if the zone is active
Packit Service 310c69
 **/
Packit Service 310c69
bool isTreeZoneActive(BlockMapTreeZone *zone)
Packit Service 310c69
  __attribute__((warn_unused_result));
Packit Service 310c69
Packit Service 310c69
/**
Packit Service 310c69
 * Advance the dirty period for a tree zone.
Packit Service 310c69
 *
Packit Service 310c69
 * @param zone    The BlockMapTreeZone to advance
Packit Service 310c69
 * @param period  The new dirty period
Packit Service 310c69
 **/
Packit Service 310c69
void advanceZoneTreePeriod(BlockMapTreeZone *zone, SequenceNumber period);
Packit Service 310c69
Packit Service 310c69
/**
Packit Service 310c69
 * Drain the zone trees, i.e. ensure that all I/O is quiesced. If required by
Packit Service 310c69
 * the drain type, all dirty block map trees will be written to disk. This
Packit Service 310c69
 * method must not be called when lookups are active.
Packit Service 310c69
 *
Packit Service 310c69
 * @param zone  The BlockMapTreeZone to drain
Packit Service 310c69
 **/
Packit Service 310c69
void drainZoneTrees(BlockMapTreeZone *zone);
Packit Service 310c69
Packit Service 310c69
/**
Packit Service 310c69
 * Look up the PBN of the block map page for a DataVIO's LBN in the arboreal
Packit Service 310c69
 * block map. If necessary, the block map page will be allocated. Also, the
Packit Service 310c69
 * ancestors of the block map page will be allocated or loaded if necessary.
Packit Service 310c69
 *
Packit Service 310c69
 * @param dataVIO  The DataVIO requesting the lookup
Packit Service 310c69
 **/
Packit Service 310c69
void lookupBlockMapPBN(DataVIO *dataVIO);
Packit Service 310c69
Packit Service 310c69
/**
Packit Service 310c69
 * Find the PBN of a leaf block map page. This method may only be used after
Packit Service 310c69
 * all allocated tree pages have been loaded, otherwise, it may give the wrong
Packit Service 310c69
 * answer (0).
Packit Service 310c69
 *
Packit Service 310c69
 * @param map         The block map containing the forest
Packit Service 310c69
 * @param pageNumber  The page number of the desired block map page
Packit Service 310c69
 *
Packit Service 310c69
 * @return The PBN of the page
Packit Service 310c69
 **/
Packit Service 310c69
PhysicalBlockNumber findBlockMapPagePBN(BlockMap *map, PageNumber pageNumber);
Packit Service 310c69
Packit Service 310c69
/**
Packit Service 310c69
 * Write a tree page or indicate that it has been re-dirtied if it is already
Packit Service 310c69
 * being written. This method is used when correcting errors in the tree during
Packit Service 310c69
 * read-only rebuild.
Packit Service 310c69
 *
Packit Service 310c69
 * @param page  The page to write
Packit Service 310c69
 * @param zone  The tree zone managing the page
Packit Service 310c69
 **/
Packit Service 310c69
void writeTreePage(TreePage *page, BlockMapTreeZone *zone);
Packit Service 310c69
Packit Service 310c69
#endif // BLOCK_MAP_TREE_H