mirror of
https://github.com/aaru-dps/libaaruformat.git
synced 2026-07-09 02:16:24 +00:00
377 lines
39 KiB
HTML
377 lines
39 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: include/erasure_internal.h 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__internal_8h.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_internal.h File Reference</div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<div class="textblock"><code>#include "<a class="el" href="context_8h_source.html">aaruformat/context.h</a>"</code><br />
|
|
<code>#include "<a class="el" href="data_8h_source.html">aaruformat/structs/data.h</a>"</code><br />
|
|
</div>
|
|
<p><a href="erasure__internal_8h_source.html">Go to the source code of this file.</a></p>
|
|
<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: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: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: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: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>
|
|
<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>
|
|
</table>
|
|
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
|
|
<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="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="erasure_8c.html#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>
|
|
</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_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a href="erasure__internal_8h.html">erasure_internal.h</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>
|