Files
libaaruformat/docs/html/erasure_8c.html

733 lines
68 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libaaruformat: src/erasure.c File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">libaaruformat<span id="projectnumber">&#160;1.0</span>
</div>
<div id="projectbrief">Aaru Data Preservation Suite - Format Library</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('erasure_8c.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">erasure.c File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Erasure coding setup, parity accumulation, and write-path integration.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;stdlib.h&gt;</code><br />
<code>#include &lt;string.h&gt;</code><br />
<code>#include &quot;<a class="el" href="aaruformat_8h_source.html">aaruformat.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="context_8h_source.html">aaruformat/context.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="consts_8h_source.html">aaruformat/consts.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="enums_8h_source.html">aaruformat/enums.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="errors_8h_source.html">aaruformat/errors.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="data_8h_source.html">aaruformat/structs/data.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="ddt_8h_source.html">aaruformat/structs/ddt.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="erasure_8h_source.html">aaruformat/structs/erasure.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="index_8h_source.html">aaruformat/structs/index.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="internal_8h_source.html">internal.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="log_8h_source.html">log.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="gf256_8h_source.html">lib/gf256.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="reed__solomon_8h_source.html">lib/reed_solomon.h</a>&quot;</code><br />
</div>
<p><a href="erasure_8c_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:EcReadStripe" id="r_EcReadStripe"><td class="memItemLeft">struct &#160;</td><td class="memItemRight"><a class="el" href="structEcReadStripe.html">EcReadStripe</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">In-memory representation of one data stripe (parsed from ECMB). <a href="structEcReadStripe.html#details">More...</a><br /></td></tr>
<tr class="memitem:EcBlockLookupEntry" id="r_EcBlockLookupEntry"><td class="memItemLeft">struct &#160;</td><td class="memItemRight"><a class="el" href="structEcBlockLookupEntry.html">EcBlockLookupEntry</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hash table entry mapping block file offset -&gt; stripe index + position. <a href="structEcBlockLookupEntry.html#details">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a415f83d4f5fbce86adcec87aa368313c" id="r_a415f83d4f5fbce86adcec87aa368313c"><td class="memItemLeft">#define&#160;</td><td class="memItemRight"><a class="el" href="#a415f83d4f5fbce86adcec87aa368313c">WRITE_GROUP</a>(desc, desc_len, grp)</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-typedef-members" class="groupheader"><a id="typedef-members" name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:a2f164deb906da3861ed577a951149a23" id="r_a2f164deb906da3861ed577a951149a23"><td class="memItemLeft">typedef struct EcReadStripe&#160;</td><td class="memItemRight"><a class="el" href="#a2f164deb906da3861ed577a951149a23">EcReadStripe</a></td></tr>
<tr class="memdesc:a2f164deb906da3861ed577a951149a23"><td class="mdescLeft">&#160;</td><td class="mdescRight">In-memory representation of one data stripe (parsed from ECMB). <br /></td></tr>
<tr class="memitem:a49845afc245ef4c7570c1a59b8e2c893" id="r_a49845afc245ef4c7570c1a59b8e2c893"><td class="memItemLeft">typedef struct EcBlockLookupEntry&#160;</td><td class="memItemRight"><a class="el" href="#a49845afc245ef4c7570c1a59b8e2c893">EcBlockLookupEntry</a></td></tr>
<tr class="memdesc:a49845afc245ef4c7570c1a59b8e2c893"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hash table entry mapping block file offset -&gt; stripe index + position. <br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:aa258c90d05ad57fc4c378679e5187e48" id="r_aa258c90d05ad57fc4c378679e5187e48"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#aa258c90d05ad57fc4c378679e5187e48">ec_flush_data_stripe</a> (<a class="el" href="structaaruformat__context.html">aaruformat_context</a> *ctx, uint32_t slot)</td></tr>
<tr class="memdesc:aa258c90d05ad57fc4c378679e5187e48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write M parity blocks for a completed data stripe slot and record the stripe descriptor. <br /></td></tr>
<tr class="memitem:a8b0f3ab93ca60ce00321ca28c2484c7c" id="r_a8b0f3ab93ca60ce00321ca28c2484c7c"><td class="memItemLeft">int32_t&#160;</td><td class="memItemRight"><a class="el" href="#a8b0f3ab93ca60ce00321ca28c2484c7c">aaruf_set_erasure_coding</a> (void *context, uint8_t algorithm, uint16_t <a class="el" href="sha256_8c.html#a22c6551e88df4c5c42fce3d0641adb64">K</a>, uint16_t M)</td></tr>
<tr class="memdesc:a8b0f3ab93ca60ce00321ca28c2484c7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Configure erasure coding for a newly created image. <br /></td></tr>
<tr class="memitem:a51fe2ca1a6eabf109f0cfc4b3223508b" id="r_a51fe2ca1a6eabf109f0cfc4b3223508b"><td class="memItemLeft">int32_t&#160;</td><td class="memItemRight"><a class="el" href="#a51fe2ca1a6eabf109f0cfc4b3223508b">aaruf_set_erasure_coding_auto</a> (void *context, uint8_t recovery_percent)</td></tr>
<tr class="memdesc:a51fe2ca1a6eabf109f0cfc4b3223508b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Configure erasure coding from a desired recovery percentage. <br /></td></tr>
<tr class="memitem:a676c380c73d5adf73afd7613ec06b29d" id="r_a676c380c73d5adf73afd7613ec06b29d"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a676c380c73d5adf73afd7613ec06b29d">ec_accumulate_data_block</a> (<a class="el" href="structaaruformat__context.html">aaruformat_context</a> *ctx, const <a class="el" href="structBlockHeader.html">BlockHeader</a> *block_header, const uint8_t *lzma_props, const uint8_t *payload, uint32_t payload_size, uint64_t file_offset)</td></tr>
<tr class="memdesc:a676c380c73d5adf73afd7613ec06b29d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Accumulate parity for a data block that was just written to disk. <br /></td></tr>
<tr class="memitem:aed80b4dc1f360dbac00a5f73d350bf1a" id="r_aed80b4dc1f360dbac00a5f73d350bf1a"><td class="memItemLeft">static void&#160;</td><td class="memItemRight"><a class="el" href="#aed80b4dc1f360dbac00a5f73d350bf1a">ec_write_batch_parity</a> (<a class="el" href="structaaruformat__context.html">aaruformat_context</a> *ctx, const uint64_t *offsets, const uint32_t *sizes, uint32_t block_count, uint8_t group_type, uint16_t parity_data_type, uint8_t **out_desc, size_t *out_desc_len, <a class="el" href="structStripeGroupDescriptor.html">StripeGroupDescriptor</a> *out_group)</td></tr>
<tr class="memdesc:aed80b4dc1f360dbac00a5f73d350bf1a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute and write batch parity for a set of blocks already on disk. <br /></td></tr>
<tr class="memitem:a1222930aded868b0b0c4eeed13c237e2" id="r_a1222930aded868b0b0c4eeed13c237e2"><td class="memItemLeft">static void&#160;</td><td class="memItemRight"><a class="el" href="#a1222930aded868b0b0c4eeed13c237e2">ec_collect_blocks_by_type</a> (<a class="el" href="structaaruformat__context.html">aaruformat_context</a> *ctx, uint32_t block_type, uint64_t **out_offsets, uint32_t **out_sizes, uint32_t *out_count)</td></tr>
<tr class="memdesc:a1222930aded868b0b0c4eeed13c237e2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Collect file offsets and on-disk sizes for index entries matching a block type. <br /></td></tr>
<tr class="memitem:a38a12ac5d36e23b28d2f110906b14126" id="r_a38a12ac5d36e23b28d2f110906b14126"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a38a12ac5d36e23b28d2f110906b14126">ec_finalize</a> (<a class="el" href="structaaruformat__context.html">aaruformat_context</a> *ctx)</td></tr>
<tr class="memdesc:a38a12ac5d36e23b28d2f110906b14126"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flush all partial data stripes and write parity for all groups + ECMB + recovery footer. <br /></td></tr>
<tr class="memitem:ae5fe558b49013df6e932278061a2ab53" id="r_ae5fe558b49013df6e932278061a2ab53"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#ae5fe558b49013df6e932278061a2ab53">ec_free</a> (<a class="el" href="structaaruformat__context.html">aaruformat_context</a> *ctx)</td></tr>
<tr class="memdesc:ae5fe558b49013df6e932278061a2ab53"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free all erasure coding state from the context. <br /></td></tr>
<tr class="memitem:a18f424702fcd85725ee26c1cf7e253db" id="r_a18f424702fcd85725ee26c1cf7e253db"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a18f424702fcd85725ee26c1cf7e253db">ec_load_ecmb</a> (<a class="el" href="structaaruformat__context.html">aaruformat_context</a> *ctx)</td></tr>
<tr class="memdesc:a18f424702fcd85725ee26c1cf7e253db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Try to load the ECMB from the recovery footer at EOF. <br /></td></tr>
<tr class="memitem:a7a9ac507738cdf72e951f152edd4d233" id="r_a7a9ac507738cdf72e951f152edd4d233"><td class="memItemLeft">int32_t&#160;</td><td class="memItemRight"><a class="el" href="#a7a9ac507738cdf72e951f152edd4d233">ec_recover_data_block</a> (<a class="el" href="structaaruformat__context.html">aaruformat_context</a> *ctx, uint64_t block_offset, uint64_t offset, uint8_t *data, uint32_t *length, uint8_t sector_status)</td></tr>
<tr class="memdesc:a7a9ac507738cdf72e951f152edd4d233"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attempt to recover a data block that failed decompression or CRC verification. <br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-var-members" class="groupheader"><a id="var-members" name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:a1883da545c74667f3438d8e48b195aa1" id="r_a1883da545c74667f3438d8e48b195aa1"><td class="memItemLeft">static UT_icd&#160;</td><td class="memItemRight"><a class="el" href="#a1883da545c74667f3438d8e48b195aa1">ec_stripe_icd</a> = {sizeof(uint8_t), NULL, NULL, NULL}</td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Erasure coding setup, parity accumulation, and write-path integration. </p>
<p class="definition">Definition in file <a class="el" href="erasure_8c_source.html">erasure.c</a>.</p>
</div><a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
<a id="a415f83d4f5fbce86adcec87aa368313c" name="a415f83d4f5fbce86adcec87aa368313c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a415f83d4f5fbce86adcec87aa368313c">&#9670;&#160;</a></span>WRITE_GROUP</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define WRITE_GROUP</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>desc</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>desc_len</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>grp</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span>(desc) { memcpy(wp, &amp;(grp), <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structStripeGroupDescriptor.html">StripeGroupDescriptor</a>)); wp += <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structStripeGroupDescriptor.html">StripeGroupDescriptor</a>); \</div>
<div class="line"> memcpy(wp, (desc), (desc_len)); wp += (desc_len); }</div>
<div class="ttc" id="astructStripeGroupDescriptor_html"><div class="ttname"><a href="structStripeGroupDescriptor.html">StripeGroupDescriptor</a></div><div class="ttdoc">Describes one protection group within the ECMB payload.</div><div class="ttdef"><b>Definition</b> <a href="erasure_8h_source.html#l00068">erasure.h:69</a></div></div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="erasure_8c_source.html#l00690">ec_finalize()</a>.</p>
</div>
</div>
<a name="doc-typedef-members" id="doc-typedef-members"></a><h2 id="header-doc-typedef-members" class="groupheader">Typedef Documentation</h2>
<a id="a49845afc245ef4c7570c1a59b8e2c893" name="a49845afc245ef4c7570c1a59b8e2c893"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a49845afc245ef4c7570c1a59b8e2c893">&#9670;&#160;</a></span>EcBlockLookupEntry</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct EcBlockLookupEntry EcBlockLookupEntry</td>
</tr>
</table>
</div><div class="memdoc">
<p>Hash table entry mapping block file offset -&gt; stripe index + position. </p>
</div>
</div>
<a id="a2f164deb906da3861ed577a951149a23" name="a2f164deb906da3861ed577a951149a23"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2f164deb906da3861ed577a951149a23">&#9670;&#160;</a></span>EcReadStripe</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct EcReadStripe EcReadStripe</td>
</tr>
</table>
</div><div class="memdoc">
<p>In-memory representation of one data stripe (parsed from ECMB). </p>
</div>
</div>
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
<a id="a8b0f3ab93ca60ce00321ca28c2484c7c" name="a8b0f3ab93ca60ce00321ca28c2484c7c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8b0f3ab93ca60ce00321ca28c2484c7c">&#9670;&#160;</a></span>aaruf_set_erasure_coding()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int32_t aaruf_set_erasure_coding </td>
<td>(</td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>context</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>algorithm</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t</td> <td class="paramname"><span class="paramname"><em>K</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t</td> <td class="paramname"><span class="paramname"><em>M</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Configure erasure coding for a newly created image. </p>
<p>Must be called after <a class="el" href="decls_8h.html#a7065a9fefcaabfecc4184528f01ef013" title="Creates a new AaruFormat image file.">aaruf_create()</a> and before the first <a class="el" href="decls_8h.html#a4b8cd2bb5fd9e2c670a0a13695c6f9e3" title="Writes a sector to the AaruFormat image.">aaruf_write_sector()</a>. Allocates K interleaved stripe slots, each with M parity buffers.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Opaque context from <a class="el" href="decls_8h.html#a7065a9fefcaabfecc4184528f01ef013" title="Creates a new AaruFormat image file.">aaruf_create()</a>. </td></tr>
<tr><td class="paramname">algorithm</td><td><a class="el" href="enums_8h.html#a83c99da65804eb80cfb955eb9a15ef5e" title="Erasure coding algorithms supported by the ECMB.">ErasureCodingAlgorithm</a> (0=XOR, 1=RS). </td></tr>
<tr><td class="paramname"><a class="el" href="sha256_8c.html#a22c6551e88df4c5c42fce3d0641adb64">K</a></td><td>Data blocks per stripe (&gt;= 1). </td></tr>
<tr><td class="paramname">M</td><td>Parity blocks per stripe (&gt;= 1). </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>AARUF_STATUS_OK on success, error code otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="erasure_8c_source.html#l00082">82</a> of file <a class="el" href="erasure_8c_source.html">erasure.c</a>.</p>
<p class="reference">References <a class="el" href="decls_8h_source.html#l00046">AARU_CALL</a>, <a class="el" href="decls_8h_source.html#l00055">AARU_EXPORT</a>, <a class="el" href="enums_8h_source.html#l00319">AARU_FEATURE_ROCOMPAT_ERASURE</a>, <a class="el" href="consts_8h_source.html#l00064">AARU_MAGIC</a>, <a class="el" href="errors_8h_source.html#l00065">AARUF_ERROR_INCORRECT_DATA_SIZE</a>, <a class="el" href="errors_8h_source.html#l00048">AARUF_ERROR_NOT_ENOUGH_MEMORY</a>, <a class="el" href="errors_8h_source.html#l00061">AARUF_READ_ONLY</a>, <a class="el" href="enums_8h_source.html#l00237">AARUF_STATUS_INVALID_CONTEXT</a>, <a class="el" href="errors_8h_source.html#l00081">AARUF_STATUS_OK</a>, <a class="el" href="context_8h_source.html#l00284">aaruformat_context::current_block_header</a>, <a class="el" href="ddt_8h_source.html#l00155">DdtHeader2::dataShift</a>, <a class="el" href="context_8h_source.html#l00379">aaruformat_context::ec_algorithm</a>, <a class="el" href="context_8h_source.html#l00385">aaruformat_context::ec_data_block_offsets</a>, <a class="el" href="context_8h_source.html#l00386">aaruformat_context::ec_data_block_sizes</a>, <a class="el" href="context_8h_source.html#l00384">aaruformat_context::ec_data_parity</a>, <a class="el" href="context_8h_source.html#l00387">aaruformat_context::ec_data_shard_crcs</a>, <a class="el" href="context_8h_source.html#l00382">aaruformat_context::ec_data_shard_size</a>, <a class="el" href="context_8h_source.html#l00388">aaruformat_context::ec_data_stripe_counts</a>, <a class="el" href="context_8h_source.html#l00390">aaruformat_context::ec_data_stripes</a>, <a class="el" href="context_8h_source.html#l00391">aaruformat_context::ec_enabled</a>, <a class="el" href="context_8h_source.html#l00380">aaruformat_context::ec_K</a>, <a class="el" href="context_8h_source.html#l00381">aaruformat_context::ec_M</a>, <a class="el" href="context_8h_source.html#l00383">aaruformat_context::ec_rs_ctx</a>, <a class="el" href="erasure_8c_source.html#l00065">ec_stripe_icd</a>, <a class="el" href="context_8h_source.html#l00389">aaruformat_context::ec_total_data_blocks</a>, <a class="el" href="header_8h_source.html#l00122">AaruHeaderV2::featureCompatibleRo</a>, <a class="el" href="context_8h_source.html#l00178">aaruformat_context::header</a>, <a class="el" href="context_8h_source.html#l00295">aaruformat_context::is_writing</a>, <a class="el" href="sha256_8c_source.html#l00031">K</a>, <a class="el" href="enums_8h_source.html#l00328">kErasureCodingXor</a>, <a class="el" href="consts_8h_source.html#l00082">LZMA_PROPERTIES_LENGTH</a>, <a class="el" href="context_8h_source.html#l00177">aaruformat_context::magic</a>, <a class="el" href="reed__solomon_8c_source.html#l00150">rs_create()</a>, <a class="el" href="reed__solomon_8c_source.html#l00201">rs_free()</a>, <a class="el" href="data_8h_source.html#l00075">BlockHeader::sectorSize</a>, <a class="el" href="log_8h_source.html#l00025">TRACE</a>, and <a class="el" href="context_8h_source.html#l00192">aaruformat_context::user_data_ddt_header</a>.</p>
<p class="reference">Referenced by <a class="el" href="erasure_8c_source.html#l00193">aaruf_set_erasure_coding_auto()</a>.</p>
</div>
</div>
<a id="a51fe2ca1a6eabf109f0cfc4b3223508b" name="a51fe2ca1a6eabf109f0cfc4b3223508b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a51fe2ca1a6eabf109f0cfc4b3223508b">&#9670;&#160;</a></span>aaruf_set_erasure_coding_auto()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int32_t aaruf_set_erasure_coding_auto </td>
<td>(</td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>context</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>recovery_percent</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Configure erasure coding from a desired recovery percentage. </p>
<p>Computes K and M from the requested percentage of data that should be recoverable. Higher recovery percentages produce higher M values (more parity blocks = better burst-corruption tolerance).</p>
<p>Strategy: M = max(2, min(8, round(20 * percent / 100))) K = M * 100 / percent</p>
<p>This keeps K roughly constant (~1640) while scaling M monotonically with the requested recovery level:</p>
<p>1% → RS(200, 2) M=2, minimum burst tolerance 5% → RS(40, 2) M=2 10% → RS(20, 2) M=2 15% → RS(20, 3) M=3, burst tolerance grows 25% → RS(20, 5) M=5 50% → RS(16, 8) M=8 (capped), strong burst tolerance 100% → RS(8, 8) M=8 (capped), maximum protection</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">context</td><td>Opaque context from <a class="el" href="decls_8h.html#a7065a9fefcaabfecc4184528f01ef013" title="Creates a new AaruFormat image file.">aaruf_create()</a>. </td></tr>
<tr><td class="paramname">recovery_percent</td><td>Desired recoverable percentage (1..100). </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>AARUF_STATUS_OK on success, error code otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="erasure_8c_source.html#l00193">193</a> of file <a class="el" href="erasure_8c_source.html">erasure.c</a>.</p>
<p class="reference">References <a class="el" href="decls_8h_source.html#l00046">AARU_CALL</a>, <a class="el" href="decls_8h_source.html#l00055">AARU_EXPORT</a>, <a class="el" href="errors_8h_source.html#l00065">AARUF_ERROR_INCORRECT_DATA_SIZE</a>, <a class="el" href="erasure_8c_source.html#l00082">aaruf_set_erasure_coding()</a>, <a class="el" href="sha256_8c_source.html#l00031">K</a>, <a class="el" href="enums_8h_source.html#l00329">kErasureCodingRsVandermonde</a>, and <a class="el" href="log_8h_source.html#l00025">TRACE</a>.</p>
</div>
</div>
<a id="a676c380c73d5adf73afd7613ec06b29d" name="a676c380c73d5adf73afd7613ec06b29d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a676c380c73d5adf73afd7613ec06b29d">&#9670;&#160;</a></span>ec_accumulate_data_block()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ec_accumulate_data_block </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structaaruformat__context.html">aaruformat_context</a> *</td> <td class="paramname"><span class="paramname"><em>ctx</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structBlockHeader.html">BlockHeader</a> *</td> <td class="paramname"><span class="paramname"><em>block_header</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *</td> <td class="paramname"><span class="paramname"><em>lzma_props</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *</td> <td class="paramname"><span class="paramname"><em>payload</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>payload_size</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>file_offset</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Accumulate parity for a data block that was just written to disk. </p>
<p>Called from <a class="el" href="internal_8h.html#a2402812f5e04ba16765208c0b70fa6c5" title="Finalizes and writes the current data block to the AaruFormat image file.">aaruf_close_current_block()</a> after writing <a class="el" href="structBlockHeader.html" title="Header preceding the compressed data payload of a data block (BlockType::DataBlock).">BlockHeader</a> + payload to the file but before freeing the compressed data buffer.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>Context with EC enabled. </td></tr>
<tr><td class="paramname">block_header</td><td>Pointer to the <a class="el" href="structBlockHeader.html" title="Header preceding the compressed data payload of a data block (BlockType::DataBlock).">BlockHeader</a> that was written. </td></tr>
<tr><td class="paramname">lzma_props</td><td>LZMA properties (may be NULL if not LZMA). </td></tr>
<tr><td class="paramname">payload</td><td>Compressed payload data (or uncompressed if no compression). </td></tr>
<tr><td class="paramname">payload_size</td><td>Size of the payload data. </td></tr>
<tr><td class="paramname">file_offset</td><td>File offset where the block was written. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="erasure_8c_source.html#l00228">228</a> of file <a class="el" href="erasure_8c_source.html">erasure.c</a>.</p>
<p class="reference">References <a class="el" href="crc64_8c_source.html#l00160">aaruf_crc64_data()</a>, <a class="el" href="data_8h_source.html#l00074">BlockHeader::compression</a>, <a class="el" href="context_8h_source.html#l00385">aaruformat_context::ec_data_block_offsets</a>, <a class="el" href="context_8h_source.html#l00386">aaruformat_context::ec_data_block_sizes</a>, <a class="el" href="context_8h_source.html#l00384">aaruformat_context::ec_data_parity</a>, <a class="el" href="context_8h_source.html#l00387">aaruformat_context::ec_data_shard_crcs</a>, <a class="el" href="context_8h_source.html#l00382">aaruformat_context::ec_data_shard_size</a>, <a class="el" href="context_8h_source.html#l00388">aaruformat_context::ec_data_stripe_counts</a>, <a class="el" href="context_8h_source.html#l00391">aaruformat_context::ec_enabled</a>, <a class="el" href="erasure_8c_source.html#l00304">ec_flush_data_stripe()</a>, <a class="el" href="context_8h_source.html#l00380">aaruformat_context::ec_K</a>, <a class="el" href="context_8h_source.html#l00381">aaruformat_context::ec_M</a>, <a class="el" href="context_8h_source.html#l00383">aaruformat_context::ec_rs_ctx</a>, <a class="el" href="context_8h_source.html#l00389">aaruformat_context::ec_total_data_blocks</a>, <a class="el" href="sha256_8c_source.html#l00031">K</a>, <a class="el" href="enums_8h_source.html#l00034">kCompressionLzma</a>, <a class="el" href="consts_8h_source.html#l00082">LZMA_PROPERTIES_LENGTH</a>, <a class="el" href="reed__solomon_8c_source.html#l00213">rs_encode_incremental()</a>, and <a class="el" href="reed__solomon_8c_source.html#l00208">rs_get_coefficient()</a>.</p>
<p class="reference">Referenced by <a class="el" href="write_8c_source.html#l01536">aaruf_close_current_block()</a>.</p>
</div>
</div>
<a id="a1222930aded868b0b0c4eeed13c237e2" name="a1222930aded868b0b0c4eeed13c237e2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1222930aded868b0b0c4eeed13c237e2">&#9670;&#160;</a></span>ec_collect_blocks_by_type()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void ec_collect_blocks_by_type </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structaaruformat__context.html">aaruformat_context</a> *</td> <td class="paramname"><span class="paramname"><em>ctx</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>block_type</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint64_t **</td> <td class="paramname"><span class="paramname"><em>out_offsets</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t **</td> <td class="paramname"><span class="paramname"><em>out_sizes</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t *</td> <td class="paramname"><span class="paramname"><em>out_count</em></span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel static">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Collect file offsets and on-disk sizes for index entries matching a block type. </p>
<p class="definition">Definition at line <a class="el" href="erasure_8c_source.html#l00642">642</a> of file <a class="el" href="erasure_8c_source.html">erasure.c</a>.</p>
<p class="reference">References <a class="el" href="internal_8h_source.html#l00046">aaruf_fseek()</a>, <a class="el" href="index_8h_source.html#l00110">IndexEntry::blockType</a>, <a class="el" href="data_8h_source.html#l00076">BlockHeader::cmpLength</a>, <a class="el" href="ddt_8h_source.html#l00159">DdtHeader2::cmpLength</a>, <a class="el" href="enums_8h_source.html#l00166">DeDuplicationTable2</a>, <a class="el" href="enums_8h_source.html#l00168">DeDuplicationTableSecondary</a>, <a class="el" href="context_8h_source.html#l00179">aaruformat_context::imageStream</a>, <a class="el" href="context_8h_source.html#l00255">aaruformat_context::index_entries</a>, and <a class="el" href="index_8h_source.html#l00112">IndexEntry::offset</a>.</p>
<p class="reference">Referenced by <a class="el" href="erasure_8c_source.html#l00690">ec_finalize()</a>.</p>
</div>
</div>
<a id="a38a12ac5d36e23b28d2f110906b14126" name="a38a12ac5d36e23b28d2f110906b14126"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a38a12ac5d36e23b28d2f110906b14126">&#9670;&#160;</a></span>ec_finalize()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ec_finalize </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structaaruformat__context.html">aaruformat_context</a> *</td> <td class="paramname"><span class="paramname"><em>ctx</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Flush all partial data stripes and write parity for all groups + ECMB + recovery footer. </p>
<p class="definition">Definition at line <a class="el" href="erasure_8c_source.html#l00690">690</a> of file <a class="el" href="erasure_8c_source.html">erasure.c</a>.</p>
<p class="reference">References <a class="el" href="consts_8h_source.html#l00115">AARU_RECOVERY_FOOTER_MAGIC</a>, <a class="el" href="crc64_8c_source.html#l00160">aaruf_crc64_data()</a>, <a class="el" href="internal_8h_source.html#l00046">aaruf_fseek()</a>, <a class="el" href="internal_8h_source.html#l00052">aaruf_ftell()</a>, <a class="el" href="erasure_8h_source.html#l00052">ErasureCodingMapHeader::algorithm</a>, <a class="el" href="erasure_8h_source.html#l00121">AaruRecoveryFooter::backupHeader</a>, <a class="el" href="ddt_8h_source.html#l00154">DdtHeader2::blockAlignmentShift</a>, <a class="el" href="index_8h_source.html#l00110">IndexEntry::blockType</a>, <a class="el" href="erasure_8h_source.html#l00057">ErasureCodingMapHeader::cmpCrc64</a>, <a class="el" href="data_8h_source.html#l00076">BlockHeader::cmpLength</a>, <a class="el" href="erasure_8h_source.html#l00055">ErasureCodingMapHeader::cmpLength</a>, <a class="el" href="erasure_8h_source.html#l00054">ErasureCodingMapHeader::compression</a>, <a class="el" href="erasure_8h_source.html#l00058">ErasureCodingMapHeader::crc64</a>, <a class="el" href="enums_8h_source.html#l00164">DataBlock</a>, <a class="el" href="index_8h_source.html#l00111">IndexEntry::dataType</a>, <a class="el" href="enums_8h_source.html#l00165">DeDuplicationTable</a>, <a class="el" href="enums_8h_source.html#l00166">DeDuplicationTable2</a>, <a class="el" href="enums_8h_source.html#l00168">DeDuplicationTableSecondary</a>, <a class="el" href="context_8h_source.html#l00379">aaruformat_context::ec_algorithm</a>, <a class="el" href="erasure_8c_source.html#l00642">ec_collect_blocks_by_type()</a>, <a class="el" href="context_8h_source.html#l00382">aaruformat_context::ec_data_shard_size</a>, <a class="el" href="context_8h_source.html#l00388">aaruformat_context::ec_data_stripe_counts</a>, <a class="el" href="context_8h_source.html#l00390">aaruformat_context::ec_data_stripes</a>, <a class="el" href="context_8h_source.html#l00391">aaruformat_context::ec_enabled</a>, <a class="el" href="erasure_8c_source.html#l00304">ec_flush_data_stripe()</a>, <a class="el" href="context_8h_source.html#l00380">aaruformat_context::ec_K</a>, <a class="el" href="context_8h_source.html#l00381">aaruformat_context::ec_M</a>, <a class="el" href="erasure_8c_source.html#l00495">ec_write_batch_parity()</a>, <a class="el" href="erasure_8h_source.html#l00119">AaruRecoveryFooter::ecmbLength</a>, <a class="el" href="erasure_8h_source.html#l00118">AaruRecoveryFooter::ecmbOffset</a>, <a class="el" href="index_8h_source.html#l00095">IndexHeader3::entries</a>, <a class="el" href="enums_8h_source.html#l00187">ErasureCodingMapBlock</a>, <a class="el" href="erasure_8h_source.html#l00122">AaruRecoveryFooter::footerMagic</a>, <a class="el" href="erasure_8h_source.html#l00070">StripeGroupDescriptor::groupType</a>, <a class="el" href="context_8h_source.html#l00178">aaruformat_context::header</a>, <a class="el" href="erasure_8h_source.html#l00120">AaruRecoveryFooter::headerCrc64</a>, <a class="el" href="erasure_8h_source.html#l00051">ErasureCodingMapHeader::identifier</a>, <a class="el" href="context_8h_source.html#l00179">aaruformat_context::imageStream</a>, <a class="el" href="context_8h_source.html#l00255">aaruformat_context::index_entries</a>, <a class="el" href="enums_8h_source.html#l00169">IndexBlock</a>, <a class="el" href="enums_8h_source.html#l00170">IndexBlock2</a>, <a class="el" href="enums_8h_source.html#l00171">IndexBlock3</a>, <a class="el" href="header_8h_source.html#l00115">AaruHeaderV2::indexOffset</a>, <a class="el" href="erasure_8h_source.html#l00075">StripeGroupDescriptor::interleaveDepth</a>, <a class="el" href="sha256_8c_source.html#l00031">K</a>, <a class="el" href="erasure_8h_source.html#l00071">StripeGroupDescriptor::K</a>, <a class="el" href="enums_8h_source.html#l00033">kCompressionNone</a>, <a class="el" href="enums_8h_source.html#l00151">kDataTypeErasureParity</a>, <a class="el" href="enums_8h_source.html#l00152">kDataTypeErasureParityDdt</a>, <a class="el" href="enums_8h_source.html#l00153">kDataTypeErasureParityDdtPrimary</a>, <a class="el" href="enums_8h_source.html#l00155">kDataTypeErasureParityIndex</a>, <a class="el" href="enums_8h_source.html#l00154">kDataTypeErasureParityMeta</a>, <a class="el" href="enums_8h_source.html#l00048">kDataTypeUserData</a>, <a class="el" href="enums_8h_source.html#l00338">kECGroupData</a>, <a class="el" href="enums_8h_source.html#l00340">kECGroupDdtPrimary</a>, <a class="el" href="enums_8h_source.html#l00339">kECGroupDdtSecondary</a>, <a class="el" href="enums_8h_source.html#l00342">kECGroupIndex</a>, <a class="el" href="enums_8h_source.html#l00341">kECGroupMetadata</a>, <a class="el" href="erasure_8h_source.html#l00056">ErasureCodingMapHeader::length</a>, <a class="el" href="erasure_8h_source.html#l00072">StripeGroupDescriptor::M</a>, <a class="el" href="index_8h_source.html#l00112">IndexEntry::offset</a>, <a class="el" href="erasure_8h_source.html#l00073">StripeGroupDescriptor::shardSize</a>, <a class="el" href="erasure_8h_source.html#l00074">StripeGroupDescriptor::stripeCount</a>, <a class="el" href="erasure_8h_source.html#l00053">ErasureCodingMapHeader::stripeGroupCount</a>, <a class="el" href="log_8h_source.html#l00025">TRACE</a>, <a class="el" href="context_8h_source.html#l00192">aaruformat_context::user_data_ddt_header</a>, and <a class="el" href="#a415f83d4f5fbce86adcec87aa368313c">WRITE_GROUP</a>.</p>
<p class="reference">Referenced by <a class="el" href="close__write_8c_source.html#l05257">aaruf_finalize_write()</a>.</p>
</div>
</div>
<a id="aa258c90d05ad57fc4c378679e5187e48" name="aa258c90d05ad57fc4c378679e5187e48"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa258c90d05ad57fc4c378679e5187e48">&#9670;&#160;</a></span>ec_flush_data_stripe()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ec_flush_data_stripe </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structaaruformat__context.html">aaruformat_context</a> *</td> <td class="paramname"><span class="paramname"><em>ctx</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>slot</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Write M parity blocks for a completed data stripe slot and record the stripe descriptor. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>Context with EC enabled. </td></tr>
<tr><td class="paramname">slot</td><td>Stripe slot index (0 .. K-1). </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="erasure_8c_source.html#l00304">304</a> of file <a class="el" href="erasure_8c_source.html">erasure.c</a>.</p>
<p class="reference">References <a class="el" href="crc64_8c_source.html#l00160">aaruf_crc64_data()</a>, <a class="el" href="internal_8h_source.html#l00046">aaruf_fseek()</a>, <a class="el" href="internal_8h_source.html#l00052">aaruf_ftell()</a>, <a class="el" href="lzma_8c_source.html#l00065">aaruf_lzma_encode_buffer()</a>, <a class="el" href="zstd_8c_source.html#l00059">aaruf_zstd_encode_buffer()</a>, <a class="el" href="ddt_8h_source.html#l00154">DdtHeader2::blockAlignmentShift</a>, <a class="el" href="data_8h_source.html#l00078">BlockHeader::cmpCrc64</a>, <a class="el" href="data_8h_source.html#l00076">BlockHeader::cmpLength</a>, <a class="el" href="data_8h_source.html#l00074">BlockHeader::compression</a>, <a class="el" href="context_8h_source.html#l00304">aaruformat_context::compression_enabled</a>, <a class="el" href="data_8h_source.html#l00079">BlockHeader::crc64</a>, <a class="el" href="enums_8h_source.html#l00164">DataBlock</a>, <a class="el" href="context_8h_source.html#l00345">aaruformat_context::dirty_index_block</a>, <a class="el" href="context_8h_source.html#l00385">aaruformat_context::ec_data_block_offsets</a>, <a class="el" href="context_8h_source.html#l00386">aaruformat_context::ec_data_block_sizes</a>, <a class="el" href="context_8h_source.html#l00384">aaruformat_context::ec_data_parity</a>, <a class="el" href="context_8h_source.html#l00387">aaruformat_context::ec_data_shard_crcs</a>, <a class="el" href="context_8h_source.html#l00382">aaruformat_context::ec_data_shard_size</a>, <a class="el" href="context_8h_source.html#l00388">aaruformat_context::ec_data_stripe_counts</a>, <a class="el" href="context_8h_source.html#l00390">aaruformat_context::ec_data_stripes</a>, <a class="el" href="context_8h_source.html#l00380">aaruformat_context::ec_K</a>, <a class="el" href="context_8h_source.html#l00381">aaruformat_context::ec_M</a>, <a class="el" href="context_8h_source.html#l00306">aaruformat_context::has_zstd_blocks</a>, <a class="el" href="data_8h_source.html#l00072">BlockHeader::identifier</a>, <a class="el" href="context_8h_source.html#l00179">aaruformat_context::imageStream</a>, <a class="el" href="context_8h_source.html#l00255">aaruformat_context::index_entries</a>, <a class="el" href="sha256_8c_source.html#l00031">K</a>, <a class="el" href="enums_8h_source.html#l00034">kCompressionLzma</a>, <a class="el" href="enums_8h_source.html#l00033">kCompressionNone</a>, <a class="el" href="enums_8h_source.html#l00037">kCompressionZstd</a>, <a class="el" href="enums_8h_source.html#l00151">kDataTypeErasureParity</a>, <a class="el" href="data_8h_source.html#l00077">BlockHeader::length</a>, <a class="el" href="context_8h_source.html#l00302">aaruformat_context::lzma_dict_size</a>, <a class="el" href="consts_8h_source.html#l00082">LZMA_PROPERTIES_LENGTH</a>, <a class="el" href="internal_8h_source.html#l00023">LZMA_THREADS</a>, <a class="el" href="context_8h_source.html#l00285">aaruformat_context::next_block_position</a>, <a class="el" href="context_8h_source.html#l00308">aaruformat_context::num_threads</a>, <a class="el" href="erasure_8h_source.html#l00089">StripeDataBlockEntry::offset</a>, <a class="el" href="erasure_8h_source.html#l00100">StripeParityBlockEntry::offset</a>, <a class="el" href="erasure_8h_source.html#l00090">StripeDataBlockEntry::onDiskSize</a>, <a class="el" href="data_8h_source.html#l00075">BlockHeader::sectorSize</a>, <a class="el" href="erasure_8h_source.html#l00091">StripeDataBlockEntry::shardCrc64</a>, <a class="el" href="data_8h_source.html#l00073">BlockHeader::type</a>, <a class="el" href="context_8h_source.html#l00305">aaruformat_context::use_zstd</a>, <a class="el" href="context_8h_source.html#l00192">aaruformat_context::user_data_ddt_header</a>, and <a class="el" href="context_8h_source.html#l00307">aaruformat_context::zstd_level</a>.</p>
<p class="reference">Referenced by <a class="el" href="erasure_8c_source.html#l00228">ec_accumulate_data_block()</a>, and <a class="el" href="erasure_8c_source.html#l00690">ec_finalize()</a>.</p>
</div>
</div>
<a id="ae5fe558b49013df6e932278061a2ab53" name="ae5fe558b49013df6e932278061a2ab53"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae5fe558b49013df6e932278061a2ab53">&#9670;&#160;</a></span>ec_free()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ec_free </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structaaruformat__context.html">aaruformat_context</a> *</td> <td class="paramname"><span class="paramname"><em>ctx</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Free all erasure coding state from the context. </p>
<p>Called from <a class="el" href="decls_8h.html#a6823e139f81a9dfd08efcb0e9b213a49" title="Close an Aaru image context, flushing pending data structures and releasing resources.">aaruf_close()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>Context. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="erasure_8c_source.html#l00876">876</a> of file <a class="el" href="erasure_8c_source.html">erasure.c</a>.</p>
<p class="reference">References <a class="el" href="context_8h_source.html#l00396">aaruformat_context::ec_block_lookup</a>, <a class="el" href="context_8h_source.html#l00385">aaruformat_context::ec_data_block_offsets</a>, <a class="el" href="context_8h_source.html#l00386">aaruformat_context::ec_data_block_sizes</a>, <a class="el" href="context_8h_source.html#l00384">aaruformat_context::ec_data_parity</a>, <a class="el" href="context_8h_source.html#l00387">aaruformat_context::ec_data_shard_crcs</a>, <a class="el" href="context_8h_source.html#l00388">aaruformat_context::ec_data_stripe_counts</a>, <a class="el" href="context_8h_source.html#l00390">aaruformat_context::ec_data_stripes</a>, <a class="el" href="context_8h_source.html#l00391">aaruformat_context::ec_enabled</a>, <a class="el" href="context_8h_source.html#l00380">aaruformat_context::ec_K</a>, <a class="el" href="context_8h_source.html#l00381">aaruformat_context::ec_M</a>, <a class="el" href="context_8h_source.html#l00395">aaruformat_context::ec_read_stripe_count</a>, <a class="el" href="context_8h_source.html#l00394">aaruformat_context::ec_read_stripes</a>, <a class="el" href="context_8h_source.html#l00397">aaruformat_context::ec_recovery_available</a>, <a class="el" href="context_8h_source.html#l00383">aaruformat_context::ec_rs_ctx</a>, and <a class="el" href="reed__solomon_8c_source.html#l00201">rs_free()</a>.</p>
<p class="reference">Referenced by <a class="el" href="close_8c_source.html#l00080">aaruf_close()</a>.</p>
</div>
</div>
<a id="a18f424702fcd85725ee26c1cf7e253db" name="a18f424702fcd85725ee26c1cf7e253db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a18f424702fcd85725ee26c1cf7e253db">&#9670;&#160;</a></span>ec_load_ecmb()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ec_load_ecmb </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structaaruformat__context.html">aaruformat_context</a> *</td> <td class="paramname"><span class="paramname"><em>ctx</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Try to load the ECMB from the recovery footer at EOF. </p>
<p>Reads the last 160 bytes, checks for footerMagic, parses ECMB, and populates the ec_read_* fields and block lookup hashmap. Called from <a class="el" href="decls_8h.html#a5cea94dcb9c08a646f7f7160ec8418de" title="Opens an existing AaruFormat image file.">aaruf_open()</a>. </p>
<p class="definition">Definition at line <a class="el" href="erasure_8c_source.html#l00941">941</a> of file <a class="el" href="erasure_8c_source.html">erasure.c</a>.</p>
<p class="reference">References <a class="el" href="consts_8h_source.html#l00115">AARU_RECOVERY_FOOTER_MAGIC</a>, <a class="el" href="crc64_8c_source.html#l00160">aaruf_crc64_data()</a>, <a class="el" href="internal_8h_source.html#l00046">aaruf_fseek()</a>, <a class="el" href="internal_8h_source.html#l00052">aaruf_ftell()</a>, <a class="el" href="lzma_8c_source.html#l00039">aaruf_lzma_decode_buffer()</a>, <a class="el" href="zstd_8c_source.html#l00034">aaruf_zstd_decode_buffer()</a>, <a class="el" href="erasure_8c_source.html#l00048">EcReadStripe::actual_k</a>, <a class="el" href="erasure_8h_source.html#l00052">ErasureCodingMapHeader::algorithm</a>, <a class="el" href="erasure_8c_source.html#l00056">EcBlockLookupEntry::block_offset</a>, <a class="el" href="erasure_8h_source.html#l00055">ErasureCodingMapHeader::cmpLength</a>, <a class="el" href="erasure_8h_source.html#l00054">ErasureCodingMapHeader::compression</a>, <a class="el" href="erasure_8h_source.html#l00058">ErasureCodingMapHeader::crc64</a>, <a class="el" href="erasure_8c_source.html#l00049">EcReadStripe::data_entries</a>, <a class="el" href="context_8h_source.html#l00379">aaruformat_context::ec_algorithm</a>, <a class="el" href="context_8h_source.html#l00396">aaruformat_context::ec_block_lookup</a>, <a class="el" href="context_8h_source.html#l00382">aaruformat_context::ec_data_shard_size</a>, <a class="el" href="context_8h_source.html#l00380">aaruformat_context::ec_K</a>, <a class="el" href="context_8h_source.html#l00381">aaruformat_context::ec_M</a>, <a class="el" href="context_8h_source.html#l00395">aaruformat_context::ec_read_stripe_count</a>, <a class="el" href="context_8h_source.html#l00394">aaruformat_context::ec_read_stripes</a>, <a class="el" href="context_8h_source.html#l00397">aaruformat_context::ec_recovery_available</a>, <a class="el" href="context_8h_source.html#l00383">aaruformat_context::ec_rs_ctx</a>, <a class="el" href="erasure_8h_source.html#l00118">AaruRecoveryFooter::ecmbOffset</a>, <a class="el" href="enums_8h_source.html#l00187">ErasureCodingMapBlock</a>, <a class="el" href="erasure_8h_source.html#l00122">AaruRecoveryFooter::footerMagic</a>, <a class="el" href="erasure_8h_source.html#l00070">StripeGroupDescriptor::groupType</a>, <a class="el" href="erasure_8h_source.html#l00051">ErasureCodingMapHeader::identifier</a>, <a class="el" href="context_8h_source.html#l00179">aaruformat_context::imageStream</a>, <a class="el" href="erasure_8h_source.html#l00071">StripeGroupDescriptor::K</a>, <a class="el" href="enums_8h_source.html#l00034">kCompressionLzma</a>, <a class="el" href="enums_8h_source.html#l00033">kCompressionNone</a>, <a class="el" href="enums_8h_source.html#l00037">kCompressionZstd</a>, <a class="el" href="enums_8h_source.html#l00338">kECGroupData</a>, <a class="el" href="erasure_8h_source.html#l00056">ErasureCodingMapHeader::length</a>, <a class="el" href="consts_8h_source.html#l00082">LZMA_PROPERTIES_LENGTH</a>, <a class="el" href="erasure_8h_source.html#l00072">StripeGroupDescriptor::M</a>, <a class="el" href="erasure_8h_source.html#l00089">StripeDataBlockEntry::offset</a>, <a class="el" href="erasure_8h_source.html#l00100">StripeParityBlockEntry::offset</a>, <a class="el" href="erasure_8c_source.html#l00050">EcReadStripe::parity_offsets</a>, <a class="el" href="erasure_8c_source.html#l00058">EcBlockLookupEntry::position</a>, <a class="el" href="reed__solomon_8c_source.html#l00150">rs_create()</a>, <a class="el" href="erasure_8h_source.html#l00073">StripeGroupDescriptor::shardSize</a>, <a class="el" href="erasure_8c_source.html#l00057">EcBlockLookupEntry::stripe_index</a>, <a class="el" href="erasure_8h_source.html#l00074">StripeGroupDescriptor::stripeCount</a>, <a class="el" href="erasure_8h_source.html#l00053">ErasureCodingMapHeader::stripeGroupCount</a>, and <a class="el" href="log_8h_source.html#l00025">TRACE</a>.</p>
<p class="reference">Referenced by <a class="el" href="open_8c_source.html#l00236">aaruf_open()</a>.</p>
</div>
</div>
<a id="a7a9ac507738cdf72e951f152edd4d233" name="a7a9ac507738cdf72e951f152edd4d233"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7a9ac507738cdf72e951f152edd4d233">&#9670;&#160;</a></span>ec_recover_data_block()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int32_t ec_recover_data_block </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structaaruformat__context.html">aaruformat_context</a> *</td> <td class="paramname"><span class="paramname"><em>ctx</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>block_offset</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>offset</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *</td> <td class="paramname"><span class="paramname"><em>data</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t *</td> <td class="paramname"><span class="paramname"><em>length</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>sector_status</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Attempt to recover a data block that failed decompression or CRC verification. </p>
<p>Looks up the block's stripe via the ECMB, reads surviving stripe members + parity, RS-decodes the erased shard, and decompresses the recovered block.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>Context with ec_recovery_available == true. </td></tr>
<tr><td class="paramname">block_offset</td><td>File offset of the corrupted block. </td></tr>
<tr><td class="paramname">offset</td><td>Sector offset within the block. </td></tr>
<tr><td class="paramname">data</td><td>Output buffer for the recovered sector. </td></tr>
<tr><td class="paramname">length</td><td>Output: bytes written to data. </td></tr>
<tr><td class="paramname">sector_status</td><td>Sector status from DDT. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>AARUF_STATUS_OK on success, negative error code on failure. </dd></dl>
<p class="definition">Definition at line <a class="el" href="erasure_8c_source.html#l01145">1145</a> of file <a class="el" href="erasure_8c_source.html">erasure.c</a>.</p>
<p class="reference">References <a class="el" href="crc64_8c_source.html#l00160">aaruf_crc64_data()</a>, <a class="el" href="errors_8h_source.html#l00056">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a>, <a class="el" href="errors_8h_source.html#l00048">AARUF_ERROR_NOT_ENOUGH_MEMORY</a>, <a class="el" href="flac_8c_source.html#l00048">aaruf_flac_decode_redbook_buffer()</a>, <a class="el" href="internal_8h_source.html#l00046">aaruf_fseek()</a>, <a class="el" href="lzma_8c_source.html#l00039">aaruf_lzma_decode_buffer()</a>, <a class="el" href="errors_8h_source.html#l00081">AARUF_STATUS_OK</a>, <a class="el" href="zstd_8c_source.html#l00034">aaruf_zstd_decode_buffer()</a>, <a class="el" href="erasure_8c_source.html#l00048">EcReadStripe::actual_k</a>, <a class="el" href="lru_8c_source.html#l00048">add_to_cache_uint64()</a>, <a class="el" href="context_8h_source.html#l00260">aaruformat_context::block_cache</a>, <a class="el" href="context_8h_source.html#l00259">aaruformat_context::block_header_cache</a>, <a class="el" href="data_8h_source.html#l00076">BlockHeader::cmpLength</a>, <a class="el" href="data_8h_source.html#l00074">BlockHeader::compression</a>, <a class="el" href="data_8h_source.html#l00079">BlockHeader::crc64</a>, <a class="el" href="erasure_8c_source.html#l00049">EcReadStripe::data_entries</a>, <a class="el" href="context_8h_source.html#l00396">aaruformat_context::ec_block_lookup</a>, <a class="el" href="context_8h_source.html#l00382">aaruformat_context::ec_data_shard_size</a>, <a class="el" href="context_8h_source.html#l00380">aaruformat_context::ec_K</a>, <a class="el" href="context_8h_source.html#l00381">aaruformat_context::ec_M</a>, <a class="el" href="context_8h_source.html#l00394">aaruformat_context::ec_read_stripes</a>, <a class="el" href="context_8h_source.html#l00397">aaruformat_context::ec_recovery_available</a>, <a class="el" href="context_8h_source.html#l00398">aaruformat_context::ec_recovery_in_progress</a>, <a class="el" href="context_8h_source.html#l00383">aaruformat_context::ec_rs_ctx</a>, <a class="el" href="context_8h_source.html#l00179">aaruformat_context::imageStream</a>, <a class="el" href="sha256_8c_source.html#l00031">K</a>, <a class="el" href="enums_8h_source.html#l00035">kCompressionFlac</a>, <a class="el" href="enums_8h_source.html#l00034">kCompressionLzma</a>, <a class="el" href="enums_8h_source.html#l00033">kCompressionNone</a>, <a class="el" href="enums_8h_source.html#l00037">kCompressionZstd</a>, <a class="el" href="data_8h_source.html#l00077">BlockHeader::length</a>, <a class="el" href="consts_8h_source.html#l00082">LZMA_PROPERTIES_LENGTH</a>, <a class="el" href="erasure_8h_source.html#l00089">StripeDataBlockEntry::offset</a>, <a class="el" href="erasure_8h_source.html#l00090">StripeDataBlockEntry::onDiskSize</a>, <a class="el" href="erasure_8c_source.html#l00050">EcReadStripe::parity_offsets</a>, <a class="el" href="erasure_8c_source.html#l00058">EcBlockLookupEntry::position</a>, <a class="el" href="reed__solomon_8c_source.html#l00218">rs_decode()</a>, <a class="el" href="data_8h_source.html#l00075">BlockHeader::sectorSize</a>, <a class="el" href="erasure_8h_source.html#l00091">StripeDataBlockEntry::shardCrc64</a>, and <a class="el" href="erasure_8c_source.html#l00057">EcBlockLookupEntry::stripe_index</a>.</p>
<p class="reference">Referenced by <a class="el" href="read_8c_source.html#l00352">aaruf_read_sector()</a>.</p>
</div>
</div>
<a id="aed80b4dc1f360dbac00a5f73d350bf1a" name="aed80b4dc1f360dbac00a5f73d350bf1a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aed80b4dc1f360dbac00a5f73d350bf1a">&#9670;&#160;</a></span>ec_write_batch_parity()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void ec_write_batch_parity </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structaaruformat__context.html">aaruformat_context</a> *</td> <td class="paramname"><span class="paramname"><em>ctx</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint64_t *</td> <td class="paramname"><span class="paramname"><em>offsets</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint32_t *</td> <td class="paramname"><span class="paramname"><em>sizes</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t</td> <td class="paramname"><span class="paramname"><em>block_count</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t</td> <td class="paramname"><span class="paramname"><em>group_type</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16_t</td> <td class="paramname"><span class="paramname"><em>parity_data_type</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t **</td> <td class="paramname"><span class="paramname"><em>out_desc</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *</td> <td class="paramname"><span class="paramname"><em>out_desc_len</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structStripeGroupDescriptor.html">StripeGroupDescriptor</a> *</td> <td class="paramname"><span class="paramname"><em>out_group</em></span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel static">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Compute and write batch parity for a set of blocks already on disk. </p>
<p>Reads each block's on-disk bytes from file, computes RS parity, writes M parity DLBKs, returns serialized stripe descriptor bytes. </p>
<p class="definition">Definition at line <a class="el" href="erasure_8c_source.html#l00495">495</a> of file <a class="el" href="erasure_8c_source.html">erasure.c</a>.</p>
<p class="reference">References <a class="el" href="crc64_8c_source.html#l00160">aaruf_crc64_data()</a>, <a class="el" href="internal_8h_source.html#l00046">aaruf_fseek()</a>, <a class="el" href="internal_8h_source.html#l00052">aaruf_ftell()</a>, <a class="el" href="lzma_8c_source.html#l00065">aaruf_lzma_encode_buffer()</a>, <a class="el" href="zstd_8c_source.html#l00059">aaruf_zstd_encode_buffer()</a>, <a class="el" href="ddt_8h_source.html#l00154">DdtHeader2::blockAlignmentShift</a>, <a class="el" href="data_8h_source.html#l00078">BlockHeader::cmpCrc64</a>, <a class="el" href="data_8h_source.html#l00076">BlockHeader::cmpLength</a>, <a class="el" href="data_8h_source.html#l00074">BlockHeader::compression</a>, <a class="el" href="context_8h_source.html#l00304">aaruformat_context::compression_enabled</a>, <a class="el" href="data_8h_source.html#l00079">BlockHeader::crc64</a>, <a class="el" href="enums_8h_source.html#l00164">DataBlock</a>, <a class="el" href="context_8h_source.html#l00345">aaruformat_context::dirty_index_block</a>, <a class="el" href="context_8h_source.html#l00381">aaruformat_context::ec_M</a>, <a class="el" href="erasure_8h_source.html#l00070">StripeGroupDescriptor::groupType</a>, <a class="el" href="context_8h_source.html#l00306">aaruformat_context::has_zstd_blocks</a>, <a class="el" href="data_8h_source.html#l00072">BlockHeader::identifier</a>, <a class="el" href="context_8h_source.html#l00179">aaruformat_context::imageStream</a>, <a class="el" href="context_8h_source.html#l00255">aaruformat_context::index_entries</a>, <a class="el" href="erasure_8h_source.html#l00075">StripeGroupDescriptor::interleaveDepth</a>, <a class="el" href="erasure_8h_source.html#l00071">StripeGroupDescriptor::K</a>, <a class="el" href="enums_8h_source.html#l00034">kCompressionLzma</a>, <a class="el" href="enums_8h_source.html#l00033">kCompressionNone</a>, <a class="el" href="enums_8h_source.html#l00037">kCompressionZstd</a>, <a class="el" href="data_8h_source.html#l00077">BlockHeader::length</a>, <a class="el" href="context_8h_source.html#l00302">aaruformat_context::lzma_dict_size</a>, <a class="el" href="consts_8h_source.html#l00082">LZMA_PROPERTIES_LENGTH</a>, <a class="el" href="internal_8h_source.html#l00023">LZMA_THREADS</a>, <a class="el" href="erasure_8h_source.html#l00072">StripeGroupDescriptor::M</a>, <a class="el" href="context_8h_source.html#l00308">aaruformat_context::num_threads</a>, <a class="el" href="erasure_8h_source.html#l00089">StripeDataBlockEntry::offset</a>, <a class="el" href="erasure_8h_source.html#l00100">StripeParityBlockEntry::offset</a>, <a class="el" href="erasure_8h_source.html#l00090">StripeDataBlockEntry::onDiskSize</a>, <a class="el" href="reed__solomon_8c_source.html#l00150">rs_create()</a>, <a class="el" href="reed__solomon_8c_source.html#l00213">rs_encode_incremental()</a>, <a class="el" href="reed__solomon_8c_source.html#l00201">rs_free()</a>, <a class="el" href="reed__solomon_8c_source.html#l00208">rs_get_coefficient()</a>, <a class="el" href="erasure_8h_source.html#l00091">StripeDataBlockEntry::shardCrc64</a>, <a class="el" href="erasure_8h_source.html#l00073">StripeGroupDescriptor::shardSize</a>, <a class="el" href="erasure_8h_source.html#l00074">StripeGroupDescriptor::stripeCount</a>, <a class="el" href="data_8h_source.html#l00073">BlockHeader::type</a>, <a class="el" href="context_8h_source.html#l00305">aaruformat_context::use_zstd</a>, <a class="el" href="context_8h_source.html#l00192">aaruformat_context::user_data_ddt_header</a>, and <a class="el" href="context_8h_source.html#l00307">aaruformat_context::zstd_level</a>.</p>
<p class="reference">Referenced by <a class="el" href="erasure_8c_source.html#l00690">ec_finalize()</a>.</p>
</div>
</div>
<a name="doc-var-members" id="doc-var-members"></a><h2 id="header-doc-var-members" class="groupheader">Variable Documentation</h2>
<a id="a1883da545c74667f3438d8e48b195aa1" name="a1883da545c74667f3438d8e48b195aa1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1883da545c74667f3438d8e48b195aa1">&#9670;&#160;</a></span>ec_stripe_icd</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">UT_icd ec_stripe_icd = {sizeof(uint8_t), NULL, NULL, NULL}</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel static">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="erasure_8c_source.html#l00065">65</a> of file <a class="el" href="erasure_8c_source.html">erasure.c</a>.</p>
<p class="reference">Referenced by <a class="el" href="erasure_8c_source.html#l00082">aaruf_set_erasure_coding()</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a href="erasure_8c.html">erasure.c</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>