···1010#include <linux/limits.h>1111#include <linux/log2.h>12121313-#include "config.h"1413#include "cpu.h"1514#include "errors.h"1616-#include "indexer.h"1715#include "logger.h"1816#include "memory-alloc.h"1917#include "numeric.h"2018#include "permassert.h"2119#include "string-utils.h"2220#include "time-utils.h"2121+2222+#include "config.h"2323+#include "indexer.h"23242425/*2526 * The entries in a delta index could be stored in a single delta list, but to reduce search times
···8899#include <linux/cache.h>10101111-#include "config.h"1212-#include "io-factory.h"1311#include "numeric.h"1412#include "time-utils.h"1313+1414+#include "config.h"1515+#include "io-factory.h"15161617/*1718 * A delta index is a key-value store, where each entry maps an address (the key) to a payload (the
···88#include <linux/compiler.h>99#include <linux/log2.h>10101111-#include "delta-index.h"1211#include "errors.h"1313-#include "indexer.h"1412#include "logger.h"1513#include "memory-alloc.h"1614#include "permassert.h"1515+1616+#include "delta-index.h"1717+#include "indexer.h"17181819/*1920 * An index volume is divided into a fixed number of fixed-size chapters, each consisting of a
···66#ifndef UDS_HASH_UTILS_H77#define UDS_HASH_UTILS_H8899+#include "numeric.h"1010+911#include "geometry.h"1012#include "indexer.h"1111-#include "numeric.h"12131314/* Utilities for extracting portions of a request name for various uses. */1415
···66#include "index-page-map.h"7788#include "errors.h"99-#include "hash-utils.h"1010-#include "indexer.h"119#include "logger.h"1210#include "memory-alloc.h"1311#include "numeric.h"1412#include "permassert.h"1513#include "string-utils.h"1614#include "thread-utils.h"1515+1616+#include "hash-utils.h"1717+#include "indexer.h"17181819/*1920 * The index page map is conceptually a two-dimensional array indexed by chapter number and index
···7788#include <linux/atomic.h>991010-#include "funnel-requestqueue.h"1111-#include "index.h"1212-#include "index-layout.h"1310#include "logger.h"1411#include "memory-alloc.h"1512#include "time-utils.h"1313+1414+#include "funnel-requestqueue.h"1515+#include "index.h"1616+#include "index-layout.h"16171718/*1819 * The index session contains a lock (the request_mutex) which ensures that only one thread can
···99#include <linux/atomic.h>1010#include <linux/cache.h>11111212+#include "thread-utils.h"1313+1214#include "config.h"1315#include "indexer.h"1414-#include "thread-utils.h"15161617/*1718 * The index session mediates all interactions with a UDS index. Once the index session is created,
···7788#include <linux/log2.h>991010-#include "config.h"1111-#include "hash-utils.h"1210#include "logger.h"1311#include "memory-alloc.h"1412#include "numeric.h"1513#include "permassert.h"1414+1515+#include "config.h"1616+#include "hash-utils.h"16171718/*1819 * Each index zone has a dedicated open chapter zone structure which gets an equal share of the
···99#include <linux/delay.h>1010#include <linux/dm-bufio.h>11111212-#include "chapter-index.h"1313-#include "config.h"1414-#include "index.h"1512#include "logger.h"1613#include "memory-alloc.h"1714#include "permassert.h"1515+1616+#include "chapter-index.h"1717+#include "config.h"1818+#include "index.h"18191920/*2021 * Since the cache is small, it is implemented as a simple array of cache entries. Searching for a
···1010#include <linux/compiler.h>1111#include <linux/log2.h>12121313-#include "config.h"1413#include "errors.h"1515-#include "geometry.h"1616-#include "hash-utils.h"1717-#include "indexer.h"1814#include "logger.h"1915#include "memory-alloc.h"2016#include "numeric.h"2117#include "permassert.h"2218#include "thread-utils.h"1919+2020+#include "config.h"2121+#include "geometry.h"2222+#include "hash-utils.h"2323+#include "indexer.h"23242425/*2526 * The volume index is a combination of two separate subindexes, one containing sparse hook entries
···8899#include <linux/limits.h>10101111+#include "thread-utils.h"1212+1113#include "config.h"1214#include "delta-index.h"1315#include "indexer.h"1414-#include "thread-utils.h"15161617/*1718 * The volume index is the primary top-level index for UDS. It contains records which map a record
···99#include <linux/dm-bufio.h>1010#include <linux/err.h>11111212-#include "chapter-index.h"1313-#include "config.h"1412#include "errors.h"1515-#include "geometry.h"1616-#include "hash-utils.h"1717-#include "index.h"1813#include "logger.h"1914#include "memory-alloc.h"2015#include "permassert.h"2121-#include "sparse-cache.h"2216#include "string-utils.h"2317#include "thread-utils.h"1818+1919+#include "chapter-index.h"2020+#include "config.h"2121+#include "geometry.h"2222+#include "hash-utils.h"2323+#include "index.h"2424+#include "sparse-cache.h"24252526/*2627 * The first block of the volume layout is reserved for the volume header, which is no longer used.
···1111#include <linux/dm-bufio.h>1212#include <linux/limits.h>13131414+#include "permassert.h"1515+#include "thread-utils.h"1616+1417#include "chapter-index.h"1518#include "config.h"1619#include "geometry.h"1720#include "indexer.h"1821#include "index-layout.h"1922#include "index-page-map.h"2020-#include "permassert.h"2123#include "radix-sort.h"2224#include "sparse-cache.h"2323-#include "thread-utils.h"24252526/*2627 * The volume manages deduplication records on permanent storage. The term "volume" can also refer