mirror of
https://github.com/aaru-dps/libaaruformat.git
synced 2026-09-16 11:54:18 +00:00
733 lines
68 KiB
HTML
733 lines
68 KiB
HTML
<!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"> 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 <stdlib.h></code><br />
|
||
<code>#include <string.h></code><br />
|
||
<code>#include "<a class="el" href="aaruformat_8h_source.html">aaruformat.h</a>"</code><br />
|
||
<code>#include "<a class="el" href="context_8h_source.html">aaruformat/context.h</a>"</code><br />
|
||
<code>#include "<a class="el" href="consts_8h_source.html">aaruformat/consts.h</a>"</code><br />
|
||
<code>#include "<a class="el" href="enums_8h_source.html">aaruformat/enums.h</a>"</code><br />
|
||
<code>#include "<a class="el" href="errors_8h_source.html">aaruformat/errors.h</a>"</code><br />
|
||
<code>#include "<a class="el" href="data_8h_source.html">aaruformat/structs/data.h</a>"</code><br />
|
||
<code>#include "<a class="el" href="ddt_8h_source.html">aaruformat/structs/ddt.h</a>"</code><br />
|
||
<code>#include "<a class="el" href="erasure_8h_source.html">aaruformat/structs/erasure.h</a>"</code><br />
|
||
<code>#include "<a class="el" href="index_8h_source.html">aaruformat/structs/index.h</a>"</code><br />
|
||
<code>#include "<a class="el" href="internal_8h_source.html">internal.h</a>"</code><br />
|
||
<code>#include "<a class="el" href="log_8h_source.html">log.h</a>"</code><br />
|
||
<code>#include "<a class="el" href="gf256_8h_source.html">lib/gf256.h</a>"</code><br />
|
||
<code>#include "<a class="el" href="reed__solomon_8h_source.html">lib/reed_solomon.h</a>"</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  </td><td class="memItemRight"><a class="el" href="structEcReadStripe.html">EcReadStripe</a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </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  </td><td class="memItemRight"><a class="el" href="structEcBlockLookupEntry.html">EcBlockLookupEntry</a></td></tr>
|
||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Hash table entry mapping block file offset -> 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 </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 </td><td class="memItemRight"><a class="el" href="#a2f164deb906da3861ed577a951149a23">EcReadStripe</a></td></tr>
|
||
<tr class="memdesc:a2f164deb906da3861ed577a951149a23"><td class="mdescLeft"> </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 </td><td class="memItemRight"><a class="el" href="#a49845afc245ef4c7570c1a59b8e2c893">EcBlockLookupEntry</a></td></tr>
|
||
<tr class="memdesc:a49845afc245ef4c7570c1a59b8e2c893"><td class="mdescLeft"> </td><td class="mdescRight">Hash table entry mapping block file offset -> 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 </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"> </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 </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"> </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 </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"> </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 </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"> </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 </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"> </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 </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"> </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 </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"> </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 </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"> </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 </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"> </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 </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"> </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 </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">◆ </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> )</td>
|
||
</tr>
|
||
</table>
|
||
</div><div class="memdoc">
|
||
<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span>(desc) { memcpy(wp, &(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">◆ </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 -> stripe index + position. </p>
|
||
|
||
</div>
|
||
</div>
|
||
<a id="a2f164deb906da3861ed577a951149a23" name="a2f164deb906da3861ed577a951149a23"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#a2f164deb906da3861ed577a951149a23">◆ </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">◆ </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> )</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 (>= 1). </td></tr>
|
||
<tr><td class="paramname">M</td><td>Parity blocks per stripe (>= 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">◆ </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> )</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 (~16–40) 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">◆ </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> )</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">◆ </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> )</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">◆ </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">◆ </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> )</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">◆ </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">◆ </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">◆ </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> )</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">◆ </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> )</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">◆ </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>
|