mirror of
https://github.com/amadvance/snapraid.git
synced 2026-10-26 19:01:57 -04:00
Auto update
This commit is contained in:
parent
7740ab0d5d
commit
bdbe4f70fa
204 changed files with 12214 additions and 12085 deletions
|
|
@ -31,13 +31,13 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">709</td>
|
||||
<td class="headerCovTableEntry">775</td>
|
||||
<td class="headerCovTableEntry">711</td>
|
||||
<td class="headerCovTableEntry">777</td>
|
||||
<td class="headerCovTableEntryHi">91.5 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">9</td>
|
||||
|
|
@ -73,22 +73,22 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#68">blockcmp</a></td>
|
||||
<td class="coverFnHi">473119</td>
|
||||
<td class="coverFnHi">473361</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#160">repair_step</a></td>
|
||||
<td class="coverFnHi">252549</td>
|
||||
<td class="coverFnHi">252783</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#97">is_hash_matching</a></td>
|
||||
<td class="coverFnHi">214644</td>
|
||||
<td class="coverFnHi">214767</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#1914">state_check</a></td>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#1936">state_check</a></td>
|
||||
<td class="coverFnHi">120</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#846">state_check_process</a></td>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#848">state_check_process</a></td>
|
||||
<td class="coverFnHi">118</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">709</td>
|
||||
<td class="headerCovTableEntry">775</td>
|
||||
<td class="headerCovTableEntry">711</td>
|
||||
<td class="headerCovTableEntry">777</td>
|
||||
<td class="headerCovTableEntryHi">91.5 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">9</td>
|
||||
|
|
@ -65,7 +65,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#68">blockcmp</a></td>
|
||||
<td class="coverFnHi">473119</td>
|
||||
<td class="coverFnHi">473361</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#595">file_post</a></td>
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#97">is_hash_matching</a></td>
|
||||
<td class="coverFnHi">214644</td>
|
||||
<td class="coverFnHi">214767</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#140">is_parity_matching</a></td>
|
||||
|
|
@ -85,14 +85,14 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#160">repair_step</a></td>
|
||||
<td class="coverFnHi">252549</td>
|
||||
<td class="coverFnHi">252783</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#1914">state_check</a></td>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#1936">state_check</a></td>
|
||||
<td class="coverFnHi">120</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#846">state_check_process</a></td>
|
||||
<td class="coverFn"><a href="check.c.gcov.html#848">state_check_process</a></td>
|
||||
<td class="coverFnHi">118</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">9</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">9</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">9</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">5</td>
|
||||
|
|
@ -60,12 +60,12 @@
|
|||
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="dry.c.gcov.html#40">dry_data_reader</a></td>
|
||||
<td class="coverFnHi">42601</td>
|
||||
<td class="coverFn"><a href="dry.c.gcov.html#139">dry_parity_reader</a></td>
|
||||
<td class="coverFnHi">42579</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="dry.c.gcov.html#139">dry_parity_reader</a></td>
|
||||
<td class="coverFnHi">42274</td>
|
||||
<td class="coverFn"><a href="dry.c.gcov.html#40">dry_data_reader</a></td>
|
||||
<td class="coverFnHi">42575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="dry.c.gcov.html#32">block_is_enabled</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">5</td>
|
||||
|
|
@ -65,11 +65,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="dry.c.gcov.html#40">dry_data_reader</a></td>
|
||||
<td class="coverFnHi">42601</td>
|
||||
<td class="coverFnHi">42575</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="dry.c.gcov.html#139">dry_parity_reader</a></td>
|
||||
<td class="coverFnHi">42274</td>
|
||||
<td class="coverFnHi">42579</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="dry.c.gcov.html#399">state_dry</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">5</td>
|
||||
|
|
@ -101,45 +101,45 @@
|
|||
<span class="lineNum"> 39 </span><span class="lineCov"> 7102 : return 1;</span>
|
||||
<a name="40"><span class="lineNum"> 40 </span> : }</a>
|
||||
<span class="lineNum"> 41 </span> :
|
||||
<span class="lineNum"> 42 </span><span class="lineCov"> 42601 : static void dry_data_reader(struct snapraid_worker* worker, struct snapraid_task* task)</span>
|
||||
<span class="lineNum"> 42 </span><span class="lineCov"> 42575 : static void dry_data_reader(struct snapraid_worker* worker, struct snapraid_task* task)</span>
|
||||
<span class="lineNum"> 43 </span> : {
|
||||
<span class="lineNum"> 44 </span><span class="lineCov"> 42601 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 45 </span><span class="lineCov"> 42601 : struct snapraid_state* state = io->state;</span>
|
||||
<span class="lineNum"> 46 </span><span class="lineCov"> 42601 : struct snapraid_handle* handle = worker->handle;</span>
|
||||
<span class="lineNum"> 47 </span><span class="lineCov"> 42601 : struct snapraid_disk* disk = handle->disk;</span>
|
||||
<span class="lineNum"> 48 </span><span class="lineCov"> 42601 : block_off_t blockcur = task->position;</span>
|
||||
<span class="lineNum"> 49 </span><span class="lineCov"> 42601 : unsigned char* buffer = task->buffer;</span>
|
||||
<span class="lineNum"> 44 </span><span class="lineCov"> 42575 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 45 </span><span class="lineCov"> 42575 : struct snapraid_state* state = io->state;</span>
|
||||
<span class="lineNum"> 46 </span><span class="lineCov"> 42575 : struct snapraid_handle* handle = worker->handle;</span>
|
||||
<span class="lineNum"> 47 </span><span class="lineCov"> 42575 : struct snapraid_disk* disk = handle->disk;</span>
|
||||
<span class="lineNum"> 48 </span><span class="lineCov"> 42575 : block_off_t blockcur = task->position;</span>
|
||||
<span class="lineNum"> 49 </span><span class="lineCov"> 42575 : unsigned char* buffer = task->buffer;</span>
|
||||
<span class="lineNum"> 50 </span> : int ret;
|
||||
<span class="lineNum"> 51 </span> : char esc_buffer[ESC_MAX];
|
||||
<span class="lineNum"> 52 </span> :
|
||||
<span class="lineNum"> 53 </span> : /* if the disk position is not used */
|
||||
<span class="lineNum"> 54 </span><span class="lineCov"> 42601 : if (!disk) {</span>
|
||||
<span class="lineNum"> 54 </span><span class="lineCov"> 42575 : if (!disk) {</span>
|
||||
<span class="lineNum"> 55 </span> : /* use an empty block */
|
||||
<span class="lineNum"> 56 </span><span class="lineCov"> 4686 : memset(buffer, 0, state->block_size);</span>
|
||||
<span class="lineNum"> 57 </span><span class="lineCov"> 4686 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 58 </span><span class="lineCov"> 9917 : return;</span>
|
||||
<span class="lineNum"> 58 </span><span class="lineCov"> 9912 : return;</span>
|
||||
<span class="lineNum"> 59 </span> : }
|
||||
<span class="lineNum"> 60 </span> :
|
||||
<span class="lineNum"> 61 </span> : /* get the block */
|
||||
<span class="lineNum"> 62 </span><span class="lineCov"> 37915 : task->block = fs_par2block_find(disk, blockcur);</span>
|
||||
<span class="lineNum"> 62 </span><span class="lineCov"> 37889 : task->block = fs_par2block_find(disk, blockcur);</span>
|
||||
<span class="lineNum"> 63 </span> :
|
||||
<span class="lineNum"> 64 </span> : /* if the block is not used */
|
||||
<span class="lineNum"> 65 </span><span class="lineCov"> 37902 : if (!block_has_file(task->block)) {</span>
|
||||
<span class="lineNum"> 65 </span><span class="lineCov"> 37855 : if (!block_has_file(task->block)) {</span>
|
||||
<span class="lineNum"> 66 </span> : /* use an empty block */
|
||||
<span class="lineNum"> 67 </span><span class="lineCov"> 545 : memset(buffer, 0, state->block_size);</span>
|
||||
<span class="lineNum"> 68 </span><span class="lineCov"> 545 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 69 </span><span class="lineCov"> 545 : return;</span>
|
||||
<span class="lineNum"> 67 </span><span class="lineCov"> 540 : memset(buffer, 0, state->block_size);</span>
|
||||
<span class="lineNum"> 68 </span><span class="lineCov"> 540 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 69 </span><span class="lineCov"> 540 : return;</span>
|
||||
<span class="lineNum"> 70 </span> : }
|
||||
<span class="lineNum"> 71 </span> :
|
||||
<span class="lineNum"> 72 </span> : /* get the file of this block */
|
||||
<span class="lineNum"> 73 </span><span class="lineCov"> 37352 : task->file = fs_par2file_get(disk, blockcur, &task->file_pos);</span>
|
||||
<span class="lineNum"> 73 </span><span class="lineCov"> 37298 : task->file = fs_par2file_get(disk, blockcur, &task->file_pos);</span>
|
||||
<span class="lineNum"> 74 </span> :
|
||||
<span class="lineNum"> 75 </span> : /* if the file is different than the current one, close it */
|
||||
<span class="lineNum"> 76 </span><span class="lineCov"> 37365 : if (handle->file != 0 && handle->file != task->file) {</span>
|
||||
<span class="lineNum"> 76 </span><span class="lineCov"> 37356 : if (handle->file != 0 && handle->file != task->file) {</span>
|
||||
<span class="lineNum"> 77 </span> : /* keep a pointer at the file we are going to close for error reporting */
|
||||
<span class="lineNum"> 78 </span><span class="lineCov"> 15088 : struct snapraid_file* report = handle->file;</span>
|
||||
<span class="lineNum"> 79 </span><span class="lineCov"> 15088 : ret = handle_close(handle);</span>
|
||||
<span class="lineNum"> 80 </span><span class="lineCov"> 15084 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 78 </span><span class="lineCov"> 15083 : struct snapraid_file* report = handle->file;</span>
|
||||
<span class="lineNum"> 79 </span><span class="lineCov"> 15083 : ret = handle_close(handle);</span>
|
||||
<span class="lineNum"> 80 </span><span class="lineCov"> 15069 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 81 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 82 </span> : /* This one is really an unexpected error, because we are only reading */
|
||||
<span class="lineNum"> 83 </span> : /* and closing a descriptor should never fail */
|
||||
|
|
@ -162,8 +162,8 @@
|
|||
<span class="lineNum"> 100 </span> : }
|
||||
<span class="lineNum"> 101 </span> : }
|
||||
<span class="lineNum"> 102 </span> :
|
||||
<span class="lineNum"> 103 </span><span class="lineCov"> 37361 : ret = handle_open(handle, task->file, state->file_mode, log_error, 0);</span>
|
||||
<span class="lineNum"> 104 </span><span class="lineCov"> 37368 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 103 </span><span class="lineCov"> 37342 : ret = handle_open(handle, task->file, state->file_mode, log_error, 0);</span>
|
||||
<span class="lineNum"> 104 </span><span class="lineCov"> 37201 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 105 </span><span class="lineNoCov"> 0 : if (errno == EIO) {</span>
|
||||
<span class="lineNum"> 106 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 107 </span> : log_tag("error:%u:%s:%s: Open EIO error. %s\n", blockcur, disk->name, esc_tag(task->file->sub, esc_buffer), strerror(errno));
|
||||
|
|
@ -180,8 +180,8 @@
|
|||
<span class="lineNum"> 118 </span><span class="lineNoCov"> 0 : return;</span>
|
||||
<span class="lineNum"> 119 </span> : }
|
||||
<span class="lineNum"> 120 </span> :
|
||||
<span class="lineNum"> 121 </span><span class="lineCov"> 37368 : task->read_size = handle_read(handle, task->file_pos, buffer, state->block_size, log_error, 0);</span>
|
||||
<span class="lineNum"> 122 </span><span class="lineCov"> 37305 : if (task->read_size == -1) {</span>
|
||||
<span class="lineNum"> 121 </span><span class="lineCov"> 37201 : task->read_size = handle_read(handle, task->file_pos, buffer, state->block_size, log_error, 0);</span>
|
||||
<span class="lineNum"> 122 </span><span class="lineCov"> 37222 : if (task->read_size == -1) {</span>
|
||||
<span class="lineNum"> 123 </span><span class="lineNoCov"> 0 : if (errno == EIO) {</span>
|
||||
<span class="lineNum"> 124 </span><span class="lineNoCov"> 0 : log_tag("error:%u:%s:%s: Read EIO error at position %u. %s\n", blockcur, disk->name, esc_tag(task->file->sub, esc_buffer), task->file_pos, strerror(errno));</span>
|
||||
<span class="lineNum"> 125 </span><span class="lineNoCov"> 0 : log_error("Input/Output error in file '%s' at position '%u'\n", handle->path, task->file_pos);</span>
|
||||
|
|
@ -195,24 +195,24 @@
|
|||
<span class="lineNum"> 133 </span> : }
|
||||
<span class="lineNum"> 134 </span> :
|
||||
<span class="lineNum"> 135 </span> : /* store the path of the opened file */
|
||||
<span class="lineNum"> 136 </span><span class="lineCov"> 37305 : pathcpy(task->path, sizeof(task->path), handle->path);</span>
|
||||
<span class="lineNum"> 136 </span><span class="lineCov"> 37222 : pathcpy(task->path, sizeof(task->path), handle->path);</span>
|
||||
<span class="lineNum"> 137 </span> :
|
||||
<span class="lineNum"> 138 </span><span class="lineCov"> 37345 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 138 </span><span class="lineCov"> 37240 : task->state = TASK_STATE_DONE;</span>
|
||||
<a name="139"><span class="lineNum"> 139 </span> : }</a>
|
||||
<span class="lineNum"> 140 </span> :
|
||||
<span class="lineNum"> 141 </span><span class="lineCov"> 42274 : static void dry_parity_reader(struct snapraid_worker* worker, struct snapraid_task* task)</span>
|
||||
<span class="lineNum"> 141 </span><span class="lineCov"> 42579 : static void dry_parity_reader(struct snapraid_worker* worker, struct snapraid_task* task)</span>
|
||||
<span class="lineNum"> 142 </span> : {
|
||||
<span class="lineNum"> 143 </span><span class="lineCov"> 42274 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 144 </span><span class="lineCov"> 42274 : struct snapraid_state* state = io->state;</span>
|
||||
<span class="lineNum"> 145 </span><span class="lineCov"> 42274 : struct snapraid_parity_handle* parity_handle = worker->parity_handle;</span>
|
||||
<span class="lineNum"> 146 </span><span class="lineCov"> 42274 : unsigned level = parity_handle->level;</span>
|
||||
<span class="lineNum"> 147 </span><span class="lineCov"> 42274 : block_off_t blockcur = task->position;</span>
|
||||
<span class="lineNum"> 148 </span><span class="lineCov"> 42274 : unsigned char* buffer = task->buffer;</span>
|
||||
<span class="lineNum"> 143 </span><span class="lineCov"> 42579 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 144 </span><span class="lineCov"> 42579 : struct snapraid_state* state = io->state;</span>
|
||||
<span class="lineNum"> 145 </span><span class="lineCov"> 42579 : struct snapraid_parity_handle* parity_handle = worker->parity_handle;</span>
|
||||
<span class="lineNum"> 146 </span><span class="lineCov"> 42579 : unsigned level = parity_handle->level;</span>
|
||||
<span class="lineNum"> 147 </span><span class="lineCov"> 42579 : block_off_t blockcur = task->position;</span>
|
||||
<span class="lineNum"> 148 </span><span class="lineCov"> 42579 : unsigned char* buffer = task->buffer;</span>
|
||||
<span class="lineNum"> 149 </span> : int ret;
|
||||
<span class="lineNum"> 150 </span> :
|
||||
<span class="lineNum"> 151 </span> : /* read the parity */
|
||||
<span class="lineNum"> 152 </span><span class="lineCov"> 42274 : ret = parity_read(parity_handle, blockcur, buffer, state->block_size, log_error);</span>
|
||||
<span class="lineNum"> 153 </span><span class="lineCov"> 42574 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 152 </span><span class="lineCov"> 42579 : ret = parity_read(parity_handle, blockcur, buffer, state->block_size, log_error);</span>
|
||||
<span class="lineNum"> 153 </span><span class="lineCov"> 42483 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 154 </span><span class="lineNoCov"> 0 : if (errno == EIO) {</span>
|
||||
<span class="lineNum"> 155 </span><span class="lineNoCov"> 0 : log_tag("parity_error:%u:%s: Read EIO error. %s\n", blockcur, lev_config_name(level), strerror(errno));</span>
|
||||
<span class="lineNum"> 156 </span><span class="lineNoCov"> 0 : log_error("Input/Output error in parity '%s' at position '%u'\n", lev_config_name(level), blockcur);</span>
|
||||
|
|
@ -225,7 +225,7 @@
|
|||
<span class="lineNum"> 163 </span><span class="lineNoCov"> 0 : return;</span>
|
||||
<span class="lineNum"> 164 </span> : }
|
||||
<span class="lineNum"> 165 </span> :
|
||||
<span class="lineNum"> 166 </span><span class="lineCov"> 42574 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 166 </span><span class="lineCov"> 42483 : task->state = TASK_STATE_DONE;</span>
|
||||
<a name="167"><span class="lineNum"> 167 </span> : }</a>
|
||||
<span class="lineNum"> 168 </span> :
|
||||
<span class="lineNum"> 169 </span><span class="lineCov"> 2 : static int state_dry_process(struct snapraid_state* state, struct snapraid_parity_handle* parity_handle, block_off_t blockstart, block_off_t blockmax)</span>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">5</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">5</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">5</td>
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">597</td>
|
||||
<td class="headerCovTableEntry">598</td>
|
||||
<td class="headerCovTableEntry">632</td>
|
||||
<td class="headerCovTableEntryHi">94.5 %</td>
|
||||
<td class="headerCovTableEntryHi">94.6 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">67</td>
|
||||
|
|
@ -61,71 +61,71 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1098">extent_parity_inside_compare_unlock</a></td>
|
||||
<td class="coverFnHi">114575009</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#803">fs_lock</a></td>
|
||||
<td class="coverFnHi">53195526</td>
|
||||
<td class="coverFnHi">113415111</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#812">fs_unlock</a></td>
|
||||
<td class="coverFnHi">53195112</td>
|
||||
<td class="coverFnHi">53194752</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#803">fs_lock</a></td>
|
||||
<td class="coverFnHi">53193825</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#659">extent_file_compare</a></td>
|
||||
<td class="coverFnHi">45005658</td>
|
||||
<td class="coverFnHi">45007474</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1366">fs_file2block_get</a></td>
|
||||
<td class="coverFnHi">44945354</td>
|
||||
<td class="coverFnHi">44945861</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#646">extent_parity_compare</a></td>
|
||||
<td class="coverFnHi">44509325</td>
|
||||
<td class="coverFnHi">44510915</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1116">fs_par2extent_get_unlock</a></td>
|
||||
<td class="coverFnHi">39143508</td>
|
||||
<td class="coverFnHi">39142622</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1196">fs_par2file_find</a></td>
|
||||
<td class="coverFnHi">39036978</td>
|
||||
<td class="coverFnHi">39034767</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1378">fs_par2block_find</a></td>
|
||||
<td class="coverFnHi">27313631</td>
|
||||
<td class="coverFnHi">27313617</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1148">extent_file_inside_compare_unlock</a></td>
|
||||
<td class="coverFnHi">21310995</td>
|
||||
<td class="coverFnHi">21313929</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#170">filter_apply</a></td>
|
||||
<td class="coverFnHi">12457044</td>
|
||||
<td class="coverFnHi">12456472</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1171">fs_file2extent_get_unlock</a></td>
|
||||
<td class="coverFnHi">10336255</td>
|
||||
<td class="coverFnHi">10336367</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1238">fs_allocate</a></td>
|
||||
<td class="coverFnHi">9175178</td>
|
||||
<td class="coverFnHi">9175254</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#477">file_block_size</a></td>
|
||||
<td class="coverFnHi">6823038</td>
|
||||
<td class="coverFnHi">6820121</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#957">extent_file_check_foreach_unlock</a></td>
|
||||
<td class="coverFnHi">6584473</td>
|
||||
<td class="coverFnHi">6584561</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#907">extent_parity_check_foreach_unlock</a></td>
|
||||
<td class="coverFnHi">6584473</td>
|
||||
<td class="coverFnHi">6584561</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#195">filter_recurse</a></td>
|
||||
<td class="coverFnHi">6236629</td>
|
||||
<td class="coverFnHi">6236343</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#493">file_block_is_last</a></td>
|
||||
|
|
@ -133,55 +133,55 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1219">fs_file2par_find</a></td>
|
||||
<td class="coverFnHi">4869703</td>
|
||||
<td class="coverFnHi">4869735</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#615">extent_alloc</a></td>
|
||||
<td class="coverFnHi">3735289</td>
|
||||
<td class="coverFnHi">3735329</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#364">file_alloc</a></td>
|
||||
<td class="coverFnHi">3690991</td>
|
||||
<td class="coverFnHi">3690989</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#641">extent_free</a></td>
|
||||
<td class="coverFnHi">3564865</td>
|
||||
<td class="coverFnHi">3564905</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#415">file_free</a></td>
|
||||
<td class="coverFnHi">3543815</td>
|
||||
<td class="coverFnHi">3543813</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#229">filter_element</a></td>
|
||||
<td class="coverFnHi">3332859</td>
|
||||
<td class="coverFnHi">3332716</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#278">filter_path</a></td>
|
||||
<td class="coverFnHi">3329762</td>
|
||||
<td class="coverFnHi">3329619</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#339">filter_content</a></td>
|
||||
<td class="coverFnHi">3173372</td>
|
||||
<td class="coverFnHi">3173210</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#508">file_inode_compare_to_arg</a></td>
|
||||
<td class="coverFnHi">975235</td>
|
||||
<td class="coverFnHi">987374</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1409">time_compare</a></td>
|
||||
<td class="coverFnHi">691801</td>
|
||||
<td class="coverFnHi">675269</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1438">fmt_term</a></td>
|
||||
<td class="coverFnHi">355906</td>
|
||||
<td class="coverFnHi">356144</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#532">file_path_compare</a></td>
|
||||
<td class="coverFnHi">189475</td>
|
||||
<td class="coverFnHi">189473</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#151">filter_type</a></td>
|
||||
<td class="coverFnHi">125233</td>
|
||||
<td class="coverFnHi">125331</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#677">link_alloc</a></td>
|
||||
|
|
@ -193,27 +193,27 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1287">fs_deallocate</a></td>
|
||||
<td class="coverFnHi">106232</td>
|
||||
<td class="coverFnHi">106308</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#552">file_path_compare_to_arg</a></td>
|
||||
<td class="coverFnHi">97871</td>
|
||||
<td class="coverFnHi">103588</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#293">filter_existence</a></td>
|
||||
<td class="coverFnHi">80691</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#540">file_physical_compare</a></td>
|
||||
<td class="coverFnHi">53902</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#876">extent_disk_size_compare_unlock</a></td>
|
||||
<td class="coverFnHi">50514</td>
|
||||
<td class="coverFnHi">50518</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#466">file_name</a></td>
|
||||
<td class="coverFnHi">47954</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#540">file_physical_compare</a></td>
|
||||
<td class="coverFnHi">44212</td>
|
||||
<td class="coverFnHi">47970</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#318">filter_correctness</a></td>
|
||||
|
|
@ -225,11 +225,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#593">file_namestamp_compare</a></td>
|
||||
<td class="coverFnHi">23977</td>
|
||||
<td class="coverFnHi">23985</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#560">file_name_compare</a></td>
|
||||
<td class="coverFnHi">23977</td>
|
||||
<td class="coverFnHi">23985</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#570">file_stamp_compare</a></td>
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">597</td>
|
||||
<td class="headerCovTableEntry">598</td>
|
||||
<td class="headerCovTableEntry">632</td>
|
||||
<td class="headerCovTableEntryHi">94.5 %</td>
|
||||
<td class="headerCovTableEntryHi">94.6 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">67</td>
|
||||
|
|
@ -89,7 +89,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#615">extent_alloc</a></td>
|
||||
<td class="coverFnHi">3735289</td>
|
||||
<td class="coverFnHi">3735329</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#828">extent_disk_empty_compare_unlock</a></td>
|
||||
|
|
@ -97,39 +97,39 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#876">extent_disk_size_compare_unlock</a></td>
|
||||
<td class="coverFnHi">50514</td>
|
||||
<td class="coverFnHi">50518</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#957">extent_file_check_foreach_unlock</a></td>
|
||||
<td class="coverFnHi">6584473</td>
|
||||
<td class="coverFnHi">6584561</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#659">extent_file_compare</a></td>
|
||||
<td class="coverFnHi">45005658</td>
|
||||
<td class="coverFnHi">45007474</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1148">extent_file_inside_compare_unlock</a></td>
|
||||
<td class="coverFnHi">21310995</td>
|
||||
<td class="coverFnHi">21313929</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#641">extent_free</a></td>
|
||||
<td class="coverFnHi">3564865</td>
|
||||
<td class="coverFnHi">3564905</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#907">extent_parity_check_foreach_unlock</a></td>
|
||||
<td class="coverFnHi">6584473</td>
|
||||
<td class="coverFnHi">6584561</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#646">extent_parity_compare</a></td>
|
||||
<td class="coverFnHi">44509325</td>
|
||||
<td class="coverFnHi">44510915</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1098">extent_parity_inside_compare_unlock</a></td>
|
||||
<td class="coverFnHi">114575009</td>
|
||||
<td class="coverFnHi">113415111</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#364">file_alloc</a></td>
|
||||
<td class="coverFnHi">3690991</td>
|
||||
<td class="coverFnHi">3690989</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#493">file_block_is_last</a></td>
|
||||
|
|
@ -137,7 +137,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#477">file_block_size</a></td>
|
||||
<td class="coverFnHi">6823038</td>
|
||||
<td class="coverFnHi">6820121</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#430">file_copy</a></td>
|
||||
|
|
@ -149,7 +149,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#415">file_free</a></td>
|
||||
<td class="coverFnHi">3543815</td>
|
||||
<td class="coverFnHi">3543813</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#520">file_inode_compare</a></td>
|
||||
|
|
@ -157,27 +157,27 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#508">file_inode_compare_to_arg</a></td>
|
||||
<td class="coverFnHi">975235</td>
|
||||
<td class="coverFnHi">987374</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#466">file_name</a></td>
|
||||
<td class="coverFnHi">47954</td>
|
||||
<td class="coverFnHi">47970</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#560">file_name_compare</a></td>
|
||||
<td class="coverFnHi">23977</td>
|
||||
<td class="coverFnHi">23985</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#593">file_namestamp_compare</a></td>
|
||||
<td class="coverFnHi">23977</td>
|
||||
<td class="coverFnHi">23985</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#532">file_path_compare</a></td>
|
||||
<td class="coverFnHi">189475</td>
|
||||
<td class="coverFnHi">189473</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#552">file_path_compare_to_arg</a></td>
|
||||
<td class="coverFnHi">97871</td>
|
||||
<td class="coverFnHi">103588</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#604">file_pathstamp_compare</a></td>
|
||||
|
|
@ -185,7 +185,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#540">file_physical_compare</a></td>
|
||||
<td class="coverFnHi">44212</td>
|
||||
<td class="coverFnHi">53902</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#424">file_rename</a></td>
|
||||
|
|
@ -205,11 +205,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#170">filter_apply</a></td>
|
||||
<td class="coverFnHi">12457044</td>
|
||||
<td class="coverFnHi">12456472</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#339">filter_content</a></td>
|
||||
<td class="coverFnHi">3173372</td>
|
||||
<td class="coverFnHi">3173210</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#318">filter_correctness</a></td>
|
||||
|
|
@ -217,7 +217,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#229">filter_element</a></td>
|
||||
<td class="coverFnHi">3332859</td>
|
||||
<td class="coverFnHi">3332716</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#288">filter_emptydir</a></td>
|
||||
|
|
@ -233,11 +233,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#278">filter_path</a></td>
|
||||
<td class="coverFnHi">3329762</td>
|
||||
<td class="coverFnHi">3329619</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#195">filter_recurse</a></td>
|
||||
<td class="coverFnHi">6236629</td>
|
||||
<td class="coverFnHi">6236343</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#283">filter_subdir</a></td>
|
||||
|
|
@ -245,7 +245,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#151">filter_type</a></td>
|
||||
<td class="coverFnHi">125233</td>
|
||||
<td class="coverFnHi">125331</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1429">fmt_poll</a></td>
|
||||
|
|
@ -253,11 +253,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1438">fmt_term</a></td>
|
||||
<td class="coverFnHi">355906</td>
|
||||
<td class="coverFnHi">356144</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1238">fs_allocate</a></td>
|
||||
<td class="coverFnHi">9175178</td>
|
||||
<td class="coverFnHi">9175254</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1066">fs_check</a></td>
|
||||
|
|
@ -265,19 +265,19 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1287">fs_deallocate</a></td>
|
||||
<td class="coverFnHi">106232</td>
|
||||
<td class="coverFnHi">106308</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1366">fs_file2block_get</a></td>
|
||||
<td class="coverFnHi">44945354</td>
|
||||
<td class="coverFnHi">44945861</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1171">fs_file2extent_get_unlock</a></td>
|
||||
<td class="coverFnHi">10336255</td>
|
||||
<td class="coverFnHi">10336367</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1219">fs_file2par_find</a></td>
|
||||
<td class="coverFnHi">4869703</td>
|
||||
<td class="coverFnHi">4869735</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#841">fs_is_empty</a></td>
|
||||
|
|
@ -285,19 +285,19 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#803">fs_lock</a></td>
|
||||
<td class="coverFnHi">53195526</td>
|
||||
<td class="coverFnHi">53193825</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1378">fs_par2block_find</a></td>
|
||||
<td class="coverFnHi">27313631</td>
|
||||
<td class="coverFnHi">27313617</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1116">fs_par2extent_get_unlock</a></td>
|
||||
<td class="coverFnHi">39143508</td>
|
||||
<td class="coverFnHi">39142622</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1196">fs_par2file_find</a></td>
|
||||
<td class="coverFnHi">39036978</td>
|
||||
<td class="coverFnHi">39034767</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#889">fs_size</a></td>
|
||||
|
|
@ -305,7 +305,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#812">fs_unlock</a></td>
|
||||
<td class="coverFnHi">53195112</td>
|
||||
<td class="coverFnHi">53194752</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#677">link_alloc</a></td>
|
||||
|
|
@ -333,7 +333,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.c.gcov.html#1409">time_compare</a></td>
|
||||
<td class="coverFnHi">691801</td>
|
||||
<td class="coverFnHi">675269</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">41</td>
|
||||
|
|
@ -61,67 +61,67 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#637">block_sizeof</a></td>
|
||||
<td class="coverFnHi">58065128</td>
|
||||
<td class="coverFnHi">58065229</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#772">file_block</a></td>
|
||||
<td class="coverFnHi">54351316</td>
|
||||
<td class="coverFnHi">54351162</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#648">block_state_get</a></td>
|
||||
<td class="coverFnHi">52304023</td>
|
||||
<td class="coverFnHi">52305826</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#727">file_flag_has</a></td>
|
||||
<td class="coverFnHi">34089332</td>
|
||||
<td class="coverFnHi">34102051</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#659">block_state_set</a></td>
|
||||
<td class="coverFnHi">19117096</td>
|
||||
<td class="coverFnHi">19117692</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#694">block_has_file</a></td>
|
||||
<td class="coverFnHi">14591493</td>
|
||||
<td class="coverFnHi">14589756</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#707">block_has_invalid_parity</a></td>
|
||||
<td class="coverFnHi">12320585</td>
|
||||
<td class="coverFnHi">12320925</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1027">fs_par2file_get</a></td>
|
||||
<td class="coverFnHi">11723835</td>
|
||||
<td class="coverFnHi">11722518</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#621">hash_invalid_set</a></td>
|
||||
<td class="coverFnHi">9234067</td>
|
||||
<td class="coverFnHi">9234143</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#847">file_stamp_hash</a></td>
|
||||
<td class="coverFnHi">6275421</td>
|
||||
<td class="coverFnHi">6275620</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#732">file_flag_set</a></td>
|
||||
<td class="coverFnHi">5295048</td>
|
||||
<td class="coverFnHi">5303183</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1193">info_get</a></td>
|
||||
<td class="coverFnHi">5098669</td>
|
||||
<td class="coverFnHi">5098731</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#818">file_inode_hash</a></td>
|
||||
<td class="coverFnHi">5042449</td>
|
||||
<td class="coverFnHi">5055357</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1051">fs_file2par_get</a></td>
|
||||
<td class="coverFnHi">4755492</td>
|
||||
<td class="coverFnHi">4755524</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#839">file_path_hash</a></td>
|
||||
<td class="coverFnHi">3886182</td>
|
||||
<td class="coverFnHi">3891897</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#510">filter_hidden</a></td>
|
||||
<td class="coverFnHi">3173372</td>
|
||||
<td class="coverFnHi">3173210</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#682">block_has_past_hash</a></td>
|
||||
|
|
@ -129,43 +129,43 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#669">block_has_updated_hash</a></td>
|
||||
<td class="coverFnHi">2217099</td>
|
||||
<td class="coverFnHi">2218229</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1148">info_get_rehash</a></td>
|
||||
<td class="coverFnHi">2046851</td>
|
||||
<td class="coverFnHi">2046849</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1182">info_set</a></td>
|
||||
<td class="coverFnHi">1698121</td>
|
||||
<td class="coverFnHi">1698196</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1130">info_get_time</a></td>
|
||||
<td class="coverFnHi">883203</td>
|
||||
<td class="coverFnHi">883145</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#589">hash_is_zero</a></td>
|
||||
<td class="coverFnHi">760108</td>
|
||||
<td class="coverFnHi">760608</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#567">hash_is_invalid</a></td>
|
||||
<td class="coverFnHi">758645</td>
|
||||
<td class="coverFnHi">759146</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1139">info_get_bad</a></td>
|
||||
<td class="coverFnHi">352076</td>
|
||||
<td class="coverFnHi">352062</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#720">block_has_file_and_valid_parity</a></td>
|
||||
<td class="coverFnHi">220962</td>
|
||||
<td class="coverFnHi">220963</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#872">link_flag_has</a></td>
|
||||
<td class="coverFnHi">209328</td>
|
||||
<td class="coverFnHi">209329</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1111">info_make</a></td>
|
||||
<td class="coverFnHi">194583</td>
|
||||
<td class="coverFnHi">194621</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#921">link_name_hash</a></td>
|
||||
|
|
@ -181,23 +181,23 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1157">info_get_justsynced</a></td>
|
||||
<td class="coverFnHi">68634</td>
|
||||
<td class="coverFnHi">68576</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#609">hash_is_unique</a></td>
|
||||
<td class="coverFnHi">44270</td>
|
||||
<td class="coverFnHi">44326</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#877">link_flag_set</a></td>
|
||||
<td class="coverFnHi">39461</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1075">fs_par2block_get</a></td>
|
||||
<td class="coverFnHi">15867</td>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#737">file_flag_clear</a></td>
|
||||
<td class="coverFnHi">18420</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#737">file_flag_clear</a></td>
|
||||
<td class="coverFnHi">11286</td>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1075">fs_par2block_get</a></td>
|
||||
<td class="coverFnHi">15867</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1173">info_set_rehash</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">41</td>
|
||||
|
|
@ -61,15 +61,15 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#694">block_has_file</a></td>
|
||||
<td class="coverFnHi">14591493</td>
|
||||
<td class="coverFnHi">14589756</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#720">block_has_file_and_valid_parity</a></td>
|
||||
<td class="coverFnHi">220962</td>
|
||||
<td class="coverFnHi">220963</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#707">block_has_invalid_parity</a></td>
|
||||
<td class="coverFnHi">12320585</td>
|
||||
<td class="coverFnHi">12320925</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#682">block_has_past_hash</a></td>
|
||||
|
|
@ -77,19 +77,19 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#669">block_has_updated_hash</a></td>
|
||||
<td class="coverFnHi">2217099</td>
|
||||
<td class="coverFnHi">2218229</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#637">block_sizeof</a></td>
|
||||
<td class="coverFnHi">58065128</td>
|
||||
<td class="coverFnHi">58065229</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#648">block_state_get</a></td>
|
||||
<td class="coverFnHi">52304023</td>
|
||||
<td class="coverFnHi">52305826</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#659">block_state_set</a></td>
|
||||
<td class="coverFnHi">19117096</td>
|
||||
<td class="coverFnHi">19117692</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#926">dir_flag_has</a></td>
|
||||
|
|
@ -105,39 +105,39 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#772">file_block</a></td>
|
||||
<td class="coverFnHi">54351316</td>
|
||||
<td class="coverFnHi">54351162</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#737">file_flag_clear</a></td>
|
||||
<td class="coverFnHi">11286</td>
|
||||
<td class="coverFnHi">18420</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#727">file_flag_has</a></td>
|
||||
<td class="coverFnHi">34089332</td>
|
||||
<td class="coverFnHi">34102051</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#732">file_flag_set</a></td>
|
||||
<td class="coverFnHi">5295048</td>
|
||||
<td class="coverFnHi">5303183</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#818">file_inode_hash</a></td>
|
||||
<td class="coverFnHi">5042449</td>
|
||||
<td class="coverFnHi">5055357</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#839">file_path_hash</a></td>
|
||||
<td class="coverFnHi">3886182</td>
|
||||
<td class="coverFnHi">3891897</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#847">file_stamp_hash</a></td>
|
||||
<td class="coverFnHi">6275421</td>
|
||||
<td class="coverFnHi">6275620</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#510">filter_hidden</a></td>
|
||||
<td class="coverFnHi">3173372</td>
|
||||
<td class="coverFnHi">3173210</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1051">fs_file2par_get</a></td>
|
||||
<td class="coverFnHi">4755492</td>
|
||||
<td class="coverFnHi">4755524</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1075">fs_par2block_get</a></td>
|
||||
|
|
@ -145,23 +145,23 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1027">fs_par2file_get</a></td>
|
||||
<td class="coverFnHi">11723835</td>
|
||||
<td class="coverFnHi">11722518</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#621">hash_invalid_set</a></td>
|
||||
<td class="coverFnHi">9234067</td>
|
||||
<td class="coverFnHi">9234143</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#567">hash_is_invalid</a></td>
|
||||
<td class="coverFnHi">758645</td>
|
||||
<td class="coverFnHi">759146</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#609">hash_is_unique</a></td>
|
||||
<td class="coverFnHi">44270</td>
|
||||
<td class="coverFnHi">44326</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#589">hash_is_zero</a></td>
|
||||
<td class="coverFnHi">760108</td>
|
||||
<td class="coverFnHi">760608</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#629">hash_zero_set</a></td>
|
||||
|
|
@ -169,31 +169,31 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1193">info_get</a></td>
|
||||
<td class="coverFnHi">5098669</td>
|
||||
<td class="coverFnHi">5098731</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1139">info_get_bad</a></td>
|
||||
<td class="coverFnHi">352076</td>
|
||||
<td class="coverFnHi">352062</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1157">info_get_justsynced</a></td>
|
||||
<td class="coverFnHi">68634</td>
|
||||
<td class="coverFnHi">68576</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1148">info_get_rehash</a></td>
|
||||
<td class="coverFnHi">2046851</td>
|
||||
<td class="coverFnHi">2046849</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1130">info_get_time</a></td>
|
||||
<td class="coverFnHi">883203</td>
|
||||
<td class="coverFnHi">883145</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1111">info_make</a></td>
|
||||
<td class="coverFnHi">194583</td>
|
||||
<td class="coverFnHi">194621</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1182">info_set</a></td>
|
||||
<td class="coverFnHi">1698121</td>
|
||||
<td class="coverFnHi">1698196</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#1165">info_set_bad</a></td>
|
||||
|
|
@ -209,7 +209,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#872">link_flag_has</a></td>
|
||||
<td class="coverFnHi">209328</td>
|
||||
<td class="coverFnHi">209329</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="elem.h.gcov.html#887">link_flag_let</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">41</td>
|
||||
|
|
@ -525,7 +525,7 @@
|
|||
<span class="lineNum"> 463 </span> : char smartctl[PATH_MAX]; /**< Custom command for smartctl. Empty means auto. */
|
||||
<span class="lineNum"> 464 </span> : block_off_t total_blocks; /**< Number of total blocks. */
|
||||
<span class="lineNum"> 465 </span> : block_off_t free_blocks; /**< Number of free blocks at the last sync. */
|
||||
<span class="lineNum"> 466 </span> : int is_excluded; /**< If the parity is excluded by disk filter. */
|
||||
<span class="lineNum"> 466 </span> : int is_excluded_by_filter; /**< If the parity is excluded by filters. */
|
||||
<span class="lineNum"> 467 </span> : int skip_access; /**< If at least one of the parity disk is inaccessible and it should be skipped. */
|
||||
<span class="lineNum"> 468 </span> : uint64_t tick; /**< Usage time. */
|
||||
<span class="lineNum"> 469 </span> : uint64_t progress_tick[PROGRESS_MAX]; /**< Last cpu ticks of progress. */
|
||||
|
|
@ -571,13 +571,13 @@
|
|||
<span class="lineNum"> 509 </span> : * Filter hidden files.
|
||||
<a name="510"><span class="lineNum"> 510 </span> : * Return !=0 if it matches and it should be excluded.</a>
|
||||
<span class="lineNum"> 511 </span> : */
|
||||
<span class="lineNum"> 512 </span><span class="lineCov"> 3173372 : static inline int filter_hidden(int enable, struct dirent* dd)</span>
|
||||
<span class="lineNum"> 512 </span><span class="lineCov"> 3173210 : static inline int filter_hidden(int enable, struct dirent* dd)</span>
|
||||
<span class="lineNum"> 513 </span> : {
|
||||
<span class="lineNum"> 514 </span><span class="lineCov"> 3173372 : if (enable && dirent_hidden(dd)) {</span>
|
||||
<span class="lineNum"> 514 </span><span class="lineCov"> 3173210 : if (enable && dirent_hidden(dd)) {</span>
|
||||
<span class="lineNum"> 515 </span><span class="lineNoCov"> 0 : return 1; /* filter out */</span>
|
||||
<span class="lineNum"> 516 </span> : }
|
||||
<span class="lineNum"> 517 </span> :
|
||||
<span class="lineNum"> 518 </span><span class="lineCov"> 3173372 : return 0;</span>
|
||||
<span class="lineNum"> 518 </span><span class="lineCov"> 3173210 : return 0;</span>
|
||||
<span class="lineNum"> 519 </span> : }
|
||||
<span class="lineNum"> 520 </span> :
|
||||
<span class="lineNum"> 521 </span> : /**
|
||||
|
|
@ -628,17 +628,17 @@
|
|||
<span class="lineNum"> 566 </span> : *
|
||||
<a name="567"><span class="lineNum"> 567 </span> : * If working with reduced hash lengths, this function always return 0.</a>
|
||||
<span class="lineNum"> 568 </span> : */
|
||||
<span class="lineNum"> 569 </span><span class="lineCov"> 758645 : static inline int hash_is_invalid(const unsigned char* hash)</span>
|
||||
<span class="lineNum"> 569 </span><span class="lineCov"> 759146 : static inline int hash_is_invalid(const unsigned char* hash)</span>
|
||||
<span class="lineNum"> 570 </span> : {
|
||||
<span class="lineNum"> 571 </span> : int i;
|
||||
<span class="lineNum"> 572 </span> :
|
||||
<span class="lineNum"> 573 </span> : /* if the hash is reduced, we cannot grant that it's a specific kind of hash */
|
||||
<span class="lineNum"> 574 </span><span class="lineCov"> 758645 : if (BLOCK_HASH_SIZE != HASH_MAX)</span>
|
||||
<span class="lineNum"> 574 </span><span class="lineCov"> 759146 : if (BLOCK_HASH_SIZE != HASH_MAX)</span>
|
||||
<span class="lineNum"> 575 </span><span class="lineNoCov"> 0 : return 0;</span>
|
||||
<span class="lineNum"> 576 </span> :
|
||||
<span class="lineNum"> 577 </span><span class="lineCov"> 1178483 : for (i = 0; i < BLOCK_HASH_SIZE; ++i)</span>
|
||||
<span class="lineNum"> 578 </span><span class="lineCov"> 1152419 : if (hash[i] != 0x00)</span>
|
||||
<span class="lineNum"> 579 </span><span class="lineCov"> 732581 : return 0;</span>
|
||||
<span class="lineNum"> 577 </span><span class="lineCov"> 1179527 : for (i = 0; i < BLOCK_HASH_SIZE; ++i)</span>
|
||||
<span class="lineNum"> 578 </span><span class="lineCov"> 1153463 : if (hash[i] != 0x00)</span>
|
||||
<span class="lineNum"> 579 </span><span class="lineCov"> 733082 : return 0;</span>
|
||||
<span class="lineNum"> 580 </span> :
|
||||
<span class="lineNum"> 581 </span><span class="lineCov"> 26064 : return 1;</span>
|
||||
<span class="lineNum"> 582 </span> : }
|
||||
|
|
@ -650,19 +650,19 @@
|
|||
<span class="lineNum"> 588 </span> : *
|
||||
<a name="589"><span class="lineNum"> 589 </span> : * If working with reduced hash lengths, this function always return 0.</a>
|
||||
<span class="lineNum"> 590 </span> : */
|
||||
<span class="lineNum"> 591 </span><span class="lineCov"> 760108 : static inline int hash_is_zero(const unsigned char* hash)</span>
|
||||
<span class="lineNum"> 591 </span><span class="lineCov"> 760608 : static inline int hash_is_zero(const unsigned char* hash)</span>
|
||||
<span class="lineNum"> 592 </span> : {
|
||||
<span class="lineNum"> 593 </span> : int i;
|
||||
<span class="lineNum"> 594 </span> :
|
||||
<span class="lineNum"> 595 </span> : /* if the hash is reduced, we cannot grant that it's a specific kind of hash */
|
||||
<span class="lineNum"> 596 </span><span class="lineCov"> 760108 : if (BLOCK_HASH_SIZE != HASH_MAX)</span>
|
||||
<span class="lineNum"> 596 </span><span class="lineCov"> 760608 : if (BLOCK_HASH_SIZE != HASH_MAX)</span>
|
||||
<span class="lineNum"> 597 </span><span class="lineNoCov"> 0 : return 0;</span>
|
||||
<span class="lineNum"> 598 </span> :
|
||||
<span class="lineNum"> 599 </span><span class="lineCov"> 994848 : for (i = 0; i < BLOCK_HASH_SIZE; ++i)</span>
|
||||
<span class="lineNum"> 600 </span><span class="lineCov"> 980378 : if (hash[i] != 0xFF)</span>
|
||||
<span class="lineNum"> 601 </span><span class="lineCov"> 745638 : return 0;</span>
|
||||
<span class="lineNum"> 599 </span><span class="lineCov"> 995114 : for (i = 0; i < BLOCK_HASH_SIZE; ++i)</span>
|
||||
<span class="lineNum"> 600 </span><span class="lineCov"> 980645 : if (hash[i] != 0xFF)</span>
|
||||
<span class="lineNum"> 601 </span><span class="lineCov"> 746139 : return 0;</span>
|
||||
<span class="lineNum"> 602 </span> :
|
||||
<span class="lineNum"> 603 </span><span class="lineCov"> 14470 : return 1;</span>
|
||||
<span class="lineNum"> 603 </span><span class="lineCov"> 14469 : return 1;</span>
|
||||
<span class="lineNum"> 604 </span> : }
|
||||
<span class="lineNum"> 605 </span> :
|
||||
<span class="lineNum"> 606 </span> : /**
|
||||
|
|
@ -670,22 +670,22 @@
|
|||
<span class="lineNum"> 608 </span> : *
|
||||
<a name="609"><span class="lineNum"> 609 </span> : * If working with reduced hash lengths, this function always return 0.</a>
|
||||
<span class="lineNum"> 610 </span> : */
|
||||
<span class="lineNum"> 611 </span><span class="lineCov"> 44270 : static inline int hash_is_unique(const unsigned char* hash)</span>
|
||||
<span class="lineNum"> 611 </span><span class="lineCov"> 44326 : static inline int hash_is_unique(const unsigned char* hash)</span>
|
||||
<span class="lineNum"> 612 </span> : {
|
||||
<span class="lineNum"> 613 </span> : /* if the hash is reduced, we cannot grant that it's a specific kind of hash */
|
||||
<span class="lineNum"> 614 </span><span class="lineCov"> 44270 : if (BLOCK_HASH_SIZE != HASH_MAX)</span>
|
||||
<span class="lineNum"> 614 </span><span class="lineCov"> 44326 : if (BLOCK_HASH_SIZE != HASH_MAX)</span>
|
||||
<span class="lineNum"> 615 </span><span class="lineNoCov"> 0 : return 0;</span>
|
||||
<span class="lineNum"> 616 </span> :
|
||||
<span class="lineNum"> 617 </span><span class="lineCov"> 44270 : return !hash_is_zero(hash) && !hash_is_invalid(hash);</span>
|
||||
<span class="lineNum"> 617 </span><span class="lineCov"> 44326 : return !hash_is_zero(hash) && !hash_is_invalid(hash);</span>
|
||||
<span class="lineNum"> 618 </span> : }
|
||||
<span class="lineNum"> 619 </span> :
|
||||
<span class="lineNum"> 620 </span> : /**
|
||||
<a name="621"><span class="lineNum"> 621 </span> : * Set the hash to the special INVALID value.</a>
|
||||
<span class="lineNum"> 622 </span> : */
|
||||
<span class="lineNum"> 623 </span><span class="lineCov"> 9234067 : static inline void hash_invalid_set(unsigned char* hash)</span>
|
||||
<span class="lineNum"> 623 </span><span class="lineCov"> 9234143 : static inline void hash_invalid_set(unsigned char* hash)</span>
|
||||
<span class="lineNum"> 624 </span> : {
|
||||
<span class="lineNum"> 625 </span><span class="lineCov"> 9234067 : memset(hash, 0x00, BLOCK_HASH_SIZE);</span>
|
||||
<span class="lineNum"> 626 </span><span class="lineCov"> 9234067 : }</span>
|
||||
<span class="lineNum"> 625 </span><span class="lineCov"> 9234143 : memset(hash, 0x00, BLOCK_HASH_SIZE);</span>
|
||||
<span class="lineNum"> 626 </span><span class="lineCov"> 9234143 : }</span>
|
||||
<span class="lineNum"> 627 </span> :
|
||||
<span class="lineNum"> 628 </span> : /**
|
||||
<a name="629"><span class="lineNum"> 629 </span> : * Set the hash to the special ZERO value.</a>
|
||||
|
|
@ -698,9 +698,9 @@
|
|||
<span class="lineNum"> 636 </span> : /**
|
||||
<a name="637"><span class="lineNum"> 637 </span> : * Allocated space for block.</a>
|
||||
<span class="lineNum"> 638 </span> : */
|
||||
<span class="lineNum"> 639 </span><span class="lineCov"> 58065128 : static inline size_t block_sizeof(void)</span>
|
||||
<span class="lineNum"> 639 </span><span class="lineCov"> 58065229 : static inline size_t block_sizeof(void)</span>
|
||||
<span class="lineNum"> 640 </span> : {
|
||||
<span class="lineNum"> 641 </span><span class="lineCov"> 58065128 : return 1 + BLOCK_HASH_SIZE;</span>
|
||||
<span class="lineNum"> 641 </span><span class="lineCov"> 58065229 : return 1 + BLOCK_HASH_SIZE;</span>
|
||||
<span class="lineNum"> 642 </span> : }
|
||||
<span class="lineNum"> 643 </span> :
|
||||
<span class="lineNum"> 644 </span> : /**
|
||||
|
|
@ -709,32 +709,32 @@
|
|||
<span class="lineNum"> 647 </span> : * For this function, it's allowed to pass a NULL block
|
||||
<a name="648"><span class="lineNum"> 648 </span> : * pointer than results in the BLOCK_STATE_EMPTY state.</a>
|
||||
<span class="lineNum"> 649 </span> : */
|
||||
<span class="lineNum"> 650 </span><span class="lineCov"> 52304023 : static inline unsigned block_state_get(const struct snapraid_block* block)</span>
|
||||
<span class="lineNum"> 650 </span><span class="lineCov"> 52305826 : static inline unsigned block_state_get(const struct snapraid_block* block)</span>
|
||||
<span class="lineNum"> 651 </span> : {
|
||||
<span class="lineNum"> 652 </span><span class="lineCov"> 52304023 : if (block == BLOCK_NULL)</span>
|
||||
<span class="lineNum"> 653 </span><span class="lineCov"> 1722497 : return BLOCK_STATE_EMPTY;</span>
|
||||
<span class="lineNum"> 652 </span><span class="lineCov"> 52305826 : if (block == BLOCK_NULL)</span>
|
||||
<span class="lineNum"> 653 </span><span class="lineCov"> 1722139 : return BLOCK_STATE_EMPTY;</span>
|
||||
<span class="lineNum"> 654 </span> :
|
||||
<span class="lineNum"> 655 </span><span class="lineCov"> 50581526 : return block->state;</span>
|
||||
<span class="lineNum"> 655 </span><span class="lineCov"> 50583687 : return block->state;</span>
|
||||
<span class="lineNum"> 656 </span> : }
|
||||
<span class="lineNum"> 657 </span> :
|
||||
<span class="lineNum"> 658 </span> : /**
|
||||
<a name="659"><span class="lineNum"> 659 </span> : * Set the state of the block.</a>
|
||||
<span class="lineNum"> 660 </span> : */
|
||||
<span class="lineNum"> 661 </span><span class="lineCov"> 19117096 : static inline void block_state_set(struct snapraid_block* block, unsigned state)</span>
|
||||
<span class="lineNum"> 661 </span><span class="lineCov"> 19117692 : static inline void block_state_set(struct snapraid_block* block, unsigned state)</span>
|
||||
<span class="lineNum"> 662 </span> : {
|
||||
<span class="lineNum"> 663 </span><span class="lineCov"> 19117096 : block->state = state;</span>
|
||||
<span class="lineNum"> 664 </span><span class="lineCov"> 19117096 : }</span>
|
||||
<span class="lineNum"> 663 </span><span class="lineCov"> 19117692 : block->state = state;</span>
|
||||
<span class="lineNum"> 664 </span><span class="lineCov"> 19117692 : }</span>
|
||||
<span class="lineNum"> 665 </span> :
|
||||
<span class="lineNum"> 666 </span> : /**
|
||||
<span class="lineNum"> 667 </span> : * Check if the specified block has an updated hash.
|
||||
<span class="lineNum"> 668 </span> : *
|
||||
<a name="669"><span class="lineNum"> 669 </span> : * Note that EMPTY / CHG / DELETED return 0.</a>
|
||||
<span class="lineNum"> 670 </span> : */
|
||||
<span class="lineNum"> 671 </span><span class="lineCov"> 2217099 : static inline int block_has_updated_hash(const struct snapraid_block* block)</span>
|
||||
<span class="lineNum"> 671 </span><span class="lineCov"> 2218229 : static inline int block_has_updated_hash(const struct snapraid_block* block)</span>
|
||||
<span class="lineNum"> 672 </span> : {
|
||||
<span class="lineNum"> 673 </span><span class="lineCov"> 2217099 : unsigned state = block_state_get(block);</span>
|
||||
<span class="lineNum"> 673 </span><span class="lineCov"> 2218229 : unsigned state = block_state_get(block);</span>
|
||||
<span class="lineNum"> 674 </span> :
|
||||
<span class="lineNum"> 675 </span><span class="lineCov"> 2217099 : return state == BLOCK_STATE_BLK || state == BLOCK_STATE_REP;</span>
|
||||
<span class="lineNum"> 675 </span><span class="lineCov"> 2218229 : return state == BLOCK_STATE_BLK || state == BLOCK_STATE_REP;</span>
|
||||
<span class="lineNum"> 676 </span> : }
|
||||
<span class="lineNum"> 677 </span> :
|
||||
<span class="lineNum"> 678 </span> : /**
|
||||
|
|
@ -755,12 +755,12 @@
|
|||
<span class="lineNum"> 693 </span> : *
|
||||
<a name="694"><span class="lineNum"> 694 </span> : * Note that EMPTY / DELETED return 0.</a>
|
||||
<span class="lineNum"> 695 </span> : */
|
||||
<span class="lineNum"> 696 </span><span class="lineCov"> 14591493 : static inline int block_has_file(const struct snapraid_block* block)</span>
|
||||
<span class="lineNum"> 696 </span><span class="lineCov"> 14589756 : static inline int block_has_file(const struct snapraid_block* block)</span>
|
||||
<span class="lineNum"> 697 </span> : {
|
||||
<span class="lineNum"> 698 </span><span class="lineCov"> 14591493 : unsigned state = block_state_get(block);</span>
|
||||
<span class="lineNum"> 698 </span><span class="lineCov"> 14589756 : unsigned state = block_state_get(block);</span>
|
||||
<span class="lineNum"> 699 </span> :
|
||||
<span class="lineNum"> 700 </span><span class="lineCov"> 14591444 : return state == BLOCK_STATE_BLK</span>
|
||||
<span class="lineNum"> 701 </span><span class="lineCov"> 14591444 : || state == BLOCK_STATE_CHG || state == BLOCK_STATE_REP;</span>
|
||||
<span class="lineNum"> 700 </span><span class="lineCov"> 14590663 : return state == BLOCK_STATE_BLK</span>
|
||||
<span class="lineNum"> 701 </span><span class="lineCov"> 14590663 : || state == BLOCK_STATE_CHG || state == BLOCK_STATE_REP;</span>
|
||||
<span class="lineNum"> 702 </span> : }
|
||||
<span class="lineNum"> 703 </span> :
|
||||
<span class="lineNum"> 704 </span> : /**
|
||||
|
|
@ -768,12 +768,12 @@
|
|||
<span class="lineNum"> 706 </span> : *
|
||||
<a name="707"><span class="lineNum"> 707 </span> : * Note that EMPTY / BLK return 0.</a>
|
||||
<span class="lineNum"> 708 </span> : */
|
||||
<span class="lineNum"> 709 </span><span class="lineCov"> 12320585 : static inline int block_has_invalid_parity(const struct snapraid_block* block)</span>
|
||||
<span class="lineNum"> 709 </span><span class="lineCov"> 12320925 : static inline int block_has_invalid_parity(const struct snapraid_block* block)</span>
|
||||
<span class="lineNum"> 710 </span> : {
|
||||
<span class="lineNum"> 711 </span><span class="lineCov"> 12320585 : unsigned state = block_state_get(block);</span>
|
||||
<span class="lineNum"> 711 </span><span class="lineCov"> 12320925 : unsigned state = block_state_get(block);</span>
|
||||
<span class="lineNum"> 712 </span> :
|
||||
<span class="lineNum"> 713 </span><span class="lineCov"> 12320585 : return state == BLOCK_STATE_DELETED</span>
|
||||
<span class="lineNum"> 714 </span><span class="lineCov"> 12320585 : || state == BLOCK_STATE_CHG || state == BLOCK_STATE_REP;</span>
|
||||
<span class="lineNum"> 713 </span><span class="lineCov"> 12320925 : return state == BLOCK_STATE_DELETED</span>
|
||||
<span class="lineNum"> 714 </span><span class="lineCov"> 12320925 : || state == BLOCK_STATE_CHG || state == BLOCK_STATE_REP;</span>
|
||||
<span class="lineNum"> 715 </span> : }
|
||||
<span class="lineNum"> 716 </span> :
|
||||
<span class="lineNum"> 717 </span> : /**
|
||||
|
|
@ -781,27 +781,27 @@
|
|||
<span class="lineNum"> 719 </span> : *
|
||||
<a name="720"><span class="lineNum"> 720 </span> : * Note that anything different than BLK return 0.</a>
|
||||
<span class="lineNum"> 721 </span> : */
|
||||
<span class="lineNum"> 722 </span><span class="lineCov"> 220962 : static inline int block_has_file_and_valid_parity(const struct snapraid_block* block)</span>
|
||||
<span class="lineNum"> 722 </span><span class="lineCov"> 220963 : static inline int block_has_file_and_valid_parity(const struct snapraid_block* block)</span>
|
||||
<span class="lineNum"> 723 </span> : {
|
||||
<span class="lineNum"> 724 </span><span class="lineCov"> 220962 : unsigned state = block_state_get(block);</span>
|
||||
<span class="lineNum"> 724 </span><span class="lineCov"> 220963 : unsigned state = block_state_get(block);</span>
|
||||
<span class="lineNum"> 725 </span> :
|
||||
<span class="lineNum"> 726 </span><span class="lineCov"> 220962 : return state == BLOCK_STATE_BLK;</span>
|
||||
<span class="lineNum"> 726 </span><span class="lineCov"> 220963 : return state == BLOCK_STATE_BLK;</span>
|
||||
<a name="727"><span class="lineNum"> 727 </span> : }</a>
|
||||
<span class="lineNum"> 728 </span> :
|
||||
<span class="lineNum"> 729 </span><span class="lineCov"> 34089332 : static inline int file_flag_has(const struct snapraid_file* file, unsigned mask)</span>
|
||||
<span class="lineNum"> 729 </span><span class="lineCov"> 34102051 : static inline int file_flag_has(const struct snapraid_file* file, unsigned mask)</span>
|
||||
<span class="lineNum"> 730 </span> : {
|
||||
<span class="lineNum"> 731 </span><span class="lineCov"> 34089332 : return (file->flag & mask) == mask;</span>
|
||||
<span class="lineNum"> 731 </span><span class="lineCov"> 34102051 : return (file->flag & mask) == mask;</span>
|
||||
<a name="732"><span class="lineNum"> 732 </span> : }</a>
|
||||
<span class="lineNum"> 733 </span> :
|
||||
<span class="lineNum"> 734 </span><span class="lineCov"> 5295048 : static inline void file_flag_set(struct snapraid_file* file, unsigned mask)</span>
|
||||
<span class="lineNum"> 734 </span><span class="lineCov"> 5303183 : static inline void file_flag_set(struct snapraid_file* file, unsigned mask)</span>
|
||||
<span class="lineNum"> 735 </span> : {
|
||||
<span class="lineNum"> 736 </span><span class="lineCov"> 5295048 : file->flag |= mask;</span>
|
||||
<a name="737"><span class="lineNum"> 737 </span><span class="lineCov"> 5295048 : }</span></a>
|
||||
<span class="lineNum"> 736 </span><span class="lineCov"> 5303183 : file->flag |= mask;</span>
|
||||
<a name="737"><span class="lineNum"> 737 </span><span class="lineCov"> 5303183 : }</span></a>
|
||||
<span class="lineNum"> 738 </span> :
|
||||
<span class="lineNum"> 739 </span><span class="lineCov"> 11286 : static inline void file_flag_clear(struct snapraid_file* file, unsigned mask)</span>
|
||||
<span class="lineNum"> 739 </span><span class="lineCov"> 18420 : static inline void file_flag_clear(struct snapraid_file* file, unsigned mask)</span>
|
||||
<span class="lineNum"> 740 </span> : {
|
||||
<span class="lineNum"> 741 </span><span class="lineCov"> 11286 : file->flag &= ~mask;</span>
|
||||
<span class="lineNum"> 742 </span><span class="lineCov"> 11286 : }</span>
|
||||
<span class="lineNum"> 741 </span><span class="lineCov"> 18420 : file->flag &= ~mask;</span>
|
||||
<span class="lineNum"> 742 </span><span class="lineCov"> 18420 : }</span>
|
||||
<span class="lineNum"> 743 </span> :
|
||||
<span class="lineNum"> 744 </span> : /**
|
||||
<span class="lineNum"> 745 </span> : * Allocate a file.
|
||||
|
|
@ -833,11 +833,11 @@
|
|||
<span class="lineNum"> 771 </span> : *
|
||||
<a name="772"><span class="lineNum"> 772 </span> : * Note that the block size if a runtime value.</a>
|
||||
<span class="lineNum"> 773 </span> : */
|
||||
<span class="lineNum"> 774 </span><span class="lineCov"> 54351316 : static inline struct snapraid_block* file_block(struct snapraid_file* file, size_t pos)</span>
|
||||
<span class="lineNum"> 774 </span><span class="lineCov"> 54351162 : static inline struct snapraid_block* file_block(struct snapraid_file* file, size_t pos)</span>
|
||||
<span class="lineNum"> 775 </span> : {
|
||||
<span class="lineNum"> 776 </span><span class="lineCov"> 54351316 : unsigned char* ptr = (unsigned char*)file->blockvec;</span>
|
||||
<span class="lineNum"> 776 </span><span class="lineCov"> 54351162 : unsigned char* ptr = (unsigned char*)file->blockvec;</span>
|
||||
<span class="lineNum"> 777 </span> :
|
||||
<span class="lineNum"> 778 </span><span class="lineCov"> 54351316 : return (struct snapraid_block*)(ptr + pos * block_sizeof());</span>
|
||||
<span class="lineNum"> 778 </span><span class="lineCov"> 54351162 : return (struct snapraid_block*)(ptr + pos * block_sizeof());</span>
|
||||
<span class="lineNum"> 779 </span> : }
|
||||
<span class="lineNum"> 780 </span> :
|
||||
<span class="lineNum"> 781 </span> : /**
|
||||
|
|
@ -879,9 +879,9 @@
|
|||
<span class="lineNum"> 817 </span> : /**
|
||||
<a name="818"><span class="lineNum"> 818 </span> : * Compute the hash of a file inode.</a>
|
||||
<span class="lineNum"> 819 </span> : */
|
||||
<span class="lineNum"> 820 </span><span class="lineCov"> 5042449 : static inline tommy_uint32_t file_inode_hash(uint64_t inode)</span>
|
||||
<span class="lineNum"> 820 </span><span class="lineCov"> 5055357 : static inline tommy_uint32_t file_inode_hash(uint64_t inode)</span>
|
||||
<span class="lineNum"> 821 </span> : {
|
||||
<span class="lineNum"> 822 </span><span class="lineCov"> 5042449 : return (tommy_uint32_t)tommy_inthash_u64(inode);</span>
|
||||
<span class="lineNum"> 822 </span><span class="lineCov"> 5055357 : return (tommy_uint32_t)tommy_inthash_u64(inode);</span>
|
||||
<span class="lineNum"> 823 </span> : }
|
||||
<span class="lineNum"> 824 </span> :
|
||||
<span class="lineNum"> 825 </span> : /**
|
||||
|
|
@ -900,17 +900,17 @@
|
|||
<span class="lineNum"> 838 </span> : /**
|
||||
<a name="839"><span class="lineNum"> 839 </span> : * Compute the hash of a file path.</a>
|
||||
<span class="lineNum"> 840 </span> : */
|
||||
<span class="lineNum"> 841 </span><span class="lineCov"> 3886182 : static inline tommy_uint32_t file_path_hash(const char* sub)</span>
|
||||
<span class="lineNum"> 841 </span><span class="lineCov"> 3891897 : static inline tommy_uint32_t file_path_hash(const char* sub)</span>
|
||||
<span class="lineNum"> 842 </span> : {
|
||||
<span class="lineNum"> 843 </span><span class="lineCov"> 3886182 : return tommy_hash_u32(0, sub, strlen(sub));</span>
|
||||
<span class="lineNum"> 843 </span><span class="lineCov"> 3891897 : return tommy_hash_u32(0, sub, strlen(sub));</span>
|
||||
<span class="lineNum"> 844 </span> : }
|
||||
<span class="lineNum"> 845 </span> :
|
||||
<span class="lineNum"> 846 </span> : /**
|
||||
<a name="847"><span class="lineNum"> 847 </span> : * Compute the hash of a file stamp.</a>
|
||||
<span class="lineNum"> 848 </span> : */
|
||||
<span class="lineNum"> 849 </span><span class="lineCov"> 6275421 : static inline tommy_uint32_t file_stamp_hash(data_off_t size, int64_t mtime_sec, int mtime_nsec)</span>
|
||||
<span class="lineNum"> 849 </span><span class="lineCov"> 6275620 : static inline tommy_uint32_t file_stamp_hash(data_off_t size, int64_t mtime_sec, int mtime_nsec)</span>
|
||||
<span class="lineNum"> 850 </span> : {
|
||||
<span class="lineNum"> 851 </span><span class="lineCov"> 6275421 : return tommy_inthash_u32((tommy_uint32_t)size ^ tommy_inthash_u32(mtime_sec ^ tommy_inthash_u32(mtime_nsec)));</span>
|
||||
<span class="lineNum"> 851 </span><span class="lineCov"> 6275620 : return tommy_inthash_u32((tommy_uint32_t)size ^ tommy_inthash_u32(mtime_sec ^ tommy_inthash_u32(mtime_nsec)));</span>
|
||||
<span class="lineNum"> 852 </span> : }
|
||||
<span class="lineNum"> 853 </span> :
|
||||
<span class="lineNum"> 854 </span> : /**
|
||||
|
|
@ -933,9 +933,9 @@
|
|||
<span class="lineNum"> 871 </span> : */
|
||||
<a name="872"><span class="lineNum"> 872 </span> : int extent_file_compare(const void* void_a, const void* void_b);</a>
|
||||
<span class="lineNum"> 873 </span> :
|
||||
<span class="lineNum"> 874 </span><span class="lineCov"> 209328 : static inline int link_flag_has(const struct snapraid_link* slink, unsigned mask)</span>
|
||||
<span class="lineNum"> 874 </span><span class="lineCov"> 209329 : static inline int link_flag_has(const struct snapraid_link* slink, unsigned mask)</span>
|
||||
<span class="lineNum"> 875 </span> : {
|
||||
<span class="lineNum"> 876 </span><span class="lineCov"> 209328 : return (slink->flag & mask) == mask;</span>
|
||||
<span class="lineNum"> 876 </span><span class="lineCov"> 209329 : return (slink->flag & mask) == mask;</span>
|
||||
<a name="877"><span class="lineNum"> 877 </span> : }</a>
|
||||
<span class="lineNum"> 878 </span> :
|
||||
<span class="lineNum"> 879 </span><span class="lineCov"> 39461 : static inline void link_flag_set(struct snapraid_link* slink, unsigned mask)</span>
|
||||
|
|
@ -1088,19 +1088,19 @@
|
|||
<span class="lineNum"> 1026 </span> : /**
|
||||
<a name="1027"><span class="lineNum"> 1027 </span> : * Get the file position from the parity position.</a>
|
||||
<span class="lineNum"> 1028 </span> : */
|
||||
<span class="lineNum"> 1029 </span><span class="lineCov"> 11723835 : static inline struct snapraid_file* fs_par2file_get(struct snapraid_disk* disk, block_off_t parity_pos, block_off_t* file_pos)</span>
|
||||
<span class="lineNum"> 1029 </span><span class="lineCov"> 11722518 : static inline struct snapraid_file* fs_par2file_get(struct snapraid_disk* disk, block_off_t parity_pos, block_off_t* file_pos)</span>
|
||||
<span class="lineNum"> 1030 </span> : {
|
||||
<span class="lineNum"> 1031 </span> : struct snapraid_file* ret;
|
||||
<span class="lineNum"> 1032 </span> :
|
||||
<span class="lineNum"> 1033 </span><span class="lineCov"> 11723835 : ret = fs_par2file_find(disk, parity_pos, file_pos);</span>
|
||||
<span class="lineNum"> 1034 </span><span class="lineCov"> 11724079 : if (ret == 0) {</span>
|
||||
<span class="lineNum"> 1033 </span><span class="lineCov"> 11722518 : ret = fs_par2file_find(disk, parity_pos, file_pos);</span>
|
||||
<span class="lineNum"> 1034 </span><span class="lineCov"> 11724212 : if (ret == 0) {</span>
|
||||
<span class="lineNum"> 1035 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 1036 </span> : log_fatal("Internal inconsistency when deresolving parity to file at position '%u' in disk '%s'\n", parity_pos, disk->name);
|
||||
<span class="lineNum"> 1037 </span> : os_abort();
|
||||
<span class="lineNum"> 1038 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 1039 </span> : }
|
||||
<span class="lineNum"> 1040 </span> :
|
||||
<span class="lineNum"> 1041 </span><span class="lineCov"> 11724079 : return ret;</span>
|
||||
<span class="lineNum"> 1041 </span><span class="lineCov"> 11724212 : return ret;</span>
|
||||
<span class="lineNum"> 1042 </span> : }
|
||||
<span class="lineNum"> 1043 </span> :
|
||||
<span class="lineNum"> 1044 </span> : /**
|
||||
|
|
@ -1112,19 +1112,19 @@
|
|||
<span class="lineNum"> 1050 </span> : /**
|
||||
<a name="1051"><span class="lineNum"> 1051 </span> : * Get the parity position from the file position.</a>
|
||||
<span class="lineNum"> 1052 </span> : */
|
||||
<span class="lineNum"> 1053 </span><span class="lineCov"> 4755492 : static inline block_off_t fs_file2par_get(struct snapraid_disk* disk, struct snapraid_file* file, block_off_t file_pos)</span>
|
||||
<span class="lineNum"> 1053 </span><span class="lineCov"> 4755524 : static inline block_off_t fs_file2par_get(struct snapraid_disk* disk, struct snapraid_file* file, block_off_t file_pos)</span>
|
||||
<span class="lineNum"> 1054 </span> : {
|
||||
<span class="lineNum"> 1055 </span> : block_off_t ret;
|
||||
<span class="lineNum"> 1056 </span> :
|
||||
<span class="lineNum"> 1057 </span><span class="lineCov"> 4755492 : ret = fs_file2par_find(disk, file, file_pos);</span>
|
||||
<span class="lineNum"> 1058 </span><span class="lineCov"> 4755492 : if (ret == POS_NULL) {</span>
|
||||
<span class="lineNum"> 1057 </span><span class="lineCov"> 4755524 : ret = fs_file2par_find(disk, file, file_pos);</span>
|
||||
<span class="lineNum"> 1058 </span><span class="lineCov"> 4755524 : if (ret == POS_NULL) {</span>
|
||||
<span class="lineNum"> 1059 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 1060 </span> : log_fatal("Internal inconsistency when resolving file '%s' at position '%u/%u' in disk '%s'\n", file->sub, file_pos, file->blockmax, disk->name);
|
||||
<span class="lineNum"> 1061 </span> : os_abort();
|
||||
<span class="lineNum"> 1062 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 1063 </span> : }
|
||||
<span class="lineNum"> 1064 </span> :
|
||||
<span class="lineNum"> 1065 </span><span class="lineCov"> 4755492 : return ret;</span>
|
||||
<span class="lineNum"> 1065 </span><span class="lineCov"> 4755524 : return ret;</span>
|
||||
<span class="lineNum"> 1066 </span> : }
|
||||
<span class="lineNum"> 1067 </span> :
|
||||
<span class="lineNum"> 1068 </span> : /**
|
||||
|
|
@ -1172,18 +1172,18 @@
|
|||
<span class="lineNum"> 1110 </span> : /**
|
||||
<a name="1111"><span class="lineNum"> 1111 </span> : * Make an info.</a>
|
||||
<span class="lineNum"> 1112 </span> : */
|
||||
<span class="lineNum"> 1113 </span><span class="lineCov"> 194583 : static inline snapraid_info info_make(time_t last_access, int error, int rehash, int justsynced)</span>
|
||||
<span class="lineNum"> 1113 </span><span class="lineCov"> 194621 : static inline snapraid_info info_make(time_t last_access, int error, int rehash, int justsynced)</span>
|
||||
<span class="lineNum"> 1114 </span> : {
|
||||
<span class="lineNum"> 1115 </span> : /* clear the lowest bits as reserved for other information */
|
||||
<span class="lineNum"> 1116 </span><span class="lineCov"> 194583 : snapraid_info info = last_access & ~INFO_MASK;</span>
|
||||
<span class="lineNum"> 1116 </span><span class="lineCov"> 194621 : snapraid_info info = last_access & ~INFO_MASK;</span>
|
||||
<span class="lineNum"> 1117 </span> :
|
||||
<span class="lineNum"> 1118 </span><span class="lineCov"> 194583 : if (error != 0)</span>
|
||||
<span class="lineNum"> 1119 </span><span class="lineCov"> 5278 : info |= 0x1;</span>
|
||||
<span class="lineNum"> 1120 </span><span class="lineCov"> 194583 : if (rehash != 0)</span>
|
||||
<span class="lineNum"> 1118 </span><span class="lineCov"> 194621 : if (error != 0)</span>
|
||||
<span class="lineNum"> 1119 </span><span class="lineCov"> 5330 : info |= 0x1;</span>
|
||||
<span class="lineNum"> 1120 </span><span class="lineCov"> 194621 : if (rehash != 0)</span>
|
||||
<span class="lineNum"> 1121 </span><span class="lineCov"> 14426 : info |= 0x2;</span>
|
||||
<span class="lineNum"> 1122 </span><span class="lineCov"> 194583 : if (justsynced != 0)</span>
|
||||
<span class="lineNum"> 1123 </span><span class="lineCov"> 143045 : info |= 0x4;</span>
|
||||
<span class="lineNum"> 1124 </span><span class="lineCov"> 194583 : return info;</span>
|
||||
<span class="lineNum"> 1122 </span><span class="lineCov"> 194621 : if (justsynced != 0)</span>
|
||||
<span class="lineNum"> 1123 </span><span class="lineCov"> 143140 : info |= 0x4;</span>
|
||||
<span class="lineNum"> 1124 </span><span class="lineCov"> 194621 : return info;</span>
|
||||
<span class="lineNum"> 1125 </span> : }
|
||||
<span class="lineNum"> 1126 </span> :
|
||||
<span class="lineNum"> 1127 </span> : /**
|
||||
|
|
@ -1191,36 +1191,36 @@
|
|||
<span class="lineNum"> 1129 </span> : * This is the last time when the block was know to be correct.
|
||||
<a name="1130"><span class="lineNum"> 1130 </span> : * The "scrubbed" info tells if the time is referreing at the latest sync or scrub.</a>
|
||||
<span class="lineNum"> 1131 </span> : */
|
||||
<span class="lineNum"> 1132 </span><span class="lineCov"> 883203 : static inline time_t info_get_time(snapraid_info info)</span>
|
||||
<span class="lineNum"> 1132 </span><span class="lineCov"> 883145 : static inline time_t info_get_time(snapraid_info info)</span>
|
||||
<span class="lineNum"> 1133 </span> : {
|
||||
<span class="lineNum"> 1134 </span><span class="lineCov"> 883203 : return info & ~INFO_MASK;</span>
|
||||
<span class="lineNum"> 1134 </span><span class="lineCov"> 883145 : return info & ~INFO_MASK;</span>
|
||||
<span class="lineNum"> 1135 </span> : }
|
||||
<span class="lineNum"> 1136 </span> :
|
||||
<span class="lineNum"> 1137 </span> : /**
|
||||
<span class="lineNum"> 1138 </span> : * Extract the error information.
|
||||
<a name="1139"><span class="lineNum"> 1139 </span> : * Report if the block address had some problem.</a>
|
||||
<span class="lineNum"> 1140 </span> : */
|
||||
<span class="lineNum"> 1141 </span><span class="lineCov"> 352076 : static inline int info_get_bad(snapraid_info info)</span>
|
||||
<span class="lineNum"> 1141 </span><span class="lineCov"> 352062 : static inline int info_get_bad(snapraid_info info)</span>
|
||||
<span class="lineNum"> 1142 </span> : {
|
||||
<span class="lineNum"> 1143 </span><span class="lineCov"> 352076 : return (info & 0x1) != 0;</span>
|
||||
<span class="lineNum"> 1143 </span><span class="lineCov"> 352062 : return (info & 0x1) != 0;</span>
|
||||
<span class="lineNum"> 1144 </span> : }
|
||||
<span class="lineNum"> 1145 </span> :
|
||||
<span class="lineNum"> 1146 </span> : /**
|
||||
<span class="lineNum"> 1147 </span> : * Extract the rehash information.
|
||||
<a name="1148"><span class="lineNum"> 1148 </span> : * Report if the block address is using the old hash and needs to be rehashed.</a>
|
||||
<span class="lineNum"> 1149 </span> : */
|
||||
<span class="lineNum"> 1150 </span><span class="lineCov"> 2046851 : static inline int info_get_rehash(snapraid_info info)</span>
|
||||
<span class="lineNum"> 1150 </span><span class="lineCov"> 2046849 : static inline int info_get_rehash(snapraid_info info)</span>
|
||||
<span class="lineNum"> 1151 </span> : {
|
||||
<span class="lineNum"> 1152 </span><span class="lineCov"> 2046851 : return (info & 0x2) != 0;</span>
|
||||
<span class="lineNum"> 1152 </span><span class="lineCov"> 2046849 : return (info & 0x2) != 0;</span>
|
||||
<span class="lineNum"> 1153 </span> : }
|
||||
<span class="lineNum"> 1154 </span> :
|
||||
<span class="lineNum"> 1155 </span> : /**
|
||||
<span class="lineNum"> 1156 </span> : * Extract the scrubbed information.
|
||||
<a name="1157"><span class="lineNum"> 1157 </span> : * Report if the block address was never scrubbed.</a>
|
||||
<span class="lineNum"> 1158 </span> : */
|
||||
<span class="lineNum"> 1159 </span><span class="lineCov"> 68634 : static inline int info_get_justsynced(snapraid_info info)</span>
|
||||
<span class="lineNum"> 1159 </span><span class="lineCov"> 68576 : static inline int info_get_justsynced(snapraid_info info)</span>
|
||||
<span class="lineNum"> 1160 </span> : {
|
||||
<span class="lineNum"> 1161 </span><span class="lineCov"> 68634 : return (info & 0x4) != 0;</span>
|
||||
<span class="lineNum"> 1161 </span><span class="lineCov"> 68576 : return (info & 0x4) != 0;</span>
|
||||
<span class="lineNum"> 1162 </span> : }
|
||||
<span class="lineNum"> 1163 </span> :
|
||||
<span class="lineNum"> 1164 </span> : /**
|
||||
|
|
@ -1243,27 +1243,27 @@
|
|||
<span class="lineNum"> 1181 </span> : * Set the info at the specified position.
|
||||
<a name="1182"><span class="lineNum"> 1182 </span> : * The position is allocated if not yet done.</a>
|
||||
<span class="lineNum"> 1183 </span> : */
|
||||
<span class="lineNum"> 1184 </span><span class="lineCov"> 1698121 : static inline void info_set(tommy_arrayblkof* array, block_off_t pos, snapraid_info info)</span>
|
||||
<span class="lineNum"> 1184 </span><span class="lineCov"> 1698196 : static inline void info_set(tommy_arrayblkof* array, block_off_t pos, snapraid_info info)</span>
|
||||
<span class="lineNum"> 1185 </span> : {
|
||||
<span class="lineNum"> 1186 </span><span class="lineCov"> 1698121 : tommy_arrayblkof_grow(array, pos + 1);</span>
|
||||
<span class="lineNum"> 1186 </span><span class="lineCov"> 1698196 : tommy_arrayblkof_grow(array, pos + 1);</span>
|
||||
<span class="lineNum"> 1187 </span> :
|
||||
<span class="lineNum"> 1188 </span><span class="lineCov"> 1698121 : memcpy(tommy_arrayblkof_ref(array, pos), &info, sizeof(snapraid_info));</span>
|
||||
<span class="lineNum"> 1189 </span><span class="lineCov"> 1698121 : }</span>
|
||||
<span class="lineNum"> 1188 </span><span class="lineCov"> 1698196 : memcpy(tommy_arrayblkof_ref(array, pos), &info, sizeof(snapraid_info));</span>
|
||||
<span class="lineNum"> 1189 </span><span class="lineCov"> 1698196 : }</span>
|
||||
<span class="lineNum"> 1190 </span> :
|
||||
<span class="lineNum"> 1191 </span> : /**
|
||||
<span class="lineNum"> 1192 </span> : * Get the info at the specified position.
|
||||
<a name="1193"><span class="lineNum"> 1193 </span> : * For not allocated position, 0 is returned.</a>
|
||||
<span class="lineNum"> 1194 </span> : */
|
||||
<span class="lineNum"> 1195 </span><span class="lineCov"> 5098669 : static inline snapraid_info info_get(tommy_arrayblkof* array, block_off_t pos)</span>
|
||||
<span class="lineNum"> 1195 </span><span class="lineCov"> 5098731 : static inline snapraid_info info_get(tommy_arrayblkof* array, block_off_t pos)</span>
|
||||
<span class="lineNum"> 1196 </span> : {
|
||||
<span class="lineNum"> 1197 </span> : snapraid_info info;
|
||||
<span class="lineNum"> 1198 </span> :
|
||||
<span class="lineNum"> 1199 </span><span class="lineCov"> 5098669 : if (pos >= tommy_arrayblkof_size(array))</span>
|
||||
<span class="lineNum"> 1199 </span><span class="lineCov"> 5098731 : if (pos >= tommy_arrayblkof_size(array))</span>
|
||||
<span class="lineNum"> 1200 </span><span class="lineCov"> 262643 : return 0;</span>
|
||||
<span class="lineNum"> 1201 </span> :
|
||||
<span class="lineNum"> 1202 </span><span class="lineCov"> 4836026 : memcpy(&info, tommy_arrayblkof_ref(array, pos), sizeof(snapraid_info));</span>
|
||||
<span class="lineNum"> 1202 </span><span class="lineCov"> 4836088 : memcpy(&info, tommy_arrayblkof_ref(array, pos), sizeof(snapraid_info));</span>
|
||||
<span class="lineNum"> 1203 </span> :
|
||||
<span class="lineNum"> 1204 </span><span class="lineCov"> 4836026 : return info;</span>
|
||||
<span class="lineNum"> 1204 </span><span class="lineCov"> 4836088 : return info;</span>
|
||||
<span class="lineNum"> 1205 </span> : }
|
||||
<span class="lineNum"> 1206 </span> :
|
||||
<span class="lineNum"> 1207 </span> : /**
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">8</td>
|
||||
|
|
@ -61,31 +61,31 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#235">handle_read</a></td>
|
||||
<td class="coverFnHi">5856126</td>
|
||||
<td class="coverFnHi">5854217</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#207">handle_close</a></td>
|
||||
<td class="coverFnHi">4647204</td>
|
||||
<td class="coverFnHi">4646580</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#142">handle_open</a></td>
|
||||
<td class="coverFnHi">2185997</td>
|
||||
<td class="coverFnHi">2184769</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#25">handle_create</a></td>
|
||||
<td class="coverFnHi">771283</td>
|
||||
<td class="coverFnHi">771310</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#294">handle_write</a></td>
|
||||
<td class="coverFnHi">288377</td>
|
||||
<td class="coverFnHi">288515</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#329">handle_utime</a></td>
|
||||
<td class="coverFnHi">119405</td>
|
||||
<td class="coverFnHi">119462</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#120">handle_truncate</a></td>
|
||||
<td class="coverFnHi">3254</td>
|
||||
<td class="coverFnHi">3189</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#349">handle_mapping</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">8</td>
|
||||
|
|
@ -61,11 +61,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#207">handle_close</a></td>
|
||||
<td class="coverFnHi">4647204</td>
|
||||
<td class="coverFnHi">4646580</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#25">handle_create</a></td>
|
||||
<td class="coverFnHi">771283</td>
|
||||
<td class="coverFnHi">771310</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#349">handle_mapping</a></td>
|
||||
|
|
@ -73,23 +73,23 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#142">handle_open</a></td>
|
||||
<td class="coverFnHi">2185997</td>
|
||||
<td class="coverFnHi">2184769</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#235">handle_read</a></td>
|
||||
<td class="coverFnHi">5856126</td>
|
||||
<td class="coverFnHi">5854217</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#120">handle_truncate</a></td>
|
||||
<td class="coverFnHi">3254</td>
|
||||
<td class="coverFnHi">3189</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#329">handle_utime</a></td>
|
||||
<td class="coverFnHi">119405</td>
|
||||
<td class="coverFnHi">119462</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="handle.c.gcov.html#294">handle_write</a></td>
|
||||
<td class="coverFnHi">288377</td>
|
||||
<td class="coverFnHi">288515</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">8</td>
|
||||
|
|
@ -86,64 +86,64 @@
|
|||
<span class="lineNum"> 24 </span> : /****************************************************************************/
|
||||
<a name="25"><span class="lineNum"> 25 </span> : /* handle */</a>
|
||||
<span class="lineNum"> 26 </span> :
|
||||
<span class="lineNum"> 27 </span><span class="lineCov"> 771283 : int handle_create(struct snapraid_handle* handle, struct snapraid_file* file, int mode)</span>
|
||||
<span class="lineNum"> 27 </span><span class="lineCov"> 771310 : int handle_create(struct snapraid_handle* handle, struct snapraid_file* file, int mode)</span>
|
||||
<span class="lineNum"> 28 </span> : {
|
||||
<span class="lineNum"> 29 </span> : int ret;
|
||||
<span class="lineNum"> 30 </span> : int flags;
|
||||
<span class="lineNum"> 31 </span> :
|
||||
<span class="lineNum"> 32 </span> : /* if it's the same file, and already opened, nothing to do */
|
||||
<span class="lineNum"> 33 </span><span class="lineCov"> 771283 : if (handle->file == file && handle->f != -1) {</span>
|
||||
<span class="lineNum"> 33 </span><span class="lineCov"> 771310 : if (handle->file == file && handle->f != -1) {</span>
|
||||
<span class="lineNum"> 34 </span><span class="lineNoCov"> 0 : return 0;</span>
|
||||
<span class="lineNum"> 35 </span> : }
|
||||
<span class="lineNum"> 36 </span> :
|
||||
<span class="lineNum"> 37 </span><span class="lineCov"> 771283 : advise_init(&handle->advise, mode);</span>
|
||||
<span class="lineNum"> 38 </span><span class="lineCov"> 771283 : pathprint(handle->path, sizeof(handle->path), "%s%s", handle->disk->dir, file->sub);</span>
|
||||
<span class="lineNum"> 37 </span><span class="lineCov"> 771310 : advise_init(&handle->advise, mode);</span>
|
||||
<span class="lineNum"> 38 </span><span class="lineCov"> 771310 : pathprint(handle->path, sizeof(handle->path), "%s%s", handle->disk->dir, file->sub);</span>
|
||||
<span class="lineNum"> 39 </span> :
|
||||
<span class="lineNum"> 40 </span><span class="lineCov"> 771283 : ret = mkancestor(handle->path);</span>
|
||||
<span class="lineNum"> 41 </span><span class="lineCov"> 771283 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 40 </span><span class="lineCov"> 771310 : ret = mkancestor(handle->path);</span>
|
||||
<span class="lineNum"> 41 </span><span class="lineCov"> 771310 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 42 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 43 </span> : return -1;
|
||||
<span class="lineNum"> 44 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 45 </span> : }
|
||||
<span class="lineNum"> 46 </span> :
|
||||
<span class="lineNum"> 47 </span> : /* initial values, changed later if required */
|
||||
<span class="lineNum"> 48 </span><span class="lineCov"> 771283 : handle->created = 0;</span>
|
||||
<span class="lineNum"> 48 </span><span class="lineCov"> 771310 : handle->created = 0;</span>
|
||||
<span class="lineNum"> 49 </span> :
|
||||
<span class="lineNum"> 50 </span> : /* flags for opening */
|
||||
<span class="lineNum"> 51 </span> : /* O_BINARY: open as binary file (Windows only) */
|
||||
<span class="lineNum"> 52 </span> : /* O_NOFOLLOW: do not follow links to ensure to open the real file */
|
||||
<span class="lineNum"> 53 </span><span class="lineCov"> 771283 : flags = O_BINARY | O_NOFOLLOW | advise_flags(&handle->advise);</span>
|
||||
<span class="lineNum"> 53 </span><span class="lineCov"> 771310 : flags = O_BINARY | O_NOFOLLOW | advise_flags(&handle->advise);</span>
|
||||
<span class="lineNum"> 54 </span> :
|
||||
<span class="lineNum"> 55 </span> : /* open for read write */
|
||||
<span class="lineNum"> 56 </span><span class="lineCov"> 771283 : handle->f = open(handle->path, flags | O_RDWR);</span>
|
||||
<span class="lineNum"> 56 </span><span class="lineCov"> 771310 : handle->f = open(handle->path, flags | O_RDWR);</span>
|
||||
<span class="lineNum"> 57 </span> :
|
||||
<span class="lineNum"> 58 </span> : /* if failed for missing write permission */
|
||||
<span class="lineNum"> 59 </span><span class="lineCov"> 771283 : if (handle->f == -1 && (errno == EACCES || errno == EROFS)) {</span>
|
||||
<span class="lineNum"> 59 </span><span class="lineCov"> 771310 : if (handle->f == -1 && (errno == EACCES || errno == EROFS)) {</span>
|
||||
<span class="lineNum"> 60 </span> : /* open for real-only */
|
||||
<span class="lineNum"> 61 </span><span class="lineNoCov"> 0 : handle->f = open(handle->path, flags | O_RDONLY);</span>
|
||||
<span class="lineNum"> 62 </span> : }
|
||||
<span class="lineNum"> 63 </span> :
|
||||
<span class="lineNum"> 64 </span> : /* if failed for missing file */
|
||||
<span class="lineNum"> 65 </span><span class="lineCov"> 771283 : if (handle->f == -1 && errno == ENOENT) {</span>
|
||||
<span class="lineNum"> 65 </span><span class="lineCov"> 771310 : if (handle->f == -1 && errno == ENOENT) {</span>
|
||||
<span class="lineNum"> 66 </span> : char path_from[PATH_MAX];
|
||||
<span class="lineNum"> 67 </span> :
|
||||
<span class="lineNum"> 68 </span> : /* check if exists a .unrecoverable copy, and rename to the real one */
|
||||
<span class="lineNum"> 69 </span><span class="lineCov"> 176318 : pathprint(path_from, sizeof(path_from), "%s.unrecoverable", handle->path);</span>
|
||||
<span class="lineNum"> 69 </span><span class="lineCov"> 176441 : pathprint(path_from, sizeof(path_from), "%s.unrecoverable", handle->path);</span>
|
||||
<span class="lineNum"> 70 </span> :
|
||||
<span class="lineNum"> 71 </span><span class="lineCov"> 176318 : if (rename(path_from, handle->path) == 0) {</span>
|
||||
<span class="lineNum"> 71 </span><span class="lineCov"> 176441 : if (rename(path_from, handle->path) == 0) {</span>
|
||||
<span class="lineNum"> 72 </span> : /* open for read write */
|
||||
<span class="lineNum"> 73 </span><span class="lineCov"> 63274 : handle->f = open(handle->path, flags | O_RDWR);</span>
|
||||
<span class="lineNum"> 73 </span><span class="lineCov"> 63323 : handle->f = open(handle->path, flags | O_RDWR);</span>
|
||||
<span class="lineNum"> 74 </span> : } else {
|
||||
<span class="lineNum"> 75 </span> : /* create it */
|
||||
<span class="lineNum"> 76 </span><span class="lineCov"> 113044 : handle->f = open(handle->path, flags | O_RDWR | O_CREAT, 0600);</span>
|
||||
<span class="lineNum"> 77 </span><span class="lineCov"> 113044 : if (handle->f != -1) {</span>
|
||||
<span class="lineNum"> 76 </span><span class="lineCov"> 113118 : handle->f = open(handle->path, flags | O_RDWR | O_CREAT, 0600);</span>
|
||||
<span class="lineNum"> 77 </span><span class="lineCov"> 113118 : if (handle->f != -1) {</span>
|
||||
<span class="lineNum"> 78 </span> : /* mark it as created if really done */
|
||||
<span class="lineNum"> 79 </span><span class="lineCov"> 113044 : handle->created = 1;</span>
|
||||
<span class="lineNum"> 79 </span><span class="lineCov"> 113118 : handle->created = 1;</span>
|
||||
<span class="lineNum"> 80 </span> : }
|
||||
<span class="lineNum"> 81 </span> : }
|
||||
<span class="lineNum"> 82 </span> : }
|
||||
<span class="lineNum"> 83 </span> :
|
||||
<span class="lineNum"> 84 </span><span class="lineCov"> 771283 : if (handle->f == -1) {</span>
|
||||
<span class="lineNum"> 84 </span><span class="lineCov"> 771310 : if (handle->f == -1) {</span>
|
||||
<span class="lineNum"> 85 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 86 </span> : /* invalidate for error */
|
||||
<span class="lineNum"> 87 </span> : handle->file = 0;
|
||||
|
|
@ -156,11 +156,11 @@
|
|||
<span class="lineNum"> 94 </span> : }
|
||||
<span class="lineNum"> 95 </span> :
|
||||
<span class="lineNum"> 96 </span> : /* just opened */
|
||||
<span class="lineNum"> 97 </span><span class="lineCov"> 771283 : handle->file = file;</span>
|
||||
<span class="lineNum"> 97 </span><span class="lineCov"> 771310 : handle->file = file;</span>
|
||||
<span class="lineNum"> 98 </span> :
|
||||
<span class="lineNum"> 99 </span> : /* get the stat info */
|
||||
<span class="lineNum"> 100 </span><span class="lineCov"> 771283 : ret = fstat(handle->f, &handle->st);</span>
|
||||
<span class="lineNum"> 101 </span><span class="lineCov"> 771283 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 100 </span><span class="lineCov"> 771310 : ret = fstat(handle->f, &handle->st);</span>
|
||||
<span class="lineNum"> 101 </span><span class="lineCov"> 771310 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 102 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 103 </span> : log_fatal("Error accessing file '%s'. %s.\n", handle->path, strerror(errno));
|
||||
<span class="lineNum"> 104 </span> : return -1;
|
||||
|
|
@ -168,25 +168,25 @@
|
|||
<span class="lineNum"> 106 </span> : }
|
||||
<span class="lineNum"> 107 </span> :
|
||||
<span class="lineNum"> 108 </span> : /* get the size of the existing data */
|
||||
<span class="lineNum"> 109 </span><span class="lineCov"> 771283 : handle->valid_size = handle->st.st_size;</span>
|
||||
<span class="lineNum"> 109 </span><span class="lineCov"> 771310 : handle->valid_size = handle->st.st_size;</span>
|
||||
<span class="lineNum"> 110 </span> :
|
||||
<span class="lineNum"> 111 </span><span class="lineCov"> 771283 : ret = advise_open(&handle->advise, handle->f);</span>
|
||||
<span class="lineNum"> 112 </span><span class="lineCov"> 771283 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 111 </span><span class="lineCov"> 771310 : ret = advise_open(&handle->advise, handle->f);</span>
|
||||
<span class="lineNum"> 112 </span><span class="lineCov"> 771310 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 113 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 114 </span> : log_fatal("Error advising file '%s'. %s.\n", handle->path, strerror(errno));
|
||||
<span class="lineNum"> 115 </span> : return -1;
|
||||
<span class="lineNum"> 116 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 117 </span> : }
|
||||
<span class="lineNum"> 118 </span> :
|
||||
<span class="lineNum"> 119 </span><span class="lineCov"> 771283 : return 0;</span>
|
||||
<span class="lineNum"> 119 </span><span class="lineCov"> 771310 : return 0;</span>
|
||||
<a name="120"><span class="lineNum"> 120 </span> : }</a>
|
||||
<span class="lineNum"> 121 </span> :
|
||||
<span class="lineNum"> 122 </span><span class="lineCov"> 3254 : int handle_truncate(struct snapraid_handle* handle, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 122 </span><span class="lineCov"> 3189 : int handle_truncate(struct snapraid_handle* handle, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 123 </span> : {
|
||||
<span class="lineNum"> 124 </span> : int ret;
|
||||
<span class="lineNum"> 125 </span> :
|
||||
<span class="lineNum"> 126 </span><span class="lineCov"> 3254 : ret = ftruncate(handle->f, file->size);</span>
|
||||
<span class="lineNum"> 127 </span><span class="lineCov"> 3254 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 126 </span><span class="lineCov"> 3189 : ret = ftruncate(handle->f, file->size);</span>
|
||||
<span class="lineNum"> 127 </span><span class="lineCov"> 3189 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 128 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 129 </span> : if (errno == EACCES) {
|
||||
<span class="lineNum"> 130 </span> : log_fatal("Failed to truncate file '%s' for missing write permission.\n", handle->path);
|
||||
|
|
@ -198,56 +198,56 @@
|
|||
<span class="lineNum"> 136 </span> : }
|
||||
<span class="lineNum"> 137 </span> :
|
||||
<span class="lineNum"> 138 </span> : /* adjust the size to the truncated size */
|
||||
<span class="lineNum"> 139 </span><span class="lineCov"> 3254 : handle->valid_size = file->size;</span>
|
||||
<span class="lineNum"> 139 </span><span class="lineCov"> 3189 : handle->valid_size = file->size;</span>
|
||||
<span class="lineNum"> 140 </span> :
|
||||
<span class="lineNum"> 141 </span><span class="lineCov"> 3254 : return 0;</span>
|
||||
<span class="lineNum"> 141 </span><span class="lineCov"> 3189 : return 0;</span>
|
||||
<a name="142"><span class="lineNum"> 142 </span> : }</a>
|
||||
<span class="lineNum"> 143 </span> :
|
||||
<span class="lineNum"> 144 </span><span class="lineCov"> 2185997 : int handle_open(struct snapraid_handle* handle, struct snapraid_file* file, int mode, fptr* out, fptr* out_missing)</span>
|
||||
<span class="lineNum"> 144 </span><span class="lineCov"> 2184769 : int handle_open(struct snapraid_handle* handle, struct snapraid_file* file, int mode, fptr* out, fptr* out_missing)</span>
|
||||
<span class="lineNum"> 145 </span> : {
|
||||
<span class="lineNum"> 146 </span> : int ret;
|
||||
<span class="lineNum"> 147 </span> : int flags;
|
||||
<span class="lineNum"> 148 </span> :
|
||||
<span class="lineNum"> 149 </span><span class="lineCov"> 2185997 : if (!out_missing)</span>
|
||||
<span class="lineNum"> 150 </span><span class="lineCov"> 2185561 : out_missing = out;</span>
|
||||
<span class="lineNum"> 149 </span><span class="lineCov"> 2184769 : if (!out_missing)</span>
|
||||
<span class="lineNum"> 150 </span><span class="lineCov"> 2184975 : out_missing = out;</span>
|
||||
<span class="lineNum"> 151 </span> :
|
||||
<span class="lineNum"> 152 </span> : /* if already opened, nothing to do */
|
||||
<span class="lineNum"> 153 </span><span class="lineCov"> 2185997 : if (handle->file == file && handle->file != 0 && handle->f != -1) {</span>
|
||||
<span class="lineNum"> 154 </span><span class="lineCov"> 468413 : return 0;</span>
|
||||
<span class="lineNum"> 153 </span><span class="lineCov"> 2184769 : if (handle->file == file && handle->file != 0 && handle->f != -1) {</span>
|
||||
<span class="lineNum"> 154 </span><span class="lineCov"> 468469 : return 0;</span>
|
||||
<span class="lineNum"> 155 </span> : }
|
||||
<span class="lineNum"> 156 </span> :
|
||||
<span class="lineNum"> 157 </span><span class="lineCov"> 1717584 : advise_init(&handle->advise, mode);</span>
|
||||
<span class="lineNum"> 158 </span><span class="lineCov"> 1717759 : pathprint(handle->path, sizeof(handle->path), "%s%s", handle->disk->dir, file->sub);</span>
|
||||
<span class="lineNum"> 157 </span><span class="lineCov"> 1716300 : advise_init(&handle->advise, mode);</span>
|
||||
<span class="lineNum"> 158 </span><span class="lineCov"> 1717209 : pathprint(handle->path, sizeof(handle->path), "%s%s", handle->disk->dir, file->sub);</span>
|
||||
<span class="lineNum"> 159 </span> :
|
||||
<span class="lineNum"> 160 </span> : /* for sure not created */
|
||||
<span class="lineNum"> 161 </span><span class="lineCov"> 1717867 : handle->created = 0;</span>
|
||||
<span class="lineNum"> 161 </span><span class="lineCov"> 1717080 : handle->created = 0;</span>
|
||||
<span class="lineNum"> 162 </span> :
|
||||
<span class="lineNum"> 163 </span> : /* flags for opening */
|
||||
<span class="lineNum"> 164 </span> : /* O_BINARY: open as binary file (Windows only) */
|
||||
<span class="lineNum"> 165 </span> : /* O_NOFOLLOW: do not follow links to ensure to open the real file */
|
||||
<span class="lineNum"> 166 </span><span class="lineCov"> 1717867 : flags = O_BINARY | O_NOFOLLOW | advise_flags(&handle->advise);</span>
|
||||
<span class="lineNum"> 166 </span><span class="lineCov"> 1717080 : flags = O_BINARY | O_NOFOLLOW | advise_flags(&handle->advise);</span>
|
||||
<span class="lineNum"> 167 </span> :
|
||||
<span class="lineNum"> 168 </span> : /* open for read */
|
||||
<span class="lineNum"> 169 </span><span class="lineCov"> 1717825 : handle->f = open_noatime(handle->path, flags | O_RDONLY);</span>
|
||||
<span class="lineNum"> 170 </span><span class="lineCov"> 1717829 : if (handle->f == -1) {</span>
|
||||
<span class="lineNum"> 169 </span><span class="lineCov"> 1717490 : handle->f = open_noatime(handle->path, flags | O_RDONLY);</span>
|
||||
<span class="lineNum"> 170 </span><span class="lineCov"> 1715996 : if (handle->f == -1) {</span>
|
||||
<span class="lineNum"> 171 </span> : /* invalidate for error */
|
||||
<span class="lineNum"> 172 </span><span class="lineCov"> 78600 : handle->file = 0;</span>
|
||||
<span class="lineNum"> 173 </span><span class="lineCov"> 78600 : handle->f = -1;</span>
|
||||
<span class="lineNum"> 174 </span><span class="lineCov"> 78600 : handle->valid_size = 0;</span>
|
||||
<span class="lineNum"> 172 </span><span class="lineCov"> 78793 : handle->file = 0;</span>
|
||||
<span class="lineNum"> 173 </span><span class="lineCov"> 78793 : handle->f = -1;</span>
|
||||
<span class="lineNum"> 174 </span><span class="lineCov"> 78793 : handle->valid_size = 0;</span>
|
||||
<span class="lineNum"> 175 </span> :
|
||||
<span class="lineNum"> 176 </span><span class="lineCov"> 78600 : if (errno == ENOENT)</span>
|
||||
<span class="lineNum"> 177 </span><span class="lineCov"> 78588 : out_missing("Missing file '%s'.\n", handle->path);</span>
|
||||
<span class="lineNum"> 176 </span><span class="lineCov"> 78793 : if (errno == ENOENT)</span>
|
||||
<span class="lineNum"> 177 </span><span class="lineCov"> 78781 : out_missing("Missing file '%s'.\n", handle->path);</span>
|
||||
<span class="lineNum"> 178 </span> : else
|
||||
<span class="lineNum"> 179 </span><span class="lineCov"> 12 : out("Error opening file '%s'. %s.\n", handle->path, strerror(errno));</span>
|
||||
<span class="lineNum"> 180 </span><span class="lineCov"> 78600 : return -1;</span>
|
||||
<span class="lineNum"> 180 </span><span class="lineCov"> 78793 : return -1;</span>
|
||||
<span class="lineNum"> 181 </span> : }
|
||||
<span class="lineNum"> 182 </span> :
|
||||
<span class="lineNum"> 183 </span> : /* just opened */
|
||||
<span class="lineNum"> 184 </span><span class="lineCov"> 1639229 : handle->file = file;</span>
|
||||
<span class="lineNum"> 184 </span><span class="lineCov"> 1637203 : handle->file = file;</span>
|
||||
<span class="lineNum"> 185 </span> :
|
||||
<span class="lineNum"> 186 </span> : /* get the stat info */
|
||||
<span class="lineNum"> 187 </span><span class="lineCov"> 1639229 : ret = fstat(handle->f, &handle->st);</span>
|
||||
<span class="lineNum"> 188 </span><span class="lineCov"> 1639236 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 187 </span><span class="lineCov"> 1637203 : ret = fstat(handle->f, &handle->st);</span>
|
||||
<span class="lineNum"> 188 </span><span class="lineCov"> 1636791 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 189 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 190 </span> : out("Error accessing file '%s'. %s.\n", handle->path, strerror(errno));
|
||||
<span class="lineNum"> 191 </span> : return -1;
|
||||
|
|
@ -255,27 +255,27 @@
|
|||
<span class="lineNum"> 193 </span> : }
|
||||
<span class="lineNum"> 194 </span> :
|
||||
<span class="lineNum"> 195 </span> : /* get the size of the existing data */
|
||||
<span class="lineNum"> 196 </span><span class="lineCov"> 1639236 : handle->valid_size = handle->st.st_size;</span>
|
||||
<span class="lineNum"> 196 </span><span class="lineCov"> 1636791 : handle->valid_size = handle->st.st_size;</span>
|
||||
<span class="lineNum"> 197 </span> :
|
||||
<span class="lineNum"> 198 </span><span class="lineCov"> 1639236 : ret = advise_open(&handle->advise, handle->f);</span>
|
||||
<span class="lineNum"> 199 </span><span class="lineCov"> 1639253 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 198 </span><span class="lineCov"> 1636791 : ret = advise_open(&handle->advise, handle->f);</span>
|
||||
<span class="lineNum"> 199 </span><span class="lineCov"> 1634580 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 200 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 201 </span> : out("Error advising file '%s'. %s.\n", handle->path, strerror(errno));
|
||||
<span class="lineNum"> 202 </span> : return -1;
|
||||
<span class="lineNum"> 203 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 204 </span> : }
|
||||
<span class="lineNum"> 205 </span> :
|
||||
<span class="lineNum"> 206 </span><span class="lineCov"> 1639253 : return 0;</span>
|
||||
<span class="lineNum"> 206 </span><span class="lineCov"> 1634580 : return 0;</span>
|
||||
<a name="207"><span class="lineNum"> 207 </span> : }</a>
|
||||
<span class="lineNum"> 208 </span> :
|
||||
<span class="lineNum"> 209 </span><span class="lineCov"> 4647204 : int handle_close(struct snapraid_handle* handle)</span>
|
||||
<span class="lineNum"> 209 </span><span class="lineCov"> 4646580 : int handle_close(struct snapraid_handle* handle)</span>
|
||||
<span class="lineNum"> 210 </span> : {
|
||||
<span class="lineNum"> 211 </span> : int ret;
|
||||
<span class="lineNum"> 212 </span> :
|
||||
<span class="lineNum"> 213 </span> : /* close if open */
|
||||
<span class="lineNum"> 214 </span><span class="lineCov"> 4647204 : if (handle->f != -1) {</span>
|
||||
<span class="lineNum"> 215 </span><span class="lineCov"> 2410548 : ret = close(handle->f);</span>
|
||||
<span class="lineNum"> 216 </span><span class="lineCov"> 2410577 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 214 </span><span class="lineCov"> 4646580 : if (handle->f != -1) {</span>
|
||||
<span class="lineNum"> 215 </span><span class="lineCov"> 2410222 : ret = close(handle->f);</span>
|
||||
<span class="lineNum"> 216 </span><span class="lineCov"> 2410480 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 217 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 218 </span> : log_fatal("Error closing file '%s'. %s.\n", handle->file->sub, strerror(errno));
|
||||
<span class="lineNum"> 219 </span> :
|
||||
|
|
@ -289,14 +289,14 @@
|
|||
<span class="lineNum"> 227 </span> : }
|
||||
<span class="lineNum"> 228 </span> :
|
||||
<span class="lineNum"> 229 </span> : /* reset the descriptor */
|
||||
<span class="lineNum"> 230 </span><span class="lineCov"> 4647233 : handle->file = 0;</span>
|
||||
<span class="lineNum"> 231 </span><span class="lineCov"> 4647233 : handle->f = -1;</span>
|
||||
<span class="lineNum"> 232 </span><span class="lineCov"> 4647233 : handle->valid_size = 0;</span>
|
||||
<span class="lineNum"> 230 </span><span class="lineCov"> 4646838 : handle->file = 0;</span>
|
||||
<span class="lineNum"> 231 </span><span class="lineCov"> 4646838 : handle->f = -1;</span>
|
||||
<span class="lineNum"> 232 </span><span class="lineCov"> 4646838 : handle->valid_size = 0;</span>
|
||||
<span class="lineNum"> 233 </span> :
|
||||
<span class="lineNum"> 234 </span><span class="lineCov"> 4647233 : return 0;</span>
|
||||
<span class="lineNum"> 234 </span><span class="lineCov"> 4646838 : return 0;</span>
|
||||
<a name="235"><span class="lineNum"> 235 </span> : }</a>
|
||||
<span class="lineNum"> 236 </span> :
|
||||
<span class="lineNum"> 237 </span><span class="lineCov"> 5856126 : int handle_read(struct snapraid_handle* handle, block_off_t file_pos, unsigned char* block_buffer, unsigned block_size, fptr* out, fptr* out_missing)</span>
|
||||
<span class="lineNum"> 237 </span><span class="lineCov"> 5854217 : int handle_read(struct snapraid_handle* handle, block_off_t file_pos, unsigned char* block_buffer, unsigned block_size, fptr* out, fptr* out_missing)</span>
|
||||
<span class="lineNum"> 238 </span> : {
|
||||
<span class="lineNum"> 239 </span> : ssize_t read_ret;
|
||||
<span class="lineNum"> 240 </span> : data_off_t offset;
|
||||
|
|
@ -304,70 +304,70 @@
|
|||
<span class="lineNum"> 242 </span> : unsigned count;
|
||||
<span class="lineNum"> 243 </span> : int ret;
|
||||
<span class="lineNum"> 244 </span> :
|
||||
<span class="lineNum"> 245 </span><span class="lineCov"> 5856126 : offset = file_pos * (data_off_t)block_size;</span>
|
||||
<span class="lineNum"> 245 </span><span class="lineCov"> 5854217 : offset = file_pos * (data_off_t)block_size;</span>
|
||||
<span class="lineNum"> 246 </span> :
|
||||
<span class="lineNum"> 247 </span><span class="lineCov"> 5856126 : if (!out_missing)</span>
|
||||
<span class="lineNum"> 248 </span><span class="lineCov"> 5843207 : out_missing = out;</span>
|
||||
<span class="lineNum"> 247 </span><span class="lineCov"> 5854217 : if (!out_missing)</span>
|
||||
<span class="lineNum"> 248 </span><span class="lineCov"> 5837298 : out_missing = out;</span>
|
||||
<span class="lineNum"> 249 </span> :
|
||||
<span class="lineNum"> 250 </span> : /* check if we are going to read only not initialized data */
|
||||
<span class="lineNum"> 251 </span><span class="lineCov"> 5856126 : if (offset >= handle->valid_size) {</span>
|
||||
<span class="lineNum"> 251 </span><span class="lineCov"> 5854217 : if (offset >= handle->valid_size) {</span>
|
||||
<span class="lineNum"> 252 </span> : /* if the file is missing, it's at 0 size, or it's rebuilt while reading */
|
||||
<span class="lineNum"> 253 </span><span class="lineCov"> 433247 : if (offset == handle->valid_size || handle->valid_size == 0)</span>
|
||||
<span class="lineNum"> 254 </span><span class="lineCov"> 431947 : out_missing("Reading data from missing file '%s' at offset %" PRIu64 ".\n", handle->path, offset);</span>
|
||||
<span class="lineNum"> 253 </span><span class="lineCov"> 433443 : if (offset == handle->valid_size || handle->valid_size == 0)</span>
|
||||
<span class="lineNum"> 254 </span><span class="lineCov"> 432152 : out_missing("Reading data from missing file '%s' at offset %" PRIu64 ".\n", handle->path, offset);</span>
|
||||
<span class="lineNum"> 255 </span> : else
|
||||
<span class="lineNum"> 256 </span><span class="lineCov"> 1300 : out("Reading missing data from file '%s' at offset %" PRIu64 ".\n", handle->path, offset);</span>
|
||||
<span class="lineNum"> 257 </span><span class="lineCov"> 433247 : return -1;</span>
|
||||
<span class="lineNum"> 256 </span><span class="lineCov"> 1291 : out("Reading missing data from file '%s' at offset %" PRIu64 ".\n", handle->path, offset);</span>
|
||||
<span class="lineNum"> 257 </span><span class="lineCov"> 433443 : return -1;</span>
|
||||
<span class="lineNum"> 258 </span> : }
|
||||
<span class="lineNum"> 259 </span> :
|
||||
<span class="lineNum"> 260 </span><span class="lineCov"> 5422879 : read_size = file_block_size(handle->file, file_pos, block_size);</span>
|
||||
<span class="lineNum"> 260 </span><span class="lineCov"> 5420774 : read_size = file_block_size(handle->file, file_pos, block_size);</span>
|
||||
<span class="lineNum"> 261 </span> :
|
||||
<span class="lineNum"> 262 </span><span class="lineCov"> 5422871 : count = 0;</span>
|
||||
<span class="lineNum"> 262 </span><span class="lineCov"> 5418955 : count = 0;</span>
|
||||
<span class="lineNum"> 263 </span> : do {
|
||||
<span class="lineNum"> 264 </span> : /* read the full block to support O_DIRECT */
|
||||
<span class="lineNum"> 265 </span><span class="lineCov"> 5431700 : read_ret = pread(handle->f, block_buffer + count, block_size - count, offset + count);</span>
|
||||
<span class="lineNum"> 266 </span><span class="lineCov"> 5431360 : if (read_ret < 0) {</span>
|
||||
<span class="lineNum"> 265 </span><span class="lineCov"> 5429094 : read_ret = pread(handle->f, block_buffer + count, block_size - count, offset + count);</span>
|
||||
<span class="lineNum"> 266 </span><span class="lineCov"> 5428298 : if (read_ret < 0) {</span>
|
||||
<span class="lineNum"> 267 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 268 </span> : out("Error reading file '%s' at offset %" PRIu64 " for size %u. %s.\n", handle->path, offset + count, block_size - count, strerror(errno));
|
||||
<span class="lineNum"> 269 </span> : return -1;
|
||||
<span class="lineNum"> 270 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 271 </span> : }
|
||||
<span class="lineNum"> 272 </span><span class="lineCov"> 5431360 : if (read_ret == 0) {</span>
|
||||
<span class="lineNum"> 273 </span><span class="lineCov"> 8879 : out("Unexpected end of file '%s' at offset %" PRIu64 ". %s.\n", handle->path, offset, strerror(errno));</span>
|
||||
<span class="lineNum"> 274 </span><span class="lineCov"> 8879 : return -1;</span>
|
||||
<span class="lineNum"> 272 </span><span class="lineCov"> 5428298 : if (read_ret == 0) {</span>
|
||||
<span class="lineNum"> 273 </span><span class="lineCov"> 8747 : out("Unexpected end of file '%s' at offset %" PRIu64 ". %s.\n", handle->path, offset, strerror(errno));</span>
|
||||
<span class="lineNum"> 274 </span><span class="lineCov"> 8747 : return -1;</span>
|
||||
<span class="lineNum"> 275 </span> : }
|
||||
<span class="lineNum"> 276 </span> :
|
||||
<span class="lineNum"> 277 </span><span class="lineCov"> 5422481 : count += read_ret;</span>
|
||||
<span class="lineNum"> 278 </span><span class="lineCov"> 5422481 : } while (count < read_size);</span>
|
||||
<span class="lineNum"> 277 </span><span class="lineCov"> 5419551 : count += read_ret;</span>
|
||||
<span class="lineNum"> 278 </span><span class="lineCov"> 5419551 : } while (count < read_size);</span>
|
||||
<span class="lineNum"> 279 </span> :
|
||||
<span class="lineNum"> 280 </span> : /* pad with 0 */
|
||||
<span class="lineNum"> 281 </span><span class="lineCov"> 5413652 : if (read_size < block_size) {</span>
|
||||
<span class="lineNum"> 282 </span><span class="lineCov"> 2188671 : memset(block_buffer + read_size, 0, block_size - read_size);</span>
|
||||
<span class="lineNum"> 281 </span><span class="lineCov"> 5409412 : if (read_size < block_size) {</span>
|
||||
<span class="lineNum"> 282 </span><span class="lineCov"> 2188268 : memset(block_buffer + read_size, 0, block_size - read_size);</span>
|
||||
<span class="lineNum"> 283 </span> : }
|
||||
<span class="lineNum"> 284 </span> :
|
||||
<span class="lineNum"> 285 </span><span class="lineCov"> 5413652 : ret = advise_read(&handle->advise, handle->f, offset, block_size);</span>
|
||||
<span class="lineNum"> 286 </span><span class="lineCov"> 5413607 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 285 </span><span class="lineCov"> 5409412 : ret = advise_read(&handle->advise, handle->f, offset, block_size);</span>
|
||||
<span class="lineNum"> 286 </span><span class="lineCov"> 5410633 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 287 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 288 </span> : out("Error advising file '%s'. %s.\n", handle->path, strerror(errno));
|
||||
<span class="lineNum"> 289 </span> : return -1;
|
||||
<span class="lineNum"> 290 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 291 </span> : }
|
||||
<span class="lineNum"> 292 </span> :
|
||||
<span class="lineNum"> 293 </span><span class="lineCov"> 5413607 : return read_size;</span>
|
||||
<span class="lineNum"> 293 </span><span class="lineCov"> 5410633 : return read_size;</span>
|
||||
<a name="294"><span class="lineNum"> 294 </span> : }</a>
|
||||
<span class="lineNum"> 295 </span> :
|
||||
<span class="lineNum"> 296 </span><span class="lineCov"> 288377 : int handle_write(struct snapraid_handle* handle, block_off_t file_pos, unsigned char* block_buffer, unsigned block_size)</span>
|
||||
<span class="lineNum"> 296 </span><span class="lineCov"> 288515 : int handle_write(struct snapraid_handle* handle, block_off_t file_pos, unsigned char* block_buffer, unsigned block_size)</span>
|
||||
<span class="lineNum"> 297 </span> : {
|
||||
<span class="lineNum"> 298 </span> : ssize_t write_ret;
|
||||
<span class="lineNum"> 299 </span> : data_off_t offset;
|
||||
<span class="lineNum"> 300 </span> : unsigned write_size;
|
||||
<span class="lineNum"> 301 </span> : int ret;
|
||||
<span class="lineNum"> 302 </span> :
|
||||
<span class="lineNum"> 303 </span><span class="lineCov"> 288377 : offset = file_pos * (data_off_t)block_size;</span>
|
||||
<span class="lineNum"> 303 </span><span class="lineCov"> 288515 : offset = file_pos * (data_off_t)block_size;</span>
|
||||
<span class="lineNum"> 304 </span> :
|
||||
<span class="lineNum"> 305 </span><span class="lineCov"> 288377 : write_size = file_block_size(handle->file, file_pos, block_size);</span>
|
||||
<span class="lineNum"> 305 </span><span class="lineCov"> 288515 : write_size = file_block_size(handle->file, file_pos, block_size);</span>
|
||||
<span class="lineNum"> 306 </span> :
|
||||
<span class="lineNum"> 307 </span><span class="lineCov"> 288377 : write_ret = pwrite(handle->f, block_buffer, write_size, offset);</span>
|
||||
<span class="lineNum"> 308 </span><span class="lineCov"> 288377 : if (write_ret != (ssize_t)write_size) { /* conversion is safe because block_size is always small */</span>
|
||||
<span class="lineNum"> 307 </span><span class="lineCov"> 288515 : write_ret = pwrite(handle->f, block_buffer, write_size, offset);</span>
|
||||
<span class="lineNum"> 308 </span><span class="lineCov"> 288515 : if (write_ret != (ssize_t)write_size) { /* conversion is safe because block_size is always small */</span>
|
||||
<span class="lineNum"> 309 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 310 </span> : log_fatal("Error writing file '%s'. %s.\n", handle->path, strerror(errno));
|
||||
<span class="lineNum"> 311 </span> : return -1;
|
||||
|
|
@ -375,39 +375,39 @@
|
|||
<span class="lineNum"> 313 </span> : }
|
||||
<span class="lineNum"> 314 </span> :
|
||||
<span class="lineNum"> 315 </span> : /* adjust the size of the valid data */
|
||||
<span class="lineNum"> 316 </span><span class="lineCov"> 288377 : if (handle->valid_size < offset + write_size) {</span>
|
||||
<span class="lineNum"> 317 </span><span class="lineCov"> 282355 : handle->valid_size = offset + write_size;</span>
|
||||
<span class="lineNum"> 316 </span><span class="lineCov"> 288515 : if (handle->valid_size < offset + write_size) {</span>
|
||||
<span class="lineNum"> 317 </span><span class="lineCov"> 282439 : handle->valid_size = offset + write_size;</span>
|
||||
<span class="lineNum"> 318 </span> : }
|
||||
<span class="lineNum"> 319 </span> :
|
||||
<span class="lineNum"> 320 </span><span class="lineCov"> 288377 : ret = advise_write(&handle->advise, handle->f, offset, block_size);</span>
|
||||
<span class="lineNum"> 321 </span><span class="lineCov"> 288377 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 320 </span><span class="lineCov"> 288515 : ret = advise_write(&handle->advise, handle->f, offset, block_size);</span>
|
||||
<span class="lineNum"> 321 </span><span class="lineCov"> 288515 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 322 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 323 </span> : log_fatal("Error advising file '%s'. %s.\n", handle->path, strerror(errno));
|
||||
<span class="lineNum"> 324 </span> : return -1;
|
||||
<span class="lineNum"> 325 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 326 </span> : }
|
||||
<span class="lineNum"> 327 </span> :
|
||||
<span class="lineNum"> 328 </span><span class="lineCov"> 288377 : return 0;</span>
|
||||
<span class="lineNum"> 328 </span><span class="lineCov"> 288515 : return 0;</span>
|
||||
<a name="329"><span class="lineNum"> 329 </span> : }</a>
|
||||
<span class="lineNum"> 330 </span> :
|
||||
<span class="lineNum"> 331 </span><span class="lineCov"> 119405 : int handle_utime(struct snapraid_handle* handle)</span>
|
||||
<span class="lineNum"> 331 </span><span class="lineCov"> 119462 : int handle_utime(struct snapraid_handle* handle)</span>
|
||||
<span class="lineNum"> 332 </span> : {
|
||||
<span class="lineNum"> 333 </span> : int ret;
|
||||
<span class="lineNum"> 334 </span> :
|
||||
<span class="lineNum"> 335 </span> : /* do nothing if not opened */
|
||||
<span class="lineNum"> 336 </span><span class="lineCov"> 119405 : if (handle->f == -1)</span>
|
||||
<span class="lineNum"> 336 </span><span class="lineCov"> 119462 : if (handle->f == -1)</span>
|
||||
<span class="lineNum"> 337 </span><span class="lineNoCov"> 0 : return 0;</span>
|
||||
<span class="lineNum"> 338 </span> :
|
||||
<span class="lineNum"> 339 </span><span class="lineCov"> 119405 : ret = fmtime(handle->f, handle->file->mtime_sec, handle->file->mtime_nsec);</span>
|
||||
<span class="lineNum"> 339 </span><span class="lineCov"> 119462 : ret = fmtime(handle->f, handle->file->mtime_sec, handle->file->mtime_nsec);</span>
|
||||
<span class="lineNum"> 340 </span> :
|
||||
<span class="lineNum"> 341 </span><span class="lineCov"> 119405 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 341 </span><span class="lineCov"> 119462 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 342 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 343 </span> : log_fatal("Error timing file '%s'. %s.\n", handle->file->sub, strerror(errno));
|
||||
<span class="lineNum"> 344 </span> : return -1;
|
||||
<span class="lineNum"> 345 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 346 </span> : }
|
||||
<span class="lineNum"> 347 </span> :
|
||||
<span class="lineNum"> 348 </span><span class="lineCov"> 119405 : return 0;</span>
|
||||
<span class="lineNum"> 348 </span><span class="lineCov"> 119462 : return 0;</span>
|
||||
<a name="349"><span class="lineNum"> 349 </span> : }</a>
|
||||
<span class="lineNum"> 350 </span> :
|
||||
<span class="lineNum"> 351 </span><span class="lineCov"> 221 : struct snapraid_handle* handle_mapping(struct snapraid_state* state, unsigned* handlemax)</span>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">7</td>
|
||||
|
|
@ -61,11 +61,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="import.c.gcov.html#47">import_block_hash</a></td>
|
||||
<td class="coverFnHi">656604</td>
|
||||
<td class="coverFnHi">657048</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="import.c.gcov.html#146">state_import_fetch</a></td>
|
||||
<td class="coverFnHi">652132</td>
|
||||
<td class="coverFnHi">652576</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="import.c.gcov.html#27">import_block_hash_compare</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">7</td>
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="import.c.gcov.html#47">import_block_hash</a></td>
|
||||
<td class="coverFnHi">656604</td>
|
||||
<td class="coverFnHi">657048</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="import.c.gcov.html#27">import_block_hash_compare</a></td>
|
||||
|
|
@ -89,7 +89,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="import.c.gcov.html#146">state_import_fetch</a></td>
|
||||
<td class="coverFnHi">652132</td>
|
||||
<td class="coverFnHi">652576</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">7</td>
|
||||
|
|
@ -108,10 +108,10 @@
|
|||
<span class="lineNum"> 46 </span> : * Compute the hash of the hash for an import block.
|
||||
<a name="47"><span class="lineNum"> 47 </span> : * We just use the first 32 bit of the hash itself.</a>
|
||||
<span class="lineNum"> 48 </span> : */
|
||||
<span class="lineNum"> 49 </span><span class="lineCov"> 656604 : static inline tommy_uint32_t import_block_hash(const unsigned char* hash)</span>
|
||||
<span class="lineNum"> 49 </span><span class="lineCov"> 657048 : static inline tommy_uint32_t import_block_hash(const unsigned char* hash)</span>
|
||||
<span class="lineNum"> 50 </span> : {
|
||||
<span class="lineNum"> 51 </span> : /* the hash data is not aligned, and we cannot access it with a direct cast */
|
||||
<span class="lineNum"> 52 </span><span class="lineCov"> 656604 : return hash[0] | ((uint32_t)hash[1] << 8) | ((uint32_t)hash[2] << 16) | ((uint32_t)hash[3] << 24);</span>
|
||||
<span class="lineNum"> 52 </span><span class="lineCov"> 657048 : return hash[0] | ((uint32_t)hash[1] << 8) | ((uint32_t)hash[2] << 16) | ((uint32_t)hash[3] << 24);</span>
|
||||
<a name="53"><span class="lineNum"> 53 </span> : }</a>
|
||||
<span class="lineNum"> 54 </span> :
|
||||
<span class="lineNum"> 55 </span><span class="lineCov"> 1750 : static void import_file(struct snapraid_state* state, const char* path, uint64_t size)</span>
|
||||
|
|
@ -207,24 +207,24 @@
|
|||
<span class="lineNum"> 145 </span><span class="lineCov"> 1750 : free(file);</span>
|
||||
<a name="146"><span class="lineNum"> 146 </span><span class="lineCov"> 1750 : }</span></a>
|
||||
<span class="lineNum"> 147 </span> :
|
||||
<span class="lineNum"> 148 </span><span class="lineCov"> 652132 : int state_import_fetch(struct snapraid_state* state, int rehash, struct snapraid_block* missing_block, unsigned char* buffer)</span>
|
||||
<span class="lineNum"> 148 </span><span class="lineCov"> 652576 : int state_import_fetch(struct snapraid_state* state, int rehash, struct snapraid_block* missing_block, unsigned char* buffer)</span>
|
||||
<span class="lineNum"> 149 </span> : {
|
||||
<span class="lineNum"> 150 </span> : struct snapraid_import_block* block;
|
||||
<span class="lineNum"> 151 </span> : int ret;
|
||||
<span class="lineNum"> 152 </span> : int f;
|
||||
<span class="lineNum"> 153 </span><span class="lineCov"> 652132 : const unsigned char* hash = missing_block->hash;</span>
|
||||
<span class="lineNum"> 154 </span><span class="lineCov"> 652132 : unsigned block_size = state->block_size;</span>
|
||||
<span class="lineNum"> 153 </span><span class="lineCov"> 652576 : const unsigned char* hash = missing_block->hash;</span>
|
||||
<span class="lineNum"> 154 </span><span class="lineCov"> 652576 : unsigned block_size = state->block_size;</span>
|
||||
<span class="lineNum"> 155 </span> : unsigned read_size;
|
||||
<span class="lineNum"> 156 </span> : unsigned char buffer_hash[HASH_MAX];
|
||||
<span class="lineNum"> 157 </span> : const char* path;
|
||||
<span class="lineNum"> 158 </span> :
|
||||
<span class="lineNum"> 159 </span><span class="lineCov"> 652132 : if (rehash) {</span>
|
||||
<span class="lineNum"> 159 </span><span class="lineCov"> 652576 : if (rehash) {</span>
|
||||
<span class="lineNum"> 160 </span><span class="lineNoCov"> 0 : block = tommy_hashdyn_search(&state->previmportset, import_block_prevhash_compare, hash, import_block_hash(hash));</span>
|
||||
<span class="lineNum"> 161 </span> : } else {
|
||||
<span class="lineNum"> 162 </span><span class="lineCov"> 652132 : block = tommy_hashdyn_search(&state->importset, import_block_hash_compare, hash, import_block_hash(hash));</span>
|
||||
<span class="lineNum"> 162 </span><span class="lineCov"> 652576 : block = tommy_hashdyn_search(&state->importset, import_block_hash_compare, hash, import_block_hash(hash));</span>
|
||||
<span class="lineNum"> 163 </span> : }
|
||||
<span class="lineNum"> 164 </span><span class="lineCov"> 652132 : if (!block)</span>
|
||||
<span class="lineNum"> 165 </span><span class="lineCov"> 647660 : return -1;</span>
|
||||
<span class="lineNum"> 164 </span><span class="lineCov"> 652576 : if (!block)</span>
|
||||
<span class="lineNum"> 165 </span><span class="lineCov"> 648104 : return -1;</span>
|
||||
<span class="lineNum"> 166 </span> :
|
||||
<span class="lineNum"> 167 </span><span class="lineCov"> 4472 : path = block->file->path;</span>
|
||||
<span class="lineNum"> 168 </span><span class="lineCov"> 4472 : read_size = block->size;</span>
|
||||
|
|
|
|||
|
|
@ -31,18 +31,18 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">8683</td>
|
||||
<td class="headerCovTableEntry">9562</td>
|
||||
<td class="headerCovTableEntryHi">90.8 %</td>
|
||||
<td class="headerCovTableEntry">8640</td>
|
||||
<td class="headerCovTableEntry">9584</td>
|
||||
<td class="headerCovTableEntryHi">90.2 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">488</td>
|
||||
<td class="headerCovTableEntry">503</td>
|
||||
<td class="headerCovTableEntryHi">97.0 %</td>
|
||||
<td class="headerCovTableEntry">487</td>
|
||||
<td class="headerCovTableEntry">504</td>
|
||||
<td class="headerCovTableEntryHi">96.6 %</td>
|
||||
</tr>
|
||||
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
|
||||
</table>
|
||||
|
|
@ -69,6 +69,16 @@
|
|||
<td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
|
||||
<td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="unix.c.gcov.html">unix.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=70 height=10 alt="70.2%"><img src="../snow.png" width=30 height=10 alt="70.2%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerLo">70.2 %</td>
|
||||
<td class="coverNumLo">314 / 447</td>
|
||||
<td class="coverPerMed">87.1 %</td>
|
||||
<td class="coverNumMed">27 / 31</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="import.c.gcov.html">import.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
|
|
@ -80,12 +90,12 @@
|
|||
<td class="coverNumMed">7 / 8</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="unix.c.gcov.html">unix.c</a></td>
|
||||
<td class="coverFile"><a href="io.c.gcov.html">io.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=72 height=10 alt="72.4%"><img src="../snow.png" width=28 height=10 alt="72.4%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=93 height=10 alt="92.6%"><img src="../snow.png" width=7 height=10 alt="92.6%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerLo">72.4 %</td>
|
||||
<td class="coverNumLo">320 / 442</td>
|
||||
<td class="coverPerHi">92.6 %</td>
|
||||
<td class="coverNumHi">386 / 417</td>
|
||||
<td class="coverPerHi">90.3 %</td>
|
||||
<td class="coverNumHi">28 / 31</td>
|
||||
</tr>
|
||||
|
|
@ -99,16 +109,6 @@
|
|||
<td class="coverPerHi">90.9 %</td>
|
||||
<td class="coverNumHi">10 / 11</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="io.c.gcov.html">io.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=98 height=10 alt="97.6%"><img src="../snow.png" width=2 height=10 alt="97.6%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">97.6 %</td>
|
||||
<td class="coverNumHi">407 / 417</td>
|
||||
<td class="coverPerHi">93.5 %</td>
|
||||
<td class="coverNumHi">29 / 31</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="parity.c.gcov.html">parity.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
|
|
@ -142,30 +142,30 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="support.c.gcov.html">support.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="80.2%"><img src="../snow.png" width=20 height=10 alt="80.2%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="80.3%"><img src="../snow.png" width=20 height=10 alt="80.3%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerMed">80.2 %</td>
|
||||
<td class="coverNumMed">441 / 550</td>
|
||||
<td class="coverPerMed">80.3 %</td>
|
||||
<td class="coverNumMed">449 / 559</td>
|
||||
<td class="coverPerHi">96.8 %</td>
|
||||
<td class="coverNumHi">60 / 62</td>
|
||||
<td class="coverNumHi">61 / 63</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="elem.c.gcov.html">elem.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.5%"><img src="../snow.png" width=6 height=10 alt="94.5%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=95 height=10 alt="94.6%"><img src="../snow.png" width=5 height=10 alt="94.6%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">94.5 %</td>
|
||||
<td class="coverNumHi">597 / 632</td>
|
||||
<td class="coverPerHi">94.6 %</td>
|
||||
<td class="coverNumHi">598 / 632</td>
|
||||
<td class="coverPerHi">97.1 %</td>
|
||||
<td class="coverNumHi">67 / 69</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="state.c.gcov.html">state.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.7%"><img src="../snow.png" width=8 height=10 alt="91.7%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=90 height=10 alt="89.8%"><img src="../snow.png" width=10 height=10 alt="89.8%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">91.7 %</td>
|
||||
<td class="coverNumHi">1478 / 1612</td>
|
||||
<td class="coverPerMed">89.8 %</td>
|
||||
<td class="coverNumMed">1450 / 1615</td>
|
||||
<td class="coverPerHi">97.8 %</td>
|
||||
<td class="coverNumHi">45 / 46</td>
|
||||
</tr>
|
||||
|
|
@ -262,10 +262,10 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="pool.c.gcov.html">pool.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.1%"><img src="../snow.png" width=6 height=10 alt="94.1%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.4%"><img src="../snow.png" width=6 height=10 alt="94.4%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">94.1 %</td>
|
||||
<td class="coverNumHi">64 / 68</td>
|
||||
<td class="coverPerHi">94.4 %</td>
|
||||
<td class="coverNumHi">67 / 71</td>
|
||||
<td class="coverPerHi">100.0 %</td>
|
||||
<td class="coverNumHi">3 / 3</td>
|
||||
</tr>
|
||||
|
|
@ -332,10 +332,10 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="sync.c.gcov.html">sync.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.8%"><img src="../snow.png" width=8 height=10 alt="91.8%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=91 height=10 alt="91.4%"><img src="../snow.png" width=9 height=10 alt="91.4%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">91.8 %</td>
|
||||
<td class="coverNumHi">501 / 546</td>
|
||||
<td class="coverPerHi">91.4 %</td>
|
||||
<td class="coverNumHi">499 / 546</td>
|
||||
<td class="coverPerHi">100.0 %</td>
|
||||
<td class="coverNumHi">7 / 7</td>
|
||||
</tr>
|
||||
|
|
@ -372,10 +372,10 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="check.c.gcov.html">check.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=91 height=10 alt="91.5%"><img src="../snow.png" width=9 height=10 alt="91.5%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.5%"><img src="../snow.png" width=8 height=10 alt="91.5%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">91.5 %</td>
|
||||
<td class="coverNumHi">709 / 775</td>
|
||||
<td class="coverNumHi">711 / 777</td>
|
||||
<td class="coverPerHi">100.0 %</td>
|
||||
<td class="coverNumHi">9 / 9</td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -31,18 +31,18 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">8683</td>
|
||||
<td class="headerCovTableEntry">9562</td>
|
||||
<td class="headerCovTableEntryHi">90.8 %</td>
|
||||
<td class="headerCovTableEntry">8640</td>
|
||||
<td class="headerCovTableEntry">9584</td>
|
||||
<td class="headerCovTableEntryHi">90.2 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">488</td>
|
||||
<td class="headerCovTableEntry">503</td>
|
||||
<td class="headerCovTableEntryHi">97.0 %</td>
|
||||
<td class="headerCovTableEntry">487</td>
|
||||
<td class="headerCovTableEntry">504</td>
|
||||
<td class="headerCovTableEntryHi">96.6 %</td>
|
||||
</tr>
|
||||
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
|
||||
</table>
|
||||
|
|
@ -72,12 +72,12 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="unix.c.gcov.html">unix.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=72 height=10 alt="72.4%"><img src="../snow.png" width=28 height=10 alt="72.4%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=70 height=10 alt="70.2%"><img src="../snow.png" width=30 height=10 alt="70.2%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerLo">72.4 %</td>
|
||||
<td class="coverNumLo">320 / 442</td>
|
||||
<td class="coverPerHi">90.3 %</td>
|
||||
<td class="coverNumHi">28 / 31</td>
|
||||
<td class="coverPerLo">70.2 %</td>
|
||||
<td class="coverNumLo">314 / 447</td>
|
||||
<td class="coverPerMed">87.1 %</td>
|
||||
<td class="coverNumMed">27 / 31</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="dry.c.gcov.html">dry.c</a></td>
|
||||
|
|
@ -92,12 +92,12 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="support.c.gcov.html">support.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="80.2%"><img src="../snow.png" width=20 height=10 alt="80.2%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="80.3%"><img src="../snow.png" width=20 height=10 alt="80.3%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerMed">80.2 %</td>
|
||||
<td class="coverNumMed">441 / 550</td>
|
||||
<td class="coverPerMed">80.3 %</td>
|
||||
<td class="coverNumMed">449 / 559</td>
|
||||
<td class="coverPerHi">96.8 %</td>
|
||||
<td class="coverNumHi">60 / 62</td>
|
||||
<td class="coverNumHi">61 / 63</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="scrub.c.gcov.html">scrub.c</a></td>
|
||||
|
|
@ -119,6 +119,16 @@
|
|||
<td class="coverPerHi">100.0 %</td>
|
||||
<td class="coverNumHi">23 / 23</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="state.c.gcov.html">state.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=90 height=10 alt="89.8%"><img src="../snow.png" width=10 height=10 alt="89.8%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerMed">89.8 %</td>
|
||||
<td class="coverNumMed">1450 / 1615</td>
|
||||
<td class="coverPerHi">97.8 %</td>
|
||||
<td class="coverNumHi">45 / 46</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="stream.h.gcov.html">stream.h</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
|
|
@ -169,36 +179,26 @@
|
|||
<td class="coverPerHi">100.0 %</td>
|
||||
<td class="coverNumHi">9 / 9</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="check.c.gcov.html">check.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=91 height=10 alt="91.5%"><img src="../snow.png" width=9 height=10 alt="91.5%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">91.5 %</td>
|
||||
<td class="coverNumHi">709 / 775</td>
|
||||
<td class="coverPerHi">100.0 %</td>
|
||||
<td class="coverNumHi">9 / 9</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="state.c.gcov.html">state.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.7%"><img src="../snow.png" width=8 height=10 alt="91.7%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">91.7 %</td>
|
||||
<td class="coverNumHi">1478 / 1612</td>
|
||||
<td class="coverPerHi">97.8 %</td>
|
||||
<td class="coverNumHi">45 / 46</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="sync.c.gcov.html">sync.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.8%"><img src="../snow.png" width=8 height=10 alt="91.8%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=91 height=10 alt="91.4%"><img src="../snow.png" width=9 height=10 alt="91.4%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">91.8 %</td>
|
||||
<td class="coverNumHi">501 / 546</td>
|
||||
<td class="coverPerHi">91.4 %</td>
|
||||
<td class="coverNumHi">499 / 546</td>
|
||||
<td class="coverPerHi">100.0 %</td>
|
||||
<td class="coverNumHi">7 / 7</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="check.c.gcov.html">check.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.5%"><img src="../snow.png" width=8 height=10 alt="91.5%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">91.5 %</td>
|
||||
<td class="coverNumHi">711 / 777</td>
|
||||
<td class="coverPerHi">100.0 %</td>
|
||||
<td class="coverNumHi">9 / 9</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="parity.c.gcov.html">parity.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
|
|
@ -209,6 +209,16 @@
|
|||
<td class="coverPerHi">94.7 %</td>
|
||||
<td class="coverNumHi">18 / 19</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="io.c.gcov.html">io.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=93 height=10 alt="92.6%"><img src="../snow.png" width=7 height=10 alt="92.6%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">92.6 %</td>
|
||||
<td class="coverNumHi">386 / 417</td>
|
||||
<td class="coverPerHi">90.3 %</td>
|
||||
<td class="coverNumHi">28 / 31</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="mktest.c.gcov.html">mktest.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
|
|
@ -252,20 +262,20 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="pool.c.gcov.html">pool.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.1%"><img src="../snow.png" width=6 height=10 alt="94.1%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.4%"><img src="../snow.png" width=6 height=10 alt="94.4%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">94.1 %</td>
|
||||
<td class="coverNumHi">64 / 68</td>
|
||||
<td class="coverPerHi">94.4 %</td>
|
||||
<td class="coverNumHi">67 / 71</td>
|
||||
<td class="coverPerHi">100.0 %</td>
|
||||
<td class="coverNumHi">3 / 3</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="elem.c.gcov.html">elem.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.5%"><img src="../snow.png" width=6 height=10 alt="94.5%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=95 height=10 alt="94.6%"><img src="../snow.png" width=5 height=10 alt="94.6%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">94.5 %</td>
|
||||
<td class="coverNumHi">597 / 632</td>
|
||||
<td class="coverPerHi">94.6 %</td>
|
||||
<td class="coverNumHi">598 / 632</td>
|
||||
<td class="coverPerHi">97.1 %</td>
|
||||
<td class="coverNumHi">67 / 69</td>
|
||||
</tr>
|
||||
|
|
@ -329,16 +339,6 @@
|
|||
<td class="coverPerHi">100.0 %</td>
|
||||
<td class="coverNumHi">8 / 8</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="io.c.gcov.html">io.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=98 height=10 alt="97.6%"><img src="../snow.png" width=2 height=10 alt="97.6%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">97.6 %</td>
|
||||
<td class="coverNumHi">407 / 417</td>
|
||||
<td class="coverPerHi">93.5 %</td>
|
||||
<td class="coverNumHi">29 / 31</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="speed.c.gcov.html">speed.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
|
|
|
|||
|
|
@ -31,18 +31,18 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">8683</td>
|
||||
<td class="headerCovTableEntry">9562</td>
|
||||
<td class="headerCovTableEntryHi">90.8 %</td>
|
||||
<td class="headerCovTableEntry">8640</td>
|
||||
<td class="headerCovTableEntry">9584</td>
|
||||
<td class="headerCovTableEntryHi">90.2 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">488</td>
|
||||
<td class="headerCovTableEntry">503</td>
|
||||
<td class="headerCovTableEntryHi">97.0 %</td>
|
||||
<td class="headerCovTableEntry">487</td>
|
||||
<td class="headerCovTableEntry">504</td>
|
||||
<td class="headerCovTableEntryHi">96.6 %</td>
|
||||
</tr>
|
||||
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
|
||||
</table>
|
||||
|
|
@ -72,10 +72,10 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="check.c.gcov.html">check.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=91 height=10 alt="91.5%"><img src="../snow.png" width=9 height=10 alt="91.5%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.5%"><img src="../snow.png" width=8 height=10 alt="91.5%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">91.5 %</td>
|
||||
<td class="coverNumHi">709 / 775</td>
|
||||
<td class="coverNumHi">711 / 777</td>
|
||||
<td class="coverPerHi">100.0 %</td>
|
||||
<td class="coverNumHi">9 / 9</td>
|
||||
</tr>
|
||||
|
|
@ -112,10 +112,10 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="elem.c.gcov.html">elem.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.5%"><img src="../snow.png" width=6 height=10 alt="94.5%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=95 height=10 alt="94.6%"><img src="../snow.png" width=5 height=10 alt="94.6%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">94.5 %</td>
|
||||
<td class="coverNumHi">597 / 632</td>
|
||||
<td class="coverPerHi">94.6 %</td>
|
||||
<td class="coverNumHi">598 / 632</td>
|
||||
<td class="coverPerHi">97.1 %</td>
|
||||
<td class="coverNumHi">67 / 69</td>
|
||||
</tr>
|
||||
|
|
@ -152,12 +152,12 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="io.c.gcov.html">io.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=98 height=10 alt="97.6%"><img src="../snow.png" width=2 height=10 alt="97.6%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=93 height=10 alt="92.6%"><img src="../snow.png" width=7 height=10 alt="92.6%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">97.6 %</td>
|
||||
<td class="coverNumHi">407 / 417</td>
|
||||
<td class="coverPerHi">93.5 %</td>
|
||||
<td class="coverNumHi">29 / 31</td>
|
||||
<td class="coverPerHi">92.6 %</td>
|
||||
<td class="coverNumHi">386 / 417</td>
|
||||
<td class="coverPerHi">90.3 %</td>
|
||||
<td class="coverNumHi">28 / 31</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="list.c.gcov.html">list.c</a></td>
|
||||
|
|
@ -212,10 +212,10 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="pool.c.gcov.html">pool.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.1%"><img src="../snow.png" width=6 height=10 alt="94.1%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.4%"><img src="../snow.png" width=6 height=10 alt="94.4%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">94.1 %</td>
|
||||
<td class="coverNumHi">64 / 68</td>
|
||||
<td class="coverPerHi">94.4 %</td>
|
||||
<td class="coverNumHi">67 / 71</td>
|
||||
<td class="coverPerHi">100.0 %</td>
|
||||
<td class="coverNumHi">3 / 3</td>
|
||||
</tr>
|
||||
|
|
@ -312,10 +312,10 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="state.c.gcov.html">state.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.7%"><img src="../snow.png" width=8 height=10 alt="91.7%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=90 height=10 alt="89.8%"><img src="../snow.png" width=10 height=10 alt="89.8%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">91.7 %</td>
|
||||
<td class="coverNumHi">1478 / 1612</td>
|
||||
<td class="coverPerMed">89.8 %</td>
|
||||
<td class="coverNumMed">1450 / 1615</td>
|
||||
<td class="coverPerHi">97.8 %</td>
|
||||
<td class="coverNumHi">45 / 46</td>
|
||||
</tr>
|
||||
|
|
@ -352,12 +352,12 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="support.c.gcov.html">support.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="80.2%"><img src="../snow.png" width=20 height=10 alt="80.2%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="80.3%"><img src="../snow.png" width=20 height=10 alt="80.3%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerMed">80.2 %</td>
|
||||
<td class="coverNumMed">441 / 550</td>
|
||||
<td class="coverPerMed">80.3 %</td>
|
||||
<td class="coverNumMed">449 / 559</td>
|
||||
<td class="coverPerHi">96.8 %</td>
|
||||
<td class="coverNumHi">60 / 62</td>
|
||||
<td class="coverNumHi">61 / 63</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="support.h.gcov.html">support.h</a></td>
|
||||
|
|
@ -372,10 +372,10 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="sync.c.gcov.html">sync.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.8%"><img src="../snow.png" width=8 height=10 alt="91.8%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=91 height=10 alt="91.4%"><img src="../snow.png" width=9 height=10 alt="91.4%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerHi">91.8 %</td>
|
||||
<td class="coverNumHi">501 / 546</td>
|
||||
<td class="coverPerHi">91.4 %</td>
|
||||
<td class="coverNumHi">499 / 546</td>
|
||||
<td class="coverPerHi">100.0 %</td>
|
||||
<td class="coverNumHi">7 / 7</td>
|
||||
</tr>
|
||||
|
|
@ -392,12 +392,12 @@
|
|||
<tr>
|
||||
<td class="coverFile"><a href="unix.c.gcov.html">unix.c</a></td>
|
||||
<td class="coverBar" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=72 height=10 alt="72.4%"><img src="../snow.png" width=28 height=10 alt="72.4%"></td></tr></table>
|
||||
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=70 height=10 alt="70.2%"><img src="../snow.png" width=30 height=10 alt="70.2%"></td></tr></table>
|
||||
</td>
|
||||
<td class="coverPerLo">72.4 %</td>
|
||||
<td class="coverNumLo">320 / 442</td>
|
||||
<td class="coverPerHi">90.3 %</td>
|
||||
<td class="coverNumHi">28 / 31</td>
|
||||
<td class="coverPerLo">70.2 %</td>
|
||||
<td class="coverNumLo">314 / 447</td>
|
||||
<td class="coverPerMed">87.1 %</td>
|
||||
<td class="coverNumMed">27 / 31</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFile"><a href="util.c.gcov.html">util.c</a></td>
|
||||
|
|
|
|||
|
|
@ -31,18 +31,18 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">407</td>
|
||||
<td class="headerCovTableEntry">386</td>
|
||||
<td class="headerCovTableEntry">417</td>
|
||||
<td class="headerCovTableEntryHi">97.6 %</td>
|
||||
<td class="headerCovTableEntryHi">92.6 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">29</td>
|
||||
<td class="headerCovTableEntry">28</td>
|
||||
<td class="headerCovTableEntry">31</td>
|
||||
<td class="headerCovTableEntryHi">93.5 %</td>
|
||||
<td class="headerCovTableEntryHi">90.3 %</td>
|
||||
</tr>
|
||||
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
|
||||
</table>
|
||||
|
|
@ -61,27 +61,27 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#270">io_reader_step</a></td>
|
||||
<td class="coverFnHi">1162708</td>
|
||||
<td class="coverFnHi">1156990</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#516">io_task_read_thread</a></td>
|
||||
<td class="coverFnHi">1081860</td>
|
||||
<td class="coverFnHi">1082196</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#679">io_reader_worker</a></td>
|
||||
<td class="coverFnHi">1081809</td>
|
||||
<td class="coverFnHi">1081760</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#594">io_data_read_thread</a></td>
|
||||
<td class="coverFnHi">871056</td>
|
||||
<td class="coverFnHi">871392</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#326">io_writer_step</a></td>
|
||||
<td class="coverFnHi">554042</td>
|
||||
<td class="coverFnHi">554063</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#604">io_parity_write_thread</a></td>
|
||||
<td class="coverFnHi">553582</td>
|
||||
<td class="coverFnHi">553918</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#599">io_parity_read_thread</a></td>
|
||||
|
|
@ -89,27 +89,27 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#23">io_position_next</a></td>
|
||||
<td class="coverFnHi">162024</td>
|
||||
<td class="coverFnHi">162080</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#42">io_reader_sched</a></td>
|
||||
<td class="coverFnHi">162024</td>
|
||||
<td class="coverFnHi">162080</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#388">io_read_next_thread</a></td>
|
||||
<td class="coverFnHi">145271</td>
|
||||
<td class="coverFnHi">145327</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#74">io_writer_sched</a></td>
|
||||
<td class="coverFnHi">112438</td>
|
||||
<td class="coverFnHi">112510</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#425">io_write_preset_thread</a></td>
|
||||
<td class="coverFnHi">110042</td>
|
||||
<td class="coverFnHi">110098</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#432">io_write_next_thread</a></td>
|
||||
<td class="coverFnHi">110042</td>
|
||||
<td class="coverFnHi">110098</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#179">io_task_read_mono</a></td>
|
||||
|
|
@ -137,15 +137,15 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#99">io_writer_sched_empty</a></td>
|
||||
<td class="coverFnHi">2291</td>
|
||||
<td class="coverFnHi">2275</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#690">io_reader_thread</a></td>
|
||||
<td class="coverFnHi">648</td>
|
||||
<td class="coverFnHi">615</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#720">io_writer_thread</a></td>
|
||||
<td class="coverFnHi">462</td>
|
||||
<td class="coverFnHi">461</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#844">io_init</a></td>
|
||||
|
|
@ -163,10 +163,6 @@
|
|||
<td class="coverFn"><a href="io.c.gcov.html#805">io_stop_thread</a></td>
|
||||
<td class="coverFnHi">95</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#470">io_refresh_thread</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#243">io_start_mono</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
|
|
@ -179,6 +175,10 @@
|
|||
<td class="coverFn"><a href="io.c.gcov.html#174">io_refresh_mono</a></td>
|
||||
<td class="coverFnLo">0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#470">io_refresh_thread</a></td>
|
||||
<td class="coverFnLo">0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#212">io_parity_read_mono</a></td>
|
||||
<td class="coverFnLo">0</td>
|
||||
|
|
|
|||
|
|
@ -31,18 +31,18 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">407</td>
|
||||
<td class="headerCovTableEntry">386</td>
|
||||
<td class="headerCovTableEntry">417</td>
|
||||
<td class="headerCovTableEntryHi">97.6 %</td>
|
||||
<td class="headerCovTableEntryHi">92.6 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">29</td>
|
||||
<td class="headerCovTableEntry">28</td>
|
||||
<td class="headerCovTableEntry">31</td>
|
||||
<td class="headerCovTableEntryHi">93.5 %</td>
|
||||
<td class="headerCovTableEntryHi">90.3 %</td>
|
||||
</tr>
|
||||
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
|
||||
</table>
|
||||
|
|
@ -65,7 +65,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#594">io_data_read_thread</a></td>
|
||||
<td class="coverFnHi">871056</td>
|
||||
<td class="coverFnHi">871392</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#980">io_done</a></td>
|
||||
|
|
@ -89,11 +89,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#604">io_parity_write_thread</a></td>
|
||||
<td class="coverFnHi">553582</td>
|
||||
<td class="coverFnHi">553918</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#23">io_position_next</a></td>
|
||||
<td class="coverFnHi">162024</td>
|
||||
<td class="coverFnHi">162080</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#124">io_read_next_mono</a></td>
|
||||
|
|
@ -101,23 +101,23 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#388">io_read_next_thread</a></td>
|
||||
<td class="coverFnHi">145271</td>
|
||||
<td class="coverFnHi">145327</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#42">io_reader_sched</a></td>
|
||||
<td class="coverFnHi">162024</td>
|
||||
<td class="coverFnHi">162080</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#270">io_reader_step</a></td>
|
||||
<td class="coverFnHi">1162708</td>
|
||||
<td class="coverFnHi">1156990</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#690">io_reader_thread</a></td>
|
||||
<td class="coverFnHi">648</td>
|
||||
<td class="coverFnHi">615</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#679">io_reader_worker</a></td>
|
||||
<td class="coverFnHi">1081809</td>
|
||||
<td class="coverFnHi">1081760</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#174">io_refresh_mono</a></td>
|
||||
|
|
@ -125,7 +125,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#470">io_refresh_thread</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
<td class="coverFnLo">0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#243">io_start_mono</a></td>
|
||||
|
|
@ -149,7 +149,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#516">io_task_read_thread</a></td>
|
||||
<td class="coverFnHi">1081860</td>
|
||||
<td class="coverFnHi">1082196</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#162">io_write_next_mono</a></td>
|
||||
|
|
@ -157,7 +157,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#432">io_write_next_thread</a></td>
|
||||
<td class="coverFnHi">110042</td>
|
||||
<td class="coverFnHi">110098</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#142">io_write_preset_mono</a></td>
|
||||
|
|
@ -165,23 +165,23 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#425">io_write_preset_thread</a></td>
|
||||
<td class="coverFnHi">110042</td>
|
||||
<td class="coverFnHi">110098</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#74">io_writer_sched</a></td>
|
||||
<td class="coverFnHi">112438</td>
|
||||
<td class="coverFnHi">112510</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#99">io_writer_sched_empty</a></td>
|
||||
<td class="coverFnHi">2291</td>
|
||||
<td class="coverFnHi">2275</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#326">io_writer_step</a></td>
|
||||
<td class="coverFnHi">554042</td>
|
||||
<td class="coverFnHi">554063</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="io.c.gcov.html#720">io_writer_thread</a></td>
|
||||
<td class="coverFnHi">462</td>
|
||||
<td class="coverFnHi">461</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
|
|
@ -31,18 +31,18 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">407</td>
|
||||
<td class="headerCovTableEntry">386</td>
|
||||
<td class="headerCovTableEntry">417</td>
|
||||
<td class="headerCovTableEntryHi">97.6 %</td>
|
||||
<td class="headerCovTableEntryHi">92.6 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">29</td>
|
||||
<td class="headerCovTableEntry">28</td>
|
||||
<td class="headerCovTableEntry">31</td>
|
||||
<td class="headerCovTableEntryHi">93.5 %</td>
|
||||
<td class="headerCovTableEntryHi">90.3 %</td>
|
||||
</tr>
|
||||
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
|
||||
</table>
|
||||
|
|
@ -84,103 +84,103 @@
|
|||
<span class="lineNum"> 22 </span> : /**
|
||||
<a name="23"><span class="lineNum"> 23 </span> : * Get the next block position to process.</a>
|
||||
<span class="lineNum"> 24 </span> : */
|
||||
<span class="lineNum"> 25 </span><span class="lineCov"> 162024 : static block_off_t io_position_next(struct snapraid_io* io)</span>
|
||||
<span class="lineNum"> 25 </span><span class="lineCov"> 162080 : static block_off_t io_position_next(struct snapraid_io* io)</span>
|
||||
<span class="lineNum"> 26 </span> : {
|
||||
<span class="lineNum"> 27 </span> : block_off_t blockcur;
|
||||
<span class="lineNum"> 28 </span> :
|
||||
<span class="lineNum"> 29 </span> : /* get the next position */
|
||||
<span class="lineNum"> 30 </span><span class="lineCov"> 647457 : while (io->block_next < io->block_max && !io->block_is_enabled(io->block_arg, io->block_next))</span>
|
||||
<span class="lineNum"> 31 </span><span class="lineCov"> 323409 : ++io->block_next;</span>
|
||||
<span class="lineNum"> 30 </span><span class="lineCov"> 647513 : while (io->block_next < io->block_max && !io->block_is_enabled(io->block_arg, io->block_next))</span>
|
||||
<span class="lineNum"> 31 </span><span class="lineCov"> 323353 : ++io->block_next;</span>
|
||||
<span class="lineNum"> 32 </span> :
|
||||
<span class="lineNum"> 33 </span><span class="lineCov"> 162024 : blockcur = io->block_next;</span>
|
||||
<span class="lineNum"> 33 </span><span class="lineCov"> 162080 : blockcur = io->block_next;</span>
|
||||
<span class="lineNum"> 34 </span> :
|
||||
<span class="lineNum"> 35 </span> : /* next block for the next call */
|
||||
<span class="lineNum"> 36 </span><span class="lineCov"> 162024 : ++io->block_next;</span>
|
||||
<span class="lineNum"> 36 </span><span class="lineCov"> 162080 : ++io->block_next;</span>
|
||||
<span class="lineNum"> 37 </span> :
|
||||
<span class="lineNum"> 38 </span><span class="lineCov"> 162024 : return blockcur;</span>
|
||||
<span class="lineNum"> 38 </span><span class="lineCov"> 162080 : return blockcur;</span>
|
||||
<span class="lineNum"> 39 </span> : }
|
||||
<span class="lineNum"> 40 </span> :
|
||||
<span class="lineNum"> 41 </span> : /**
|
||||
<a name="42"><span class="lineNum"> 42 </span> : * Setup the next pending task for all readers.</a>
|
||||
<span class="lineNum"> 43 </span> : */
|
||||
<span class="lineNum"> 44 </span><span class="lineCov"> 162024 : static void io_reader_sched(struct snapraid_io* io, int task_index, block_off_t blockcur)</span>
|
||||
<span class="lineNum"> 44 </span><span class="lineCov"> 162080 : static void io_reader_sched(struct snapraid_io* io, int task_index, block_off_t blockcur)</span>
|
||||
<span class="lineNum"> 45 </span> : {
|
||||
<span class="lineNum"> 46 </span> : unsigned i;
|
||||
<span class="lineNum"> 47 </span> :
|
||||
<span class="lineNum"> 48 </span><span class="lineCov"> 1354956 : for (i = 0; i < io->reader_max; ++i) {</span>
|
||||
<span class="lineNum"> 49 </span><span class="lineCov"> 1192932 : struct snapraid_worker* worker = &io->reader_map[i];</span>
|
||||
<span class="lineNum"> 50 </span><span class="lineCov"> 1192932 : struct snapraid_task* task = &worker->task_map[task_index];</span>
|
||||
<span class="lineNum"> 48 </span><span class="lineCov"> 1355348 : for (i = 0; i < io->reader_max; ++i) {</span>
|
||||
<span class="lineNum"> 49 </span><span class="lineCov"> 1193268 : struct snapraid_worker* worker = &io->reader_map[i];</span>
|
||||
<span class="lineNum"> 50 </span><span class="lineCov"> 1193268 : struct snapraid_task* task = &worker->task_map[task_index];</span>
|
||||
<span class="lineNum"> 51 </span> :
|
||||
<span class="lineNum"> 52 </span> : /* setup the new pending task */
|
||||
<span class="lineNum"> 53 </span><span class="lineCov"> 1192932 : if (blockcur < io->block_max)</span>
|
||||
<span class="lineNum"> 54 </span><span class="lineCov"> 1109982 : task->state = TASK_STATE_READY;</span>
|
||||
<span class="lineNum"> 53 </span><span class="lineCov"> 1193268 : if (blockcur < io->block_max)</span>
|
||||
<span class="lineNum"> 54 </span><span class="lineCov"> 1110318 : task->state = TASK_STATE_READY;</span>
|
||||
<span class="lineNum"> 55 </span> : else
|
||||
<span class="lineNum"> 56 </span><span class="lineCov"> 82950 : task->state = TASK_STATE_EMPTY;</span>
|
||||
<span class="lineNum"> 57 </span> :
|
||||
<span class="lineNum"> 58 </span><span class="lineCov"> 1192932 : task->path[0] = 0;</span>
|
||||
<span class="lineNum"> 59 </span><span class="lineCov"> 1192932 : if (worker->handle)</span>
|
||||
<span class="lineNum"> 60 </span><span class="lineCov"> 972144 : task->disk = worker->handle->disk;</span>
|
||||
<span class="lineNum"> 58 </span><span class="lineCov"> 1193268 : task->path[0] = 0;</span>
|
||||
<span class="lineNum"> 59 </span><span class="lineCov"> 1193268 : if (worker->handle)</span>
|
||||
<span class="lineNum"> 60 </span><span class="lineCov"> 972480 : task->disk = worker->handle->disk;</span>
|
||||
<span class="lineNum"> 61 </span> : else
|
||||
<span class="lineNum"> 62 </span><span class="lineCov"> 220788 : task->disk = 0;</span>
|
||||
<span class="lineNum"> 63 </span><span class="lineCov"> 1192932 : task->buffer = io->buffer_map[task_index][worker->buffer_skew + i];</span>
|
||||
<span class="lineNum"> 64 </span><span class="lineCov"> 1192932 : task->position = blockcur;</span>
|
||||
<span class="lineNum"> 65 </span><span class="lineCov"> 1192932 : task->block = 0;</span>
|
||||
<span class="lineNum"> 66 </span><span class="lineCov"> 1192932 : task->file = 0;</span>
|
||||
<span class="lineNum"> 67 </span><span class="lineCov"> 1192932 : task->file_pos = 0;</span>
|
||||
<span class="lineNum"> 68 </span><span class="lineCov"> 1192932 : task->read_size = 0;</span>
|
||||
<span class="lineNum"> 69 </span><span class="lineCov"> 1192932 : task->is_timestamp_different = 0;</span>
|
||||
<span class="lineNum"> 63 </span><span class="lineCov"> 1193268 : task->buffer = io->buffer_map[task_index][worker->buffer_skew + i];</span>
|
||||
<span class="lineNum"> 64 </span><span class="lineCov"> 1193268 : task->position = blockcur;</span>
|
||||
<span class="lineNum"> 65 </span><span class="lineCov"> 1193268 : task->block = 0;</span>
|
||||
<span class="lineNum"> 66 </span><span class="lineCov"> 1193268 : task->file = 0;</span>
|
||||
<span class="lineNum"> 67 </span><span class="lineCov"> 1193268 : task->file_pos = 0;</span>
|
||||
<span class="lineNum"> 68 </span><span class="lineCov"> 1193268 : task->read_size = 0;</span>
|
||||
<span class="lineNum"> 69 </span><span class="lineCov"> 1193268 : task->is_timestamp_different = 0;</span>
|
||||
<span class="lineNum"> 70 </span> : }
|
||||
<span class="lineNum"> 71 </span><span class="lineCov"> 162024 : }</span>
|
||||
<span class="lineNum"> 71 </span><span class="lineCov"> 162080 : }</span>
|
||||
<span class="lineNum"> 72 </span> :
|
||||
<span class="lineNum"> 73 </span> : /**
|
||||
<a name="74"><span class="lineNum"> 74 </span> : * Setup the next pending task for all writers.</a>
|
||||
<span class="lineNum"> 75 </span> : */
|
||||
<span class="lineNum"> 76 </span><span class="lineCov"> 112438 : static void io_writer_sched(struct snapraid_io* io, int task_index, block_off_t blockcur)</span>
|
||||
<span class="lineNum"> 76 </span><span class="lineCov"> 112510 : static void io_writer_sched(struct snapraid_io* io, int task_index, block_off_t blockcur)</span>
|
||||
<span class="lineNum"> 77 </span> : {
|
||||
<span class="lineNum"> 78 </span> : unsigned i;
|
||||
<span class="lineNum"> 79 </span> :
|
||||
<span class="lineNum"> 80 </span><span class="lineCov"> 656961 : for (i = 0; i < io->writer_max; ++i) {</span>
|
||||
<span class="lineNum"> 81 </span><span class="lineCov"> 544523 : struct snapraid_worker* worker = &io->writer_map[i];</span>
|
||||
<span class="lineNum"> 82 </span><span class="lineCov"> 544523 : struct snapraid_task* task = &worker->task_map[task_index];</span>
|
||||
<span class="lineNum"> 80 </span><span class="lineCov"> 657465 : for (i = 0; i < io->writer_max; ++i) {</span>
|
||||
<span class="lineNum"> 81 </span><span class="lineCov"> 544955 : struct snapraid_worker* worker = &io->writer_map[i];</span>
|
||||
<span class="lineNum"> 82 </span><span class="lineCov"> 544955 : struct snapraid_task* task = &worker->task_map[task_index];</span>
|
||||
<span class="lineNum"> 83 </span> :
|
||||
<span class="lineNum"> 84 </span> : /* setup the new pending task */
|
||||
<span class="lineNum"> 85 </span><span class="lineCov"> 544523 : task->state = TASK_STATE_READY;</span>
|
||||
<span class="lineNum"> 86 </span><span class="lineCov"> 544523 : task->path[0] = 0;</span>
|
||||
<span class="lineNum"> 87 </span><span class="lineCov"> 544523 : task->disk = 0;</span>
|
||||
<span class="lineNum"> 88 </span><span class="lineCov"> 544523 : task->buffer = io->buffer_map[task_index][worker->buffer_skew + i];</span>
|
||||
<span class="lineNum"> 89 </span><span class="lineCov"> 544523 : task->position = blockcur;</span>
|
||||
<span class="lineNum"> 90 </span><span class="lineCov"> 544523 : task->block = 0;</span>
|
||||
<span class="lineNum"> 91 </span><span class="lineCov"> 544523 : task->file = 0;</span>
|
||||
<span class="lineNum"> 92 </span><span class="lineCov"> 544523 : task->file_pos = 0;</span>
|
||||
<span class="lineNum"> 93 </span><span class="lineCov"> 544523 : task->read_size = 0;</span>
|
||||
<span class="lineNum"> 94 </span><span class="lineCov"> 544523 : task->is_timestamp_different = 0;</span>
|
||||
<span class="lineNum"> 85 </span><span class="lineCov"> 544955 : task->state = TASK_STATE_READY;</span>
|
||||
<span class="lineNum"> 86 </span><span class="lineCov"> 544955 : task->path[0] = 0;</span>
|
||||
<span class="lineNum"> 87 </span><span class="lineCov"> 544955 : task->disk = 0;</span>
|
||||
<span class="lineNum"> 88 </span><span class="lineCov"> 544955 : task->buffer = io->buffer_map[task_index][worker->buffer_skew + i];</span>
|
||||
<span class="lineNum"> 89 </span><span class="lineCov"> 544955 : task->position = blockcur;</span>
|
||||
<span class="lineNum"> 90 </span><span class="lineCov"> 544955 : task->block = 0;</span>
|
||||
<span class="lineNum"> 91 </span><span class="lineCov"> 544955 : task->file = 0;</span>
|
||||
<span class="lineNum"> 92 </span><span class="lineCov"> 544955 : task->file_pos = 0;</span>
|
||||
<span class="lineNum"> 93 </span><span class="lineCov"> 544955 : task->read_size = 0;</span>
|
||||
<span class="lineNum"> 94 </span><span class="lineCov"> 544955 : task->is_timestamp_different = 0;</span>
|
||||
<span class="lineNum"> 95 </span> : }
|
||||
<span class="lineNum"> 96 </span><span class="lineCov"> 112438 : }</span>
|
||||
<span class="lineNum"> 96 </span><span class="lineCov"> 112510 : }</span>
|
||||
<span class="lineNum"> 97 </span> :
|
||||
<span class="lineNum"> 98 </span> : /**
|
||||
<a name="99"><span class="lineNum"> 99 </span> : * Setup an empty next pending task for all writers.</a>
|
||||
<span class="lineNum"> 100 </span> : */
|
||||
<span class="lineNum"> 101 </span><span class="lineCov"> 2291 : static void io_writer_sched_empty(struct snapraid_io* io, int task_index, block_off_t blockcur)</span>
|
||||
<span class="lineNum"> 101 </span><span class="lineCov"> 2275 : static void io_writer_sched_empty(struct snapraid_io* io, int task_index, block_off_t blockcur)</span>
|
||||
<span class="lineNum"> 102 </span> : {
|
||||
<span class="lineNum"> 103 </span> : unsigned i;
|
||||
<span class="lineNum"> 104 </span> :
|
||||
<span class="lineNum"> 105 </span><span class="lineCov"> 16037 : for (i = 0; i < io->writer_max; ++i) {</span>
|
||||
<span class="lineNum"> 106 </span><span class="lineCov"> 13746 : struct snapraid_worker* worker = &io->writer_map[i];</span>
|
||||
<span class="lineNum"> 107 </span><span class="lineCov"> 13746 : struct snapraid_task* task = &worker->task_map[task_index];</span>
|
||||
<span class="lineNum"> 105 </span><span class="lineCov"> 15925 : for (i = 0; i < io->writer_max; ++i) {</span>
|
||||
<span class="lineNum"> 106 </span><span class="lineCov"> 13650 : struct snapraid_worker* worker = &io->writer_map[i];</span>
|
||||
<span class="lineNum"> 107 </span><span class="lineCov"> 13650 : struct snapraid_task* task = &worker->task_map[task_index];</span>
|
||||
<span class="lineNum"> 108 </span> :
|
||||
<span class="lineNum"> 109 </span> : /* setup the new pending task */
|
||||
<span class="lineNum"> 110 </span><span class="lineCov"> 13746 : task->state = TASK_STATE_EMPTY;</span>
|
||||
<span class="lineNum"> 111 </span><span class="lineCov"> 13746 : task->path[0] = 0;</span>
|
||||
<span class="lineNum"> 112 </span><span class="lineCov"> 13746 : task->disk = 0;</span>
|
||||
<span class="lineNum"> 113 </span><span class="lineCov"> 13746 : task->buffer = 0;</span>
|
||||
<span class="lineNum"> 114 </span><span class="lineCov"> 13746 : task->position = blockcur;</span>
|
||||
<span class="lineNum"> 115 </span><span class="lineCov"> 13746 : task->block = 0;</span>
|
||||
<span class="lineNum"> 116 </span><span class="lineCov"> 13746 : task->file = 0;</span>
|
||||
<span class="lineNum"> 117 </span><span class="lineCov"> 13746 : task->file_pos = 0;</span>
|
||||
<span class="lineNum"> 118 </span><span class="lineCov"> 13746 : task->read_size = 0;</span>
|
||||
<span class="lineNum"> 119 </span><span class="lineCov"> 13746 : task->is_timestamp_different = 0;</span>
|
||||
<span class="lineNum"> 110 </span><span class="lineCov"> 13650 : task->state = TASK_STATE_EMPTY;</span>
|
||||
<span class="lineNum"> 111 </span><span class="lineCov"> 13650 : task->path[0] = 0;</span>
|
||||
<span class="lineNum"> 112 </span><span class="lineCov"> 13650 : task->disk = 0;</span>
|
||||
<span class="lineNum"> 113 </span><span class="lineCov"> 13650 : task->buffer = 0;</span>
|
||||
<span class="lineNum"> 114 </span><span class="lineCov"> 13650 : task->position = blockcur;</span>
|
||||
<span class="lineNum"> 115 </span><span class="lineCov"> 13650 : task->block = 0;</span>
|
||||
<span class="lineNum"> 116 </span><span class="lineCov"> 13650 : task->file = 0;</span>
|
||||
<span class="lineNum"> 117 </span><span class="lineCov"> 13650 : task->file_pos = 0;</span>
|
||||
<span class="lineNum"> 118 </span><span class="lineCov"> 13650 : task->read_size = 0;</span>
|
||||
<span class="lineNum"> 119 </span><span class="lineCov"> 13650 : task->is_timestamp_different = 0;</span>
|
||||
<span class="lineNum"> 120 </span> : }
|
||||
<span class="lineNum"> 121 </span><span class="lineCov"> 2291 : }</span>
|
||||
<span class="lineNum"> 121 </span><span class="lineCov"> 2275 : }</span>
|
||||
<span class="lineNum"> 122 </span> :
|
||||
<span class="lineNum"> 123 </span> : /*****************************************************************************/
|
||||
<a name="124"><span class="lineNum"> 124 </span> : /* mono thread */</a>
|
||||
|
|
@ -331,55 +331,55 @@
|
|||
<span class="lineNum"> 269 </span> : *
|
||||
<a name="270"><span class="lineNum"> 270 </span> : * This is the synchronization point for workers with the io.</a>
|
||||
<span class="lineNum"> 271 </span> : */
|
||||
<span class="lineNum"> 272 </span><span class="lineCov"> 1162708 : static struct snapraid_task* io_reader_step(struct snapraid_worker* worker)</span>
|
||||
<span class="lineNum"> 272 </span><span class="lineCov"> 1156990 : static struct snapraid_task* io_reader_step(struct snapraid_worker* worker)</span>
|
||||
<span class="lineNum"> 273 </span> : {
|
||||
<span class="lineNum"> 274 </span><span class="lineCov"> 1162708 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 274 </span><span class="lineCov"> 1156990 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 275 </span> :
|
||||
<span class="lineNum"> 276 </span> : /* the synchronization is protected by the io mutex */
|
||||
<span class="lineNum"> 277 </span><span class="lineCov"> 1162708 : thread_mutex_lock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 277 </span><span class="lineCov"> 1156990 : thread_mutex_lock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 278 </span> :
|
||||
<span class="lineNum"> 279 </span> : while (1) {
|
||||
<span class="lineNum"> 280 </span> : unsigned next_index;
|
||||
<span class="lineNum"> 281 </span> :
|
||||
<span class="lineNum"> 282 </span> : /* check if the worker has to exit */
|
||||
<span class="lineNum"> 283 </span> : /* even if there is work to do */
|
||||
<span class="lineNum"> 284 </span><span class="lineCov"> 2057573 : if (io->done) {</span>
|
||||
<span class="lineNum"> 284 </span><span class="lineCov"> 2137549 : if (io->done) {</span>
|
||||
<span class="lineNum"> 285 </span><span class="lineCov"> 648 : thread_mutex_unlock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 286 </span><span class="lineCov"> 648 : return 0;</span>
|
||||
<span class="lineNum"> 287 </span> : }
|
||||
<span class="lineNum"> 288 </span> :
|
||||
<span class="lineNum"> 289 </span> : /* get the next pending task */
|
||||
<span class="lineNum"> 290 </span><span class="lineCov"> 2056925 : next_index = (worker->index + 1) % io->io_max;</span>
|
||||
<span class="lineNum"> 290 </span><span class="lineCov"> 2136901 : next_index = (worker->index + 1) % io->io_max;</span>
|
||||
<span class="lineNum"> 291 </span> :
|
||||
<span class="lineNum"> 292 </span> : /* if the queue of pending tasks is not empty */
|
||||
<span class="lineNum"> 293 </span><span class="lineCov"> 2056925 : if (next_index != io->reader_index) {</span>
|
||||
<span class="lineNum"> 293 </span><span class="lineCov"> 2136901 : if (next_index != io->reader_index) {</span>
|
||||
<span class="lineNum"> 294 </span> : struct snapraid_task* task;
|
||||
<span class="lineNum"> 295 </span> :
|
||||
<span class="lineNum"> 296 </span> : /* the index that the IO may be waiting for */
|
||||
<span class="lineNum"> 297 </span><span class="lineCov"> 1162618 : unsigned waiting_index = io->reader_index;</span>
|
||||
<span class="lineNum"> 297 </span><span class="lineCov"> 1164456 : unsigned waiting_index = io->reader_index;</span>
|
||||
<span class="lineNum"> 298 </span> :
|
||||
<span class="lineNum"> 299 </span> : /* the index that worker just completed */
|
||||
<span class="lineNum"> 300 </span><span class="lineCov"> 1162618 : unsigned done_index = worker->index;</span>
|
||||
<span class="lineNum"> 300 </span><span class="lineCov"> 1164456 : unsigned done_index = worker->index;</span>
|
||||
<span class="lineNum"> 301 </span> :
|
||||
<span class="lineNum"> 302 </span> : /* get the new working task */
|
||||
<span class="lineNum"> 303 </span><span class="lineCov"> 1162618 : worker->index = next_index;</span>
|
||||
<span class="lineNum"> 304 </span><span class="lineCov"> 1162618 : task = &worker->task_map[worker->index];</span>
|
||||
<span class="lineNum"> 303 </span><span class="lineCov"> 1164456 : worker->index = next_index;</span>
|
||||
<span class="lineNum"> 304 </span><span class="lineCov"> 1164456 : task = &worker->task_map[worker->index];</span>
|
||||
<span class="lineNum"> 305 </span> :
|
||||
<span class="lineNum"> 306 </span> : /* if the just completed task is at this index */
|
||||
<span class="lineNum"> 307 </span><span class="lineCov"> 1162618 : if (done_index == waiting_index) {</span>
|
||||
<span class="lineNum"> 307 </span><span class="lineCov"> 1164456 : if (done_index == waiting_index) {</span>
|
||||
<span class="lineNum"> 308 </span> : /* notify the IO that a new read is complete */
|
||||
<span class="lineNum"> 309 </span><span class="lineCov"> 2747 : thread_cond_signal_and_unlock(&io->read_done, &io->io_mutex);</span>
|
||||
<span class="lineNum"> 309 </span><span class="lineCov"> 1053 : thread_cond_signal_and_unlock(&io->read_done, &io->io_mutex);</span>
|
||||
<span class="lineNum"> 310 </span> : } else {
|
||||
<span class="lineNum"> 311 </span><span class="lineCov"> 1159871 : thread_mutex_unlock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 311 </span><span class="lineCov"> 1163403 : thread_mutex_unlock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 312 </span> : }
|
||||
<span class="lineNum"> 313 </span> :
|
||||
<span class="lineNum"> 314 </span> : /* return the new task */
|
||||
<span class="lineNum"> 315 </span><span class="lineCov"> 1162520 : return task;</span>
|
||||
<span class="lineNum"> 315 </span><span class="lineCov"> 1163731 : return task;</span>
|
||||
<span class="lineNum"> 316 </span> : }
|
||||
<span class="lineNum"> 317 </span> :
|
||||
<span class="lineNum"> 318 </span> : /* otherwise wait for a read_sched event */
|
||||
<span class="lineNum"> 319 </span><span class="lineCov"> 894307 : thread_cond_wait(&io->read_sched, &io->io_mutex);</span>
|
||||
<span class="lineNum"> 320 </span><span class="lineCov"> 894307 : }</span>
|
||||
<span class="lineNum"> 319 </span><span class="lineCov"> 972445 : thread_cond_wait(&io->read_sched, &io->io_mutex);</span>
|
||||
<span class="lineNum"> 320 </span><span class="lineCov"> 972445 : }</span>
|
||||
<span class="lineNum"> 321 </span> : }
|
||||
<span class="lineNum"> 322 </span> :
|
||||
<span class="lineNum"> 323 </span> : /**
|
||||
|
|
@ -387,61 +387,61 @@
|
|||
<span class="lineNum"> 325 </span> : *
|
||||
<a name="326"><span class="lineNum"> 326 </span> : * This is the synchronization point for workers with the io.</a>
|
||||
<span class="lineNum"> 327 </span> : */
|
||||
<span class="lineNum"> 328 </span><span class="lineCov"> 554042 : static struct snapraid_task* io_writer_step(struct snapraid_worker* worker, int state)</span>
|
||||
<span class="lineNum"> 328 </span><span class="lineCov"> 554063 : static struct snapraid_task* io_writer_step(struct snapraid_worker* worker, int state)</span>
|
||||
<span class="lineNum"> 329 </span> : {
|
||||
<span class="lineNum"> 330 </span><span class="lineCov"> 554042 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 330 </span><span class="lineCov"> 554063 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 331 </span> : int error_index;
|
||||
<span class="lineNum"> 332 </span> :
|
||||
<span class="lineNum"> 333 </span> : /* the synchronization is protected by the io mutex */
|
||||
<span class="lineNum"> 334 </span><span class="lineCov"> 554042 : thread_mutex_lock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 334 </span><span class="lineCov"> 554063 : thread_mutex_lock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 335 </span> :
|
||||
<span class="lineNum"> 336 </span> : /* counts the number of errors in the global state */
|
||||
<span class="lineNum"> 337 </span><span class="lineCov"> 554044 : error_index = state - IO_WRITER_ERROR_BASE;</span>
|
||||
<span class="lineNum"> 338 </span><span class="lineCov"> 554044 : if (error_index >= 0 && error_index < IO_WRITER_ERROR_MAX)</span>
|
||||
<span class="lineNum"> 337 </span><span class="lineCov"> 554380 : error_index = state - IO_WRITER_ERROR_BASE;</span>
|
||||
<span class="lineNum"> 338 </span><span class="lineCov"> 554380 : if (error_index >= 0 && error_index < IO_WRITER_ERROR_MAX)</span>
|
||||
<span class="lineNum"> 339 </span><span class="lineNoCov"> 0 : ++io->writer_error[error_index];</span>
|
||||
<span class="lineNum"> 340 </span> :
|
||||
<span class="lineNum"> 341 </span> : while (1) {
|
||||
<span class="lineNum"> 342 </span> : unsigned next_index;
|
||||
<span class="lineNum"> 343 </span> :
|
||||
<span class="lineNum"> 344 </span> : /* get the next pending task */
|
||||
<span class="lineNum"> 345 </span><span class="lineCov"> 625754 : next_index = (worker->index + 1) % io->io_max;</span>
|
||||
<span class="lineNum"> 345 </span><span class="lineCov"> 637383 : next_index = (worker->index + 1) % io->io_max;</span>
|
||||
<span class="lineNum"> 346 </span> :
|
||||
<span class="lineNum"> 347 </span> : /* if the queue of pending tasks is not empty */
|
||||
<span class="lineNum"> 348 </span><span class="lineCov"> 625754 : if (next_index != io->writer_index) {</span>
|
||||
<span class="lineNum"> 348 </span><span class="lineCov"> 637383 : if (next_index != io->writer_index) {</span>
|
||||
<span class="lineNum"> 349 </span> : struct snapraid_task* task;
|
||||
<span class="lineNum"> 350 </span> :
|
||||
<span class="lineNum"> 351 </span> : /* the index that the IO may be waiting for */
|
||||
<span class="lineNum"> 352 </span><span class="lineCov"> 553582 : unsigned waiting_index = (io->writer_index + 1) % io->io_max;</span>
|
||||
<span class="lineNum"> 352 </span><span class="lineCov"> 553918 : unsigned waiting_index = (io->writer_index + 1) % io->io_max;</span>
|
||||
<span class="lineNum"> 353 </span> :
|
||||
<span class="lineNum"> 354 </span> : /* the index that worker just completed */
|
||||
<span class="lineNum"> 355 </span><span class="lineCov"> 553582 : unsigned done_index = worker->index;</span>
|
||||
<span class="lineNum"> 355 </span><span class="lineCov"> 553918 : unsigned done_index = worker->index;</span>
|
||||
<span class="lineNum"> 356 </span> :
|
||||
<span class="lineNum"> 357 </span> : /* get the new working task */
|
||||
<span class="lineNum"> 358 </span><span class="lineCov"> 553582 : worker->index = next_index;</span>
|
||||
<span class="lineNum"> 359 </span><span class="lineCov"> 553582 : task = &worker->task_map[worker->index];</span>
|
||||
<span class="lineNum"> 358 </span><span class="lineCov"> 553918 : worker->index = next_index;</span>
|
||||
<span class="lineNum"> 359 </span><span class="lineCov"> 553918 : task = &worker->task_map[worker->index];</span>
|
||||
<span class="lineNum"> 360 </span> :
|
||||
<span class="lineNum"> 361 </span> : /* if the just completed task is at this index */
|
||||
<span class="lineNum"> 362 </span><span class="lineCov"> 553582 : if (done_index == waiting_index) {</span>
|
||||
<span class="lineNum"> 362 </span><span class="lineCov"> 553918 : if (done_index == waiting_index) {</span>
|
||||
<span class="lineNum"> 363 </span> : /* notify the IO that a new write is complete */
|
||||
<span class="lineNum"> 364 </span><span class="lineCov"> 83140 : thread_cond_signal_and_unlock(&io->write_done, &io->io_mutex);</span>
|
||||
<span class="lineNum"> 364 </span><span class="lineCov"> 86028 : thread_cond_signal_and_unlock(&io->write_done, &io->io_mutex);</span>
|
||||
<span class="lineNum"> 365 </span> : } else {
|
||||
<span class="lineNum"> 366 </span><span class="lineCov"> 470442 : thread_mutex_unlock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 366 </span><span class="lineCov"> 467890 : thread_mutex_unlock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 367 </span> : }
|
||||
<span class="lineNum"> 368 </span> :
|
||||
<span class="lineNum"> 369 </span> : /* return the new task */
|
||||
<span class="lineNum"> 370 </span><span class="lineCov"> 553581 : return task;</span>
|
||||
<span class="lineNum"> 370 </span><span class="lineCov"> 553862 : return task;</span>
|
||||
<span class="lineNum"> 371 </span> : }
|
||||
<span class="lineNum"> 372 </span> :
|
||||
<span class="lineNum"> 373 </span> : /* check if the worker has to exit */
|
||||
<span class="lineNum"> 374 </span> : /* but only if there is no work to do */
|
||||
<span class="lineNum"> 375 </span><span class="lineCov"> 72172 : if (io->done) {</span>
|
||||
<span class="lineNum"> 375 </span><span class="lineCov"> 83465 : if (io->done) {</span>
|
||||
<span class="lineNum"> 376 </span><span class="lineCov"> 462 : thread_mutex_unlock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 377 </span><span class="lineCov"> 462 : return 0;</span>
|
||||
<span class="lineNum"> 377 </span><span class="lineCov"> 461 : return 0;</span>
|
||||
<span class="lineNum"> 378 </span> : }
|
||||
<span class="lineNum"> 379 </span> :
|
||||
<span class="lineNum"> 380 </span> : /* otherwise wait for a write_sched event */
|
||||
<span class="lineNum"> 381 </span><span class="lineCov"> 71710 : thread_cond_wait(&io->write_sched, &io->io_mutex);</span>
|
||||
<span class="lineNum"> 382 </span><span class="lineCov"> 71710 : }</span>
|
||||
<span class="lineNum"> 381 </span><span class="lineCov"> 83003 : thread_cond_wait(&io->write_sched, &io->io_mutex);</span>
|
||||
<span class="lineNum"> 382 </span><span class="lineCov"> 83003 : }</span>
|
||||
<span class="lineNum"> 383 </span> : }
|
||||
<span class="lineNum"> 384 </span> :
|
||||
<span class="lineNum"> 385 </span> : /**
|
||||
|
|
@ -449,146 +449,146 @@
|
|||
<span class="lineNum"> 387 </span> : *
|
||||
<a name="388"><span class="lineNum"> 388 </span> : * This is the synchronization point for workers with the io.</a>
|
||||
<span class="lineNum"> 389 </span> : */
|
||||
<span class="lineNum"> 390 </span><span class="lineCov"> 145271 : static block_off_t io_read_next_thread(struct snapraid_io* io, void*** buffer)</span>
|
||||
<span class="lineNum"> 390 </span><span class="lineCov"> 145327 : static block_off_t io_read_next_thread(struct snapraid_io* io, void*** buffer)</span>
|
||||
<span class="lineNum"> 391 </span> : {
|
||||
<span class="lineNum"> 392 </span> : block_off_t blockcur_schedule;
|
||||
<span class="lineNum"> 393 </span> : block_off_t blockcur_caller;
|
||||
<span class="lineNum"> 394 </span> : unsigned i;
|
||||
<span class="lineNum"> 395 </span> :
|
||||
<span class="lineNum"> 396 </span> : /* get the next parity position to process */
|
||||
<span class="lineNum"> 397 </span><span class="lineCov"> 145271 : blockcur_schedule = io_position_next(io);</span>
|
||||
<span class="lineNum"> 397 </span><span class="lineCov"> 145327 : blockcur_schedule = io_position_next(io);</span>
|
||||
<span class="lineNum"> 398 </span> :
|
||||
<span class="lineNum"> 399 </span> : /* ensure that all data/parity was read */
|
||||
<span class="lineNum"> 400 </span><span class="lineCov"> 145271 : assert(io->reader_list[0] == io->reader_max);</span>
|
||||
<span class="lineNum"> 400 </span><span class="lineCov"> 145327 : assert(io->reader_list[0] == io->reader_max);</span>
|
||||
<span class="lineNum"> 401 </span> :
|
||||
<span class="lineNum"> 402 </span> : /* setup the list of workers to process */
|
||||
<span class="lineNum"> 403 </span><span class="lineCov"> 1373050 : for (i = 0; i <= io->reader_max; ++i)</span>
|
||||
<span class="lineNum"> 404 </span><span class="lineCov"> 1227779 : io->reader_list[i] = i;</span>
|
||||
<span class="lineNum"> 403 </span><span class="lineCov"> 1373498 : for (i = 0; i <= io->reader_max; ++i)</span>
|
||||
<span class="lineNum"> 404 </span><span class="lineCov"> 1228171 : io->reader_list[i] = i;</span>
|
||||
<span class="lineNum"> 405 </span> :
|
||||
<span class="lineNum"> 406 </span> : /* the synchronization is protected by the io mutex */
|
||||
<span class="lineNum"> 407 </span><span class="lineCov"> 145271 : thread_mutex_lock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 407 </span><span class="lineCov"> 145327 : thread_mutex_lock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 408 </span> :
|
||||
<span class="lineNum"> 409 </span> : /* schedule the next read */
|
||||
<span class="lineNum"> 410 </span><span class="lineCov"> 145271 : io_reader_sched(io, io->reader_index, blockcur_schedule);</span>
|
||||
<span class="lineNum"> 410 </span><span class="lineCov"> 145327 : io_reader_sched(io, io->reader_index, blockcur_schedule);</span>
|
||||
<span class="lineNum"> 411 </span> :
|
||||
<span class="lineNum"> 412 </span> : /* set the index for the tasks to return to the caller */
|
||||
<span class="lineNum"> 413 </span><span class="lineCov"> 145271 : io->reader_index = (io->reader_index + 1) % io->io_max;</span>
|
||||
<span class="lineNum"> 413 </span><span class="lineCov"> 145327 : io->reader_index = (io->reader_index + 1) % io->io_max;</span>
|
||||
<span class="lineNum"> 414 </span> :
|
||||
<span class="lineNum"> 415 </span> : /* get the position to operate at high level from one task */
|
||||
<span class="lineNum"> 416 </span><span class="lineCov"> 145271 : blockcur_caller = io->reader_map[0].task_map[io->reader_index].position;</span>
|
||||
<span class="lineNum"> 416 </span><span class="lineCov"> 145327 : blockcur_caller = io->reader_map[0].task_map[io->reader_index].position;</span>
|
||||
<span class="lineNum"> 417 </span> :
|
||||
<span class="lineNum"> 418 </span> : /* set the buffer to use */
|
||||
<span class="lineNum"> 419 </span><span class="lineCov"> 145271 : *buffer = io->buffer_map[io->reader_index];</span>
|
||||
<span class="lineNum"> 419 </span><span class="lineCov"> 145327 : *buffer = io->buffer_map[io->reader_index];</span>
|
||||
<span class="lineNum"> 420 </span> :
|
||||
<span class="lineNum"> 421 </span> : /* signal all the workers that there is a new pending task */
|
||||
<span class="lineNum"> 422 </span><span class="lineCov"> 145271 : thread_cond_broadcast_and_unlock(&io->read_sched, &io->io_mutex);</span>
|
||||
<span class="lineNum"> 422 </span><span class="lineCov"> 145327 : thread_cond_broadcast_and_unlock(&io->read_sched, &io->io_mutex);</span>
|
||||
<span class="lineNum"> 423 </span> :
|
||||
<span class="lineNum"> 424 </span><span class="lineCov"> 145271 : return blockcur_caller;</span>
|
||||
<span class="lineNum"> 424 </span><span class="lineCov"> 145327 : return blockcur_caller;</span>
|
||||
<a name="425"><span class="lineNum"> 425 </span> : }</a>
|
||||
<span class="lineNum"> 426 </span> :
|
||||
<span class="lineNum"> 427 </span><span class="lineCov"> 110042 : static void io_write_preset_thread(struct snapraid_io* io, block_off_t blockcur, int skip)</span>
|
||||
<span class="lineNum"> 427 </span><span class="lineCov"> 110098 : static void io_write_preset_thread(struct snapraid_io* io, block_off_t blockcur, int skip)</span>
|
||||
<span class="lineNum"> 428 </span> : {
|
||||
<span class="lineNum"> 429 </span> : (void)io;
|
||||
<span class="lineNum"> 430 </span> : (void)blockcur;
|
||||
<span class="lineNum"> 431 </span> : (void)skip;
|
||||
<a name="432"><span class="lineNum"> 432 </span><span class="lineCov"> 110042 : }</span></a>
|
||||
<a name="432"><span class="lineNum"> 432 </span><span class="lineCov"> 110098 : }</span></a>
|
||||
<span class="lineNum"> 433 </span> :
|
||||
<span class="lineNum"> 434 </span><span class="lineCov"> 110042 : static void io_write_next_thread(struct snapraid_io* io, block_off_t blockcur, int skip, int* writer_error)</span>
|
||||
<span class="lineNum"> 434 </span><span class="lineCov"> 110098 : static void io_write_next_thread(struct snapraid_io* io, block_off_t blockcur, int skip, int* writer_error)</span>
|
||||
<span class="lineNum"> 435 </span> : {
|
||||
<span class="lineNum"> 436 </span> : unsigned i;
|
||||
<span class="lineNum"> 437 </span> :
|
||||
<span class="lineNum"> 438 </span> : /* ensure that all parity was written */
|
||||
<span class="lineNum"> 439 </span><span class="lineCov"> 110042 : assert(io->writer_list[0] == io->writer_max);</span>
|
||||
<span class="lineNum"> 439 </span><span class="lineCov"> 110098 : assert(io->writer_list[0] == io->writer_max);</span>
|
||||
<span class="lineNum"> 440 </span> :
|
||||
<span class="lineNum"> 441 </span> : /* setup the list of workers to process */
|
||||
<span class="lineNum"> 442 </span><span class="lineCov"> 773666 : for (i = 0; i <= io->writer_max; ++i)</span>
|
||||
<span class="lineNum"> 443 </span><span class="lineCov"> 663624 : io->writer_list[i] = i;</span>
|
||||
<span class="lineNum"> 442 </span><span class="lineCov"> 774114 : for (i = 0; i <= io->writer_max; ++i)</span>
|
||||
<span class="lineNum"> 443 </span><span class="lineCov"> 664016 : io->writer_list[i] = i;</span>
|
||||
<span class="lineNum"> 444 </span> :
|
||||
<span class="lineNum"> 445 </span> : /* the synchronization is protected by the io mutex */
|
||||
<span class="lineNum"> 446 </span><span class="lineCov"> 110042 : thread_mutex_lock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 446 </span><span class="lineCov"> 110098 : thread_mutex_lock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 447 </span> :
|
||||
<span class="lineNum"> 448 </span> : /* report errors */
|
||||
<span class="lineNum"> 449 </span><span class="lineCov"> 550210 : for (i = 0; i < IO_WRITER_ERROR_MAX; ++i) {</span>
|
||||
<span class="lineNum"> 450 </span><span class="lineCov"> 440168 : writer_error[i] = io->writer_error[i];</span>
|
||||
<span class="lineNum"> 451 </span><span class="lineCov"> 440168 : io->writer_error[i] = 0;</span>
|
||||
<span class="lineNum"> 449 </span><span class="lineCov"> 550490 : for (i = 0; i < IO_WRITER_ERROR_MAX; ++i) {</span>
|
||||
<span class="lineNum"> 450 </span><span class="lineCov"> 440392 : writer_error[i] = io->writer_error[i];</span>
|
||||
<span class="lineNum"> 451 </span><span class="lineCov"> 440392 : io->writer_error[i] = 0;</span>
|
||||
<span class="lineNum"> 452 </span> : }
|
||||
<span class="lineNum"> 453 </span> :
|
||||
<span class="lineNum"> 454 </span><span class="lineCov"> 110042 : if (skip) {</span>
|
||||
<span class="lineNum"> 454 </span><span class="lineCov"> 110098 : if (skip) {</span>
|
||||
<span class="lineNum"> 455 </span> : /* skip the next write */
|
||||
<span class="lineNum"> 456 </span><span class="lineCov"> 2291 : io_writer_sched_empty(io, io->writer_index, blockcur);</span>
|
||||
<span class="lineNum"> 456 </span><span class="lineCov"> 2275 : io_writer_sched_empty(io, io->writer_index, blockcur);</span>
|
||||
<span class="lineNum"> 457 </span> : } else {
|
||||
<span class="lineNum"> 458 </span> : /* schedule the next write */
|
||||
<span class="lineNum"> 459 </span><span class="lineCov"> 107751 : io_writer_sched(io, io->writer_index, blockcur);</span>
|
||||
<span class="lineNum"> 459 </span><span class="lineCov"> 107823 : io_writer_sched(io, io->writer_index, blockcur);</span>
|
||||
<span class="lineNum"> 460 </span> : }
|
||||
<span class="lineNum"> 461 </span> :
|
||||
<span class="lineNum"> 462 </span> : /* at this point the writers must be in sync with the readers */
|
||||
<span class="lineNum"> 463 </span><span class="lineCov"> 110042 : assert(io->writer_index == io->reader_index);</span>
|
||||
<span class="lineNum"> 463 </span><span class="lineCov"> 110098 : assert(io->writer_index == io->reader_index);</span>
|
||||
<span class="lineNum"> 464 </span> :
|
||||
<span class="lineNum"> 465 </span> : /* set the index to be used for the next write */
|
||||
<span class="lineNum"> 466 </span><span class="lineCov"> 110042 : io->writer_index = (io->writer_index + 1) % io->io_max;</span>
|
||||
<span class="lineNum"> 466 </span><span class="lineCov"> 110098 : io->writer_index = (io->writer_index + 1) % io->io_max;</span>
|
||||
<span class="lineNum"> 467 </span> :
|
||||
<span class="lineNum"> 468 </span> : /* signal all the workers that there is a new pending task */
|
||||
<span class="lineNum"> 469 </span><span class="lineCov"> 110042 : thread_cond_broadcast_and_unlock(&io->write_sched, &io->io_mutex);</span>
|
||||
<a name="470"><span class="lineNum"> 470 </span><span class="lineCov"> 110042 : }</span></a>
|
||||
<span class="lineNum"> 469 </span><span class="lineCov"> 110098 : thread_cond_broadcast_and_unlock(&io->write_sched, &io->io_mutex);</span>
|
||||
<a name="470"><span class="lineNum"> 470 </span><span class="lineCov"> 110098 : }</span></a>
|
||||
<span class="lineNum"> 471 </span> :
|
||||
<span class="lineNum"> 472 </span><span class="lineCov"> 1 : static void io_refresh_thread(struct snapraid_io* io)</span>
|
||||
<span class="lineNum"> 472 </span><span class="lineNoCov"> 0 : static void io_refresh_thread(struct snapraid_io* io)</span>
|
||||
<span class="lineNum"> 473 </span> : {
|
||||
<span class="lineNum"> 474 </span> : unsigned i;
|
||||
<span class="lineNum"> 475 </span> :
|
||||
<span class="lineNum"> 476 </span> : /* the synchronization is protected by the io mutex */
|
||||
<span class="lineNum"> 477 </span><span class="lineCov"> 1 : thread_mutex_lock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 477 </span><span class="lineNoCov"> 0 : thread_mutex_lock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 478 </span> :
|
||||
<span class="lineNum"> 479 </span> : /* for all readers, count the number of read blocks */
|
||||
<span class="lineNum"> 480 </span><span class="lineCov"> 7 : for (i = 0; i < io->reader_max; ++i) {</span>
|
||||
<span class="lineNum"> 480 </span><span class="lineNoCov"> 0 : for (i = 0; i < io->reader_max; ++i) {</span>
|
||||
<span class="lineNum"> 481 </span> : unsigned begin, end, cached;
|
||||
<span class="lineNum"> 482 </span><span class="lineCov"> 6 : struct snapraid_worker* worker = &io->reader_map[i];</span>
|
||||
<span class="lineNum"> 482 </span><span class="lineNoCov"> 0 : struct snapraid_worker* worker = &io->reader_map[i];</span>
|
||||
<span class="lineNum"> 483 </span> :
|
||||
<span class="lineNum"> 484 </span> : /* the first block read */
|
||||
<span class="lineNum"> 485 </span><span class="lineCov"> 6 : begin = io->reader_index + 1;</span>
|
||||
<span class="lineNum"> 485 </span><span class="lineNoCov"> 0 : begin = io->reader_index + 1;</span>
|
||||
<span class="lineNum"> 486 </span> : /* the block in reading */
|
||||
<span class="lineNum"> 487 </span><span class="lineCov"> 6 : end = worker->index;</span>
|
||||
<span class="lineNum"> 488 </span><span class="lineCov"> 6 : if (begin > end)</span>
|
||||
<span class="lineNum"> 489 </span><span class="lineCov"> 6 : end += io->io_max;</span>
|
||||
<span class="lineNum"> 490 </span><span class="lineCov"> 6 : cached = end - begin;</span>
|
||||
<span class="lineNum"> 487 </span><span class="lineNoCov"> 0 : end = worker->index;</span>
|
||||
<span class="lineNum"> 488 </span><span class="lineNoCov"> 0 : if (begin > end)</span>
|
||||
<span class="lineNum"> 489 </span><span class="lineNoCov"> 0 : end += io->io_max;</span>
|
||||
<span class="lineNum"> 490 </span><span class="lineNoCov"> 0 : cached = end - begin;</span>
|
||||
<span class="lineNum"> 491 </span> :
|
||||
<span class="lineNum"> 492 </span><span class="lineCov"> 6 : if (worker->parity_handle)</span>
|
||||
<span class="lineNum"> 492 </span><span class="lineNoCov"> 0 : if (worker->parity_handle)</span>
|
||||
<span class="lineNum"> 493 </span><span class="lineNoCov"> 0 : io->state->parity[worker->parity_handle->level].cached = cached;</span>
|
||||
<span class="lineNum"> 494 </span> : else
|
||||
<span class="lineNum"> 495 </span><span class="lineCov"> 6 : worker->handle->disk->cached = cached;</span>
|
||||
<span class="lineNum"> 495 </span><span class="lineNoCov"> 0 : worker->handle->disk->cached = cached;</span>
|
||||
<span class="lineNum"> 496 </span> : }
|
||||
<span class="lineNum"> 497 </span> :
|
||||
<span class="lineNum"> 498 </span> : /* for all writers, count the number of written blocks */
|
||||
<span class="lineNum"> 499 </span> : /* note that this is a kind of "opposite" of cached blocks */
|
||||
<span class="lineNum"> 500 </span><span class="lineCov"> 2 : for (i = 0; i < io->writer_max; ++i) {</span>
|
||||
<span class="lineNum"> 500 </span><span class="lineNoCov"> 0 : for (i = 0; i < io->writer_max; ++i) {</span>
|
||||
<span class="lineNum"> 501 </span> : unsigned begin, end, cached;
|
||||
<span class="lineNum"> 502 </span><span class="lineCov"> 1 : struct snapraid_worker* worker = &io->writer_map[i];</span>
|
||||
<span class="lineNum"> 502 </span><span class="lineNoCov"> 0 : struct snapraid_worker* worker = &io->writer_map[i];</span>
|
||||
<span class="lineNum"> 503 </span> :
|
||||
<span class="lineNum"> 504 </span> : /* the first block written */
|
||||
<span class="lineNum"> 505 </span><span class="lineCov"> 1 : begin = io->writer_index + 1;</span>
|
||||
<span class="lineNum"> 505 </span><span class="lineNoCov"> 0 : begin = io->writer_index + 1;</span>
|
||||
<span class="lineNum"> 506 </span> : /* the block in writing */
|
||||
<span class="lineNum"> 507 </span><span class="lineCov"> 1 : end = worker->index;</span>
|
||||
<span class="lineNum"> 508 </span><span class="lineCov"> 1 : if (begin > end)</span>
|
||||
<span class="lineNum"> 509 </span><span class="lineCov"> 1 : end += io->io_max;</span>
|
||||
<span class="lineNum"> 510 </span><span class="lineCov"> 1 : cached = end - begin;</span>
|
||||
<span class="lineNum"> 507 </span><span class="lineNoCov"> 0 : end = worker->index;</span>
|
||||
<span class="lineNum"> 508 </span><span class="lineNoCov"> 0 : if (begin > end)</span>
|
||||
<span class="lineNum"> 509 </span><span class="lineNoCov"> 0 : end += io->io_max;</span>
|
||||
<span class="lineNum"> 510 </span><span class="lineNoCov"> 0 : cached = end - begin;</span>
|
||||
<span class="lineNum"> 511 </span> :
|
||||
<span class="lineNum"> 512 </span><span class="lineCov"> 1 : io->state->parity[worker->parity_handle->level].cached = cached;</span>
|
||||
<span class="lineNum"> 512 </span><span class="lineNoCov"> 0 : io->state->parity[worker->parity_handle->level].cached = cached;</span>
|
||||
<span class="lineNum"> 513 </span> : }
|
||||
<span class="lineNum"> 514 </span> :
|
||||
<span class="lineNum"> 515 </span><span class="lineCov"> 1 : thread_mutex_unlock(&io->io_mutex);</span>
|
||||
<a name="516"><span class="lineNum"> 516 </span><span class="lineCov"> 1 : }</span></a>
|
||||
<span class="lineNum"> 515 </span><span class="lineNoCov"> 0 : thread_mutex_unlock(&io->io_mutex);</span>
|
||||
<a name="516"><span class="lineNum"> 516 </span><span class="lineNoCov"> 0 : }</span></a>
|
||||
<span class="lineNum"> 517 </span> :
|
||||
<span class="lineNum"> 518 </span><span class="lineCov"> 1081860 : static struct snapraid_task* io_task_read_thread(struct snapraid_io* io, unsigned base, unsigned count, unsigned* pos, unsigned* waiting_map, unsigned* waiting_mac)</span>
|
||||
<span class="lineNum"> 518 </span><span class="lineCov"> 1082196 : static struct snapraid_task* io_task_read_thread(struct snapraid_io* io, unsigned base, unsigned count, unsigned* pos, unsigned* waiting_map, unsigned* waiting_mac)</span>
|
||||
<span class="lineNum"> 519 </span> : {
|
||||
<span class="lineNum"> 520 </span> : unsigned waiting_cycle;
|
||||
<span class="lineNum"> 521 </span> :
|
||||
<span class="lineNum"> 522 </span> : /* count the waiting cycle */
|
||||
<span class="lineNum"> 523 </span><span class="lineCov"> 1081860 : waiting_cycle = 0;</span>
|
||||
<span class="lineNum"> 523 </span><span class="lineCov"> 1082196 : waiting_cycle = 0;</span>
|
||||
<span class="lineNum"> 524 </span> :
|
||||
<span class="lineNum"> 525 </span> : /* clear the waiting indexes */
|
||||
<span class="lineNum"> 526 </span><span class="lineCov"> 1081860 : *waiting_mac = 0;</span>
|
||||
<span class="lineNum"> 526 </span><span class="lineCov"> 1082196 : *waiting_mac = 0;</span>
|
||||
<span class="lineNum"> 527 </span> :
|
||||
<span class="lineNum"> 528 </span> : /* the synchronization is protected by the io mutex */
|
||||
<span class="lineNum"> 529 </span><span class="lineCov"> 1081860 : thread_mutex_lock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 529 </span><span class="lineCov"> 1082196 : thread_mutex_lock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 530 </span> :
|
||||
<span class="lineNum"> 531 </span> : while (1) {
|
||||
<span class="lineNum"> 532 </span> : unsigned char* let;
|
||||
|
|
@ -597,67 +597,67 @@
|
|||
<span class="lineNum"> 535 </span> : /* get the index the IO is using */
|
||||
<span class="lineNum"> 536 </span> : /* we must ensure that this index has not a read in progress */
|
||||
<span class="lineNum"> 537 </span> : /* to avoid a concurrent access */
|
||||
<span class="lineNum"> 538 </span><span class="lineCov"> 1084465 : busy_index = io->reader_index;</span>
|
||||
<span class="lineNum"> 538 </span><span class="lineCov"> 1083198 : busy_index = io->reader_index;</span>
|
||||
<span class="lineNum"> 539 </span> :
|
||||
<span class="lineNum"> 540 </span> : /* search for a worker that has already finished */
|
||||
<span class="lineNum"> 541 </span><span class="lineCov"> 1084465 : let = &io->reader_list[0];</span>
|
||||
<span class="lineNum"> 541 </span><span class="lineCov"> 1083198 : let = &io->reader_list[0];</span>
|
||||
<span class="lineNum"> 542 </span> : while (1) {
|
||||
<span class="lineNum"> 543 </span><span class="lineCov"> 1097188 : unsigned i = *let;</span>
|
||||
<span class="lineNum"> 543 </span><span class="lineCov"> 1087885 : unsigned i = *let;</span>
|
||||
<span class="lineNum"> 544 </span> :
|
||||
<span class="lineNum"> 545 </span> : /* if we are at the end */
|
||||
<span class="lineNum"> 546 </span><span class="lineCov"> 1097188 : if (i == io->reader_max)</span>
|
||||
<span class="lineNum"> 547 </span><span class="lineCov"> 2605 : break;</span>
|
||||
<span class="lineNum"> 546 </span><span class="lineCov"> 1087885 : if (i == io->reader_max)</span>
|
||||
<span class="lineNum"> 547 </span><span class="lineCov"> 1002 : break;</span>
|
||||
<span class="lineNum"> 548 </span> :
|
||||
<span class="lineNum"> 549 </span> : /* if it's in range */
|
||||
<span class="lineNum"> 550 </span><span class="lineCov"> 1094583 : if (base <= i && i < base + count) {</span>
|
||||
<span class="lineNum"> 550 </span><span class="lineCov"> 1086883 : if (base <= i && i < base + count) {</span>
|
||||
<span class="lineNum"> 551 </span> : struct snapraid_worker* worker;
|
||||
<span class="lineNum"> 552 </span> :
|
||||
<span class="lineNum"> 553 </span> : /* if it's the first cycle */
|
||||
<span class="lineNum"> 554 </span><span class="lineCov"> 1092105 : if (waiting_cycle == 0) {</span>
|
||||
<span class="lineNum"> 554 </span><span class="lineCov"> 1085977 : if (waiting_cycle == 0) {</span>
|
||||
<span class="lineNum"> 555 </span> : /* store the waiting indexes */
|
||||
<span class="lineNum"> 556 </span><span class="lineCov"> 1088986 : waiting_map[(*waiting_mac)++] = i - base;</span>
|
||||
<span class="lineNum"> 556 </span><span class="lineCov"> 1084926 : waiting_map[(*waiting_mac)++] = i - base;</span>
|
||||
<span class="lineNum"> 557 </span> : }
|
||||
<span class="lineNum"> 558 </span> :
|
||||
<span class="lineNum"> 559 </span><span class="lineCov"> 1092105 : worker = &io->reader_map[i];</span>
|
||||
<span class="lineNum"> 559 </span><span class="lineCov"> 1085977 : worker = &io->reader_map[i];</span>
|
||||
<span class="lineNum"> 560 </span> :
|
||||
<span class="lineNum"> 561 </span> : /* if the worker has finished this index */
|
||||
<span class="lineNum"> 562 </span><span class="lineCov"> 1092105 : if (busy_index != worker->index) {</span>
|
||||
<span class="lineNum"> 562 </span><span class="lineCov"> 1085977 : if (busy_index != worker->index) {</span>
|
||||
<span class="lineNum"> 563 </span> : struct snapraid_task* task;
|
||||
<span class="lineNum"> 564 </span> :
|
||||
<span class="lineNum"> 565 </span><span class="lineCov"> 1081860 : task = &worker->task_map[io->reader_index];</span>
|
||||
<span class="lineNum"> 565 </span><span class="lineCov"> 1082196 : task = &worker->task_map[io->reader_index];</span>
|
||||
<span class="lineNum"> 566 </span> :
|
||||
<span class="lineNum"> 567 </span><span class="lineCov"> 1081860 : thread_mutex_unlock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 567 </span><span class="lineCov"> 1082196 : thread_mutex_unlock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 568 </span> :
|
||||
<span class="lineNum"> 569 </span> : /* mark the worker as processed */
|
||||
<span class="lineNum"> 570 </span> : /* setting the previous one to point at the next one */
|
||||
<span class="lineNum"> 571 </span><span class="lineCov"> 1081860 : *let = io->reader_list[i + 1];</span>
|
||||
<span class="lineNum"> 571 </span><span class="lineCov"> 1082196 : *let = io->reader_list[i + 1];</span>
|
||||
<span class="lineNum"> 572 </span> :
|
||||
<span class="lineNum"> 573 </span> : /* return the position */
|
||||
<span class="lineNum"> 574 </span><span class="lineCov"> 1081860 : *pos = i - base;</span>
|
||||
<span class="lineNum"> 574 </span><span class="lineCov"> 1082196 : *pos = i - base;</span>
|
||||
<span class="lineNum"> 575 </span> :
|
||||
<span class="lineNum"> 576 </span> : /* on the first cycle, no one is waiting */
|
||||
<span class="lineNum"> 577 </span><span class="lineCov"> 1081860 : if (waiting_cycle == 0)</span>
|
||||
<span class="lineNum"> 578 </span><span class="lineCov"> 1079288 : *waiting_mac = 0;</span>
|
||||
<span class="lineNum"> 577 </span><span class="lineCov"> 1082196 : if (waiting_cycle == 0)</span>
|
||||
<span class="lineNum"> 578 </span><span class="lineCov"> 1081206 : *waiting_mac = 0;</span>
|
||||
<span class="lineNum"> 579 </span> :
|
||||
<span class="lineNum"> 580 </span><span class="lineCov"> 2163720 : return task;</span>
|
||||
<span class="lineNum"> 580 </span><span class="lineCov"> 2164392 : return task;</span>
|
||||
<span class="lineNum"> 581 </span> : }
|
||||
<span class="lineNum"> 582 </span> : }
|
||||
<span class="lineNum"> 583 </span> :
|
||||
<span class="lineNum"> 584 </span> : /* next position to check */
|
||||
<span class="lineNum"> 585 </span><span class="lineCov"> 12723 : let = &io->reader_list[i + 1];</span>
|
||||
<span class="lineNum"> 586 </span><span class="lineCov"> 12723 : }</span>
|
||||
<span class="lineNum"> 585 </span><span class="lineCov"> 4687 : let = &io->reader_list[i + 1];</span>
|
||||
<span class="lineNum"> 586 </span><span class="lineCov"> 4687 : }</span>
|
||||
<span class="lineNum"> 587 </span> :
|
||||
<span class="lineNum"> 588 </span> : /* if no worker is ready, wait for an event */
|
||||
<span class="lineNum"> 589 </span><span class="lineCov"> 2605 : thread_cond_wait(&io->read_done, &io->io_mutex);</span>
|
||||
<span class="lineNum"> 589 </span><span class="lineCov"> 1002 : thread_cond_wait(&io->read_done, &io->io_mutex);</span>
|
||||
<span class="lineNum"> 590 </span> :
|
||||
<span class="lineNum"> 591 </span> : /* count the cycles */
|
||||
<span class="lineNum"> 592 </span><span class="lineCov"> 2605 : ++waiting_cycle;</span>
|
||||
<span class="lineNum"> 593 </span><span class="lineCov"> 2605 : }</span>
|
||||
<span class="lineNum"> 592 </span><span class="lineCov"> 1002 : ++waiting_cycle;</span>
|
||||
<span class="lineNum"> 593 </span><span class="lineCov"> 1002 : }</span>
|
||||
<a name="594"><span class="lineNum"> 594 </span> : }</a>
|
||||
<span class="lineNum"> 595 </span> :
|
||||
<span class="lineNum"> 596 </span><span class="lineCov"> 871056 : static struct snapraid_task* io_data_read_thread(struct snapraid_io* io, unsigned* pos, unsigned* waiting_map, unsigned* waiting_mac)</span>
|
||||
<span class="lineNum"> 596 </span><span class="lineCov"> 871392 : static struct snapraid_task* io_data_read_thread(struct snapraid_io* io, unsigned* pos, unsigned* waiting_map, unsigned* waiting_mac)</span>
|
||||
<span class="lineNum"> 597 </span> : {
|
||||
<span class="lineNum"> 598 </span><span class="lineCov"> 871056 : return io_task_read_thread(io, io->data_base, io->data_count, pos, waiting_map, waiting_mac);</span>
|
||||
<span class="lineNum"> 598 </span><span class="lineCov"> 871392 : return io_task_read_thread(io, io->data_base, io->data_count, pos, waiting_map, waiting_mac);</span>
|
||||
<a name="599"><span class="lineNum"> 599 </span> : }</a>
|
||||
<span class="lineNum"> 600 </span> :
|
||||
<span class="lineNum"> 601 </span><span class="lineCov"> 210804 : static struct snapraid_task* io_parity_read_thread(struct snapraid_io* io, unsigned* pos, unsigned* waiting_map, unsigned* waiting_mac)</span>
|
||||
|
|
@ -665,18 +665,18 @@
|
|||
<span class="lineNum"> 603 </span><span class="lineCov"> 210804 : return io_task_read_thread(io, io->parity_base, io->parity_count, pos, waiting_map, waiting_mac);</span>
|
||||
<a name="604"><span class="lineNum"> 604 </span> : }</a>
|
||||
<span class="lineNum"> 605 </span> :
|
||||
<span class="lineNum"> 606 </span><span class="lineCov"> 553582 : static void io_parity_write_thread(struct snapraid_io* io, unsigned* pos, unsigned* waiting_map, unsigned* waiting_mac)</span>
|
||||
<span class="lineNum"> 606 </span><span class="lineCov"> 553918 : static void io_parity_write_thread(struct snapraid_io* io, unsigned* pos, unsigned* waiting_map, unsigned* waiting_mac)</span>
|
||||
<span class="lineNum"> 607 </span> : {
|
||||
<span class="lineNum"> 608 </span> : unsigned waiting_cycle;
|
||||
<span class="lineNum"> 609 </span> :
|
||||
<span class="lineNum"> 610 </span> : /* count the waiting cycle */
|
||||
<span class="lineNum"> 611 </span><span class="lineCov"> 553582 : waiting_cycle = 0;</span>
|
||||
<span class="lineNum"> 611 </span><span class="lineCov"> 553918 : waiting_cycle = 0;</span>
|
||||
<span class="lineNum"> 612 </span> :
|
||||
<span class="lineNum"> 613 </span> : /* clear the waiting indexes */
|
||||
<span class="lineNum"> 614 </span><span class="lineCov"> 553582 : *waiting_mac = 0;</span>
|
||||
<span class="lineNum"> 614 </span><span class="lineCov"> 553918 : *waiting_mac = 0;</span>
|
||||
<span class="lineNum"> 615 </span> :
|
||||
<span class="lineNum"> 616 </span> : /* the synchronization is protected by the io mutex */
|
||||
<span class="lineNum"> 617 </span><span class="lineCov"> 553582 : thread_mutex_lock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 617 </span><span class="lineCov"> 553918 : thread_mutex_lock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 618 </span> :
|
||||
<span class="lineNum"> 619 </span> : while (1) {
|
||||
<span class="lineNum"> 620 </span> : unsigned char* let;
|
||||
|
|
@ -687,131 +687,131 @@
|
|||
<span class="lineNum"> 625 </span> : /* to avoid a concurrent access */
|
||||
<span class="lineNum"> 626 </span> : /* note that we are already sure that a write is not in progress */
|
||||
<span class="lineNum"> 627 </span> : /* at the index the IO is using at now */
|
||||
<span class="lineNum"> 628 </span><span class="lineCov"> 622113 : busy_index = (io->writer_index + 1) % io->io_max;</span>
|
||||
<span class="lineNum"> 628 </span><span class="lineCov"> 622507 : busy_index = (io->writer_index + 1) % io->io_max;</span>
|
||||
<span class="lineNum"> 629 </span> :
|
||||
<span class="lineNum"> 630 </span> : /* search for a worker that has already finished */
|
||||
<span class="lineNum"> 631 </span><span class="lineCov"> 622113 : let = &io->writer_list[0];</span>
|
||||
<span class="lineNum"> 631 </span><span class="lineCov"> 622507 : let = &io->writer_list[0];</span>
|
||||
<span class="lineNum"> 632 </span> : while (1) {
|
||||
<span class="lineNum"> 633 </span><span class="lineCov"> 854835 : unsigned i = *let;</span>
|
||||
<span class="lineNum"> 633 </span><span class="lineCov"> 899608 : unsigned i = *let;</span>
|
||||
<span class="lineNum"> 634 </span> : struct snapraid_worker* worker;
|
||||
<span class="lineNum"> 635 </span> :
|
||||
<span class="lineNum"> 636 </span> : /* if we are at the end */
|
||||
<span class="lineNum"> 637 </span><span class="lineCov"> 854835 : if (i == io->writer_max)</span>
|
||||
<span class="lineNum"> 638 </span><span class="lineCov"> 68531 : break;</span>
|
||||
<span class="lineNum"> 637 </span><span class="lineCov"> 899608 : if (i == io->writer_max)</span>
|
||||
<span class="lineNum"> 638 </span><span class="lineCov"> 68589 : break;</span>
|
||||
<span class="lineNum"> 639 </span> :
|
||||
<span class="lineNum"> 640 </span> : /* if it's the first cycle */
|
||||
<span class="lineNum"> 641 </span><span class="lineCov"> 786304 : if (waiting_cycle == 0) {</span>
|
||||
<span class="lineNum"> 641 </span><span class="lineCov"> 831019 : if (waiting_cycle == 0) {</span>
|
||||
<span class="lineNum"> 642 </span> : /* store the waiting indexes */
|
||||
<span class="lineNum"> 643 </span><span class="lineCov"> 717089 : waiting_map[(*waiting_mac)++] = i;</span>
|
||||
<span class="lineNum"> 643 </span><span class="lineCov"> 761956 : waiting_map[(*waiting_mac)++] = i;</span>
|
||||
<span class="lineNum"> 644 </span> : }
|
||||
<span class="lineNum"> 645 </span> :
|
||||
<span class="lineNum"> 646 </span><span class="lineCov"> 786304 : worker = &io->writer_map[i];</span>
|
||||
<span class="lineNum"> 646 </span><span class="lineCov"> 831019 : worker = &io->writer_map[i];</span>
|
||||
<span class="lineNum"> 647 </span> :
|
||||
<span class="lineNum"> 648 </span> : /* the two indexes cannot be equal */
|
||||
<span class="lineNum"> 649 </span><span class="lineCov"> 786304 : assert(io->writer_index != worker->index);</span>
|
||||
<span class="lineNum"> 649 </span><span class="lineCov"> 831019 : assert(io->writer_index != worker->index);</span>
|
||||
<span class="lineNum"> 650 </span> :
|
||||
<span class="lineNum"> 651 </span> : /* if the worker has finished this index */
|
||||
<span class="lineNum"> 652 </span><span class="lineCov"> 786304 : if (busy_index != worker->index) {</span>
|
||||
<span class="lineNum"> 653 </span><span class="lineCov"> 553582 : thread_mutex_unlock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 652 </span><span class="lineCov"> 831019 : if (busy_index != worker->index) {</span>
|
||||
<span class="lineNum"> 653 </span><span class="lineCov"> 553918 : thread_mutex_unlock(&io->io_mutex);</span>
|
||||
<span class="lineNum"> 654 </span> :
|
||||
<span class="lineNum"> 655 </span> : /* mark the worker as processed */
|
||||
<span class="lineNum"> 656 </span> : /* setting the previous one to point at the next one */
|
||||
<span class="lineNum"> 657 </span><span class="lineCov"> 553582 : *let = io->writer_list[i + 1];</span>
|
||||
<span class="lineNum"> 657 </span><span class="lineCov"> 553918 : *let = io->writer_list[i + 1];</span>
|
||||
<span class="lineNum"> 658 </span> :
|
||||
<span class="lineNum"> 659 </span> : /* return the position */
|
||||
<span class="lineNum"> 660 </span><span class="lineCov"> 553582 : *pos = i;</span>
|
||||
<span class="lineNum"> 660 </span><span class="lineCov"> 553918 : *pos = i;</span>
|
||||
<span class="lineNum"> 661 </span> :
|
||||
<span class="lineNum"> 662 </span> : /* on the first cycle, no one is waiting */
|
||||
<span class="lineNum"> 663 </span><span class="lineCov"> 553582 : if (waiting_cycle == 0)</span>
|
||||
<span class="lineNum"> 664 </span><span class="lineCov"> 485051 : *waiting_mac = 0;</span>
|
||||
<span class="lineNum"> 663 </span><span class="lineCov"> 553918 : if (waiting_cycle == 0)</span>
|
||||
<span class="lineNum"> 664 </span><span class="lineCov"> 485329 : *waiting_mac = 0;</span>
|
||||
<span class="lineNum"> 665 </span> :
|
||||
<span class="lineNum"> 666 </span><span class="lineCov"> 1107164 : return;</span>
|
||||
<span class="lineNum"> 666 </span><span class="lineCov"> 1107836 : return;</span>
|
||||
<span class="lineNum"> 667 </span> : }
|
||||
<span class="lineNum"> 668 </span> :
|
||||
<span class="lineNum"> 669 </span> : /* next position to check */
|
||||
<span class="lineNum"> 670 </span><span class="lineCov"> 232722 : let = &io->writer_list[i + 1];</span>
|
||||
<span class="lineNum"> 671 </span><span class="lineCov"> 232722 : }</span>
|
||||
<span class="lineNum"> 670 </span><span class="lineCov"> 277101 : let = &io->writer_list[i + 1];</span>
|
||||
<span class="lineNum"> 671 </span><span class="lineCov"> 277101 : }</span>
|
||||
<span class="lineNum"> 672 </span> :
|
||||
<span class="lineNum"> 673 </span> : /* if no worker is ready, wait for an event */
|
||||
<span class="lineNum"> 674 </span><span class="lineCov"> 68531 : thread_cond_wait(&io->write_done, &io->io_mutex);</span>
|
||||
<span class="lineNum"> 674 </span><span class="lineCov"> 68589 : thread_cond_wait(&io->write_done, &io->io_mutex);</span>
|
||||
<span class="lineNum"> 675 </span> :
|
||||
<span class="lineNum"> 676 </span> : /* count the cycles */
|
||||
<span class="lineNum"> 677 </span><span class="lineCov"> 68531 : ++waiting_cycle;</span>
|
||||
<span class="lineNum"> 678 </span><span class="lineCov"> 68531 : }</span>
|
||||
<span class="lineNum"> 677 </span><span class="lineCov"> 68589 : ++waiting_cycle;</span>
|
||||
<span class="lineNum"> 678 </span><span class="lineCov"> 68589 : }</span>
|
||||
<a name="679"><span class="lineNum"> 679 </span> : }</a>
|
||||
<span class="lineNum"> 680 </span> :
|
||||
<span class="lineNum"> 681 </span><span class="lineCov"> 1081809 : static void io_reader_worker(struct snapraid_worker* worker, struct snapraid_task* task)</span>
|
||||
<span class="lineNum"> 681 </span><span class="lineCov"> 1081760 : static void io_reader_worker(struct snapraid_worker* worker, struct snapraid_task* task)</span>
|
||||
<span class="lineNum"> 682 </span> : {
|
||||
<span class="lineNum"> 683 </span> : /* if we reached the end */
|
||||
<span class="lineNum"> 684 </span><span class="lineCov"> 1081809 : if (task->position >= worker->io->block_max) {</span>
|
||||
<span class="lineNum"> 684 </span><span class="lineCov"> 1081760 : if (task->position >= worker->io->block_max) {</span>
|
||||
<span class="lineNum"> 685 </span> : /* complete a dummy task */
|
||||
<span class="lineNum"> 686 </span><span class="lineCov"> 120 : task->state = TASK_STATE_EMPTY;</span>
|
||||
<span class="lineNum"> 686 </span><span class="lineCov"> 111 : task->state = TASK_STATE_EMPTY;</span>
|
||||
<span class="lineNum"> 687 </span> : } else {
|
||||
<span class="lineNum"> 688 </span><span class="lineCov"> 1081689 : worker->func(worker, task);</span>
|
||||
<span class="lineNum"> 688 </span><span class="lineCov"> 1081649 : worker->func(worker, task);</span>
|
||||
<span class="lineNum"> 689 </span> : }
|
||||
<a name="690"><span class="lineNum"> 690 </span><span class="lineCov"> 1081474 : }</span></a>
|
||||
<a name="690"><span class="lineNum"> 690 </span><span class="lineCov"> 1073313 : }</span></a>
|
||||
<span class="lineNum"> 691 </span> :
|
||||
<span class="lineNum"> 692 </span><span class="lineCov"> 648 : static void* io_reader_thread(void* arg)</span>
|
||||
<span class="lineNum"> 692 </span><span class="lineCov"> 615 : static void* io_reader_thread(void* arg)</span>
|
||||
<span class="lineNum"> 693 </span> : {
|
||||
<span class="lineNum"> 694 </span><span class="lineCov"> 648 : struct snapraid_worker* worker = arg;</span>
|
||||
<span class="lineNum"> 694 </span><span class="lineCov"> 615 : struct snapraid_worker* worker = arg;</span>
|
||||
<span class="lineNum"> 695 </span> :
|
||||
<span class="lineNum"> 696 </span> : /* force completion of the first task */
|
||||
<span class="lineNum"> 697 </span><span class="lineCov"> 648 : io_reader_worker(worker, &worker->task_map[0]);</span>
|
||||
<span class="lineNum"> 697 </span><span class="lineCov"> 615 : io_reader_worker(worker, &worker->task_map[0]);</span>
|
||||
<span class="lineNum"> 698 </span> :
|
||||
<span class="lineNum"> 699 </span> : while (1) {
|
||||
<span class="lineNum"> 700 </span> : struct snapraid_task* task;
|
||||
<span class="lineNum"> 701 </span> :
|
||||
<span class="lineNum"> 702 </span> : /* get the new task */
|
||||
<span class="lineNum"> 703 </span><span class="lineCov"> 1162742 : task = io_reader_step(worker);</span>
|
||||
<span class="lineNum"> 703 </span><span class="lineCov"> 1159382 : task = io_reader_step(worker);</span>
|
||||
<span class="lineNum"> 704 </span> :
|
||||
<span class="lineNum"> 705 </span> : /* if no task, it means to exit */
|
||||
<span class="lineNum"> 706 </span><span class="lineCov"> 1163099 : if (!task)</span>
|
||||
<span class="lineNum"> 707 </span><span class="lineCov"> 647 : break;</span>
|
||||
<span class="lineNum"> 706 </span><span class="lineCov"> 1164112 : if (!task)</span>
|
||||
<span class="lineNum"> 707 </span><span class="lineCov"> 648 : break;</span>
|
||||
<span class="lineNum"> 708 </span> :
|
||||
<span class="lineNum"> 709 </span> : /* nothing more to do */
|
||||
<span class="lineNum"> 710 </span><span class="lineCov"> 1162452 : if (task->state == TASK_STATE_EMPTY)</span>
|
||||
<span class="lineNum"> 711 </span><span class="lineCov"> 81239 : continue;</span>
|
||||
<span class="lineNum"> 710 </span><span class="lineCov"> 1163464 : if (task->state == TASK_STATE_EMPTY)</span>
|
||||
<span class="lineNum"> 711 </span><span class="lineCov"> 82522 : continue;</span>
|
||||
<span class="lineNum"> 712 </span> :
|
||||
<span class="lineNum"> 713 </span><span class="lineCov"> 1081213 : assert(task->state == TASK_STATE_READY);</span>
|
||||
<span class="lineNum"> 713 </span><span class="lineCov"> 1080942 : assert(task->state == TASK_STATE_READY);</span>
|
||||
<span class="lineNum"> 714 </span> :
|
||||
<span class="lineNum"> 715 </span> : /* work on the assigned task */
|
||||
<span class="lineNum"> 716 </span><span class="lineCov"> 1081213 : io_reader_worker(worker, task);</span>
|
||||
<span class="lineNum"> 717 </span><span class="lineCov"> 1162097 : }</span>
|
||||
<span class="lineNum"> 716 </span><span class="lineCov"> 1080942 : io_reader_worker(worker, task);</span>
|
||||
<span class="lineNum"> 717 </span><span class="lineCov"> 1158768 : }</span>
|
||||
<span class="lineNum"> 718 </span> :
|
||||
<span class="lineNum"> 719 </span><span class="lineCov"> 647 : return 0;</span>
|
||||
<span class="lineNum"> 719 </span><span class="lineCov"> 648 : return 0;</span>
|
||||
<a name="720"><span class="lineNum"> 720 </span> : }</a>
|
||||
<span class="lineNum"> 721 </span> :
|
||||
<span class="lineNum"> 722 </span><span class="lineCov"> 462 : static void* io_writer_thread(void* arg)</span>
|
||||
<span class="lineNum"> 722 </span><span class="lineCov"> 461 : static void* io_writer_thread(void* arg)</span>
|
||||
<span class="lineNum"> 723 </span> : {
|
||||
<span class="lineNum"> 724 </span><span class="lineCov"> 462 : struct snapraid_worker* worker = arg;</span>
|
||||
<span class="lineNum"> 725 </span><span class="lineCov"> 462 : int latest_state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 724 </span><span class="lineCov"> 461 : struct snapraid_worker* worker = arg;</span>
|
||||
<span class="lineNum"> 725 </span><span class="lineCov"> 461 : int latest_state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 726 </span> :
|
||||
<span class="lineNum"> 727 </span> : while (1) {
|
||||
<span class="lineNum"> 728 </span> : struct snapraid_task* task;
|
||||
<span class="lineNum"> 729 </span> :
|
||||
<span class="lineNum"> 730 </span> : /* get the new task */
|
||||
<span class="lineNum"> 731 </span><span class="lineCov"> 554042 : task = io_writer_step(worker, latest_state);</span>
|
||||
<span class="lineNum"> 731 </span><span class="lineCov"> 554142 : task = io_writer_step(worker, latest_state);</span>
|
||||
<span class="lineNum"> 732 </span> :
|
||||
<span class="lineNum"> 733 </span> : /* if no task, it means to exit */
|
||||
<span class="lineNum"> 734 </span><span class="lineCov"> 554046 : if (!task)</span>
|
||||
<span class="lineNum"> 735 </span><span class="lineCov"> 462 : break;</span>
|
||||
<span class="lineNum"> 734 </span><span class="lineCov"> 554366 : if (!task)</span>
|
||||
<span class="lineNum"> 735 </span><span class="lineCov"> 461 : break;</span>
|
||||
<span class="lineNum"> 736 </span> :
|
||||
<span class="lineNum"> 737 </span> : /* nothing more to do */
|
||||
<span class="lineNum"> 738 </span><span class="lineCov"> 553584 : if (task->state == TASK_STATE_EMPTY) {</span>
|
||||
<span class="lineNum"> 739 </span><span class="lineCov"> 13749 : latest_state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 740 </span><span class="lineCov"> 13749 : continue;</span>
|
||||
<span class="lineNum"> 738 </span><span class="lineCov"> 553905 : if (task->state == TASK_STATE_EMPTY) {</span>
|
||||
<span class="lineNum"> 739 </span><span class="lineCov"> 13659 : latest_state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 740 </span><span class="lineCov"> 13659 : continue;</span>
|
||||
<span class="lineNum"> 741 </span> : }
|
||||
<span class="lineNum"> 742 </span> :
|
||||
<span class="lineNum"> 743 </span><span class="lineCov"> 539835 : assert(task->state == TASK_STATE_READY);</span>
|
||||
<span class="lineNum"> 743 </span><span class="lineCov"> 540246 : assert(task->state == TASK_STATE_READY);</span>
|
||||
<span class="lineNum"> 744 </span> :
|
||||
<span class="lineNum"> 745 </span> : /* work on the assigned task */
|
||||
<span class="lineNum"> 746 </span><span class="lineCov"> 539835 : worker->func(worker, task);</span>
|
||||
<span class="lineNum"> 746 </span><span class="lineCov"> 540246 : worker->func(worker, task);</span>
|
||||
<span class="lineNum"> 747 </span> :
|
||||
<span class="lineNum"> 748 </span> : /* save the resulting state */
|
||||
<span class="lineNum"> 749 </span><span class="lineCov"> 539831 : latest_state = task->state;</span>
|
||||
<span class="lineNum"> 750 </span><span class="lineCov"> 553580 : }</span>
|
||||
<span class="lineNum"> 749 </span><span class="lineCov"> 540022 : latest_state = task->state;</span>
|
||||
<span class="lineNum"> 750 </span><span class="lineCov"> 553681 : }</span>
|
||||
<span class="lineNum"> 751 </span> :
|
||||
<span class="lineNum"> 752 </span><span class="lineCov"> 462 : return 0;</span>
|
||||
<span class="lineNum"> 752 </span><span class="lineCov"> 461 : return 0;</span>
|
||||
<a name="753"><span class="lineNum"> 753 </span> : }</a>
|
||||
<span class="lineNum"> 754 </span> :
|
||||
<span class="lineNum"> 755 </span><span class="lineCov"> 95 : static void io_start_thread(struct snapraid_io* io,</span>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">2</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">2</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">2</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">18</td>
|
||||
|
|
@ -61,23 +61,23 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#28">rnd</a></td>
|
||||
<td class="coverFnHi">56072909</td>
|
||||
<td class="coverFnHi">56053599</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#35">rndnz</a></td>
|
||||
<td class="coverFnHi">55661691</td>
|
||||
<td class="coverFnHi">55642239</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#84">file_cmp</a></td>
|
||||
<td class="coverFnHi">146571</td>
|
||||
<td class="coverFnHi">146564</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#43">rndnz_range</a></td>
|
||||
<td class="coverFnHi">32723</td>
|
||||
<td class="coverFnHi">32684</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#70">rnd_name</a></td>
|
||||
<td class="coverFnHi">26849</td>
|
||||
<td class="coverFnHi">26839</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#221">cmd_generate</a></td>
|
||||
|
|
@ -93,19 +93,19 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#289">cmd_write</a></td>
|
||||
<td class="coverFnHi">6227</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#457">cmd_append</a></td>
|
||||
<td class="coverFnHi">3256</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#508">cmd_truncate</a></td>
|
||||
<td class="coverFnHi">3141</td>
|
||||
<td class="coverFnHi">6251</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#562">cmd_delete</a></td>
|
||||
<td class="coverFnHi">3136</td>
|
||||
<td class="coverFnHi">3207</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#457">cmd_append</a></td>
|
||||
<td class="coverFnHi">3193</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#508">cmd_truncate</a></td>
|
||||
<td class="coverFnHi">3103</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#360">cmd_damage</a></td>
|
||||
|
|
@ -121,7 +121,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#198">cmd_generate_symlink</a></td>
|
||||
<td class="coverFnHi">940</td>
|
||||
<td class="coverFnHi">930</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#644">main</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">18</td>
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#457">cmd_append</a></td>
|
||||
<td class="coverFnHi">3256</td>
|
||||
<td class="coverFnHi">3193</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#576">cmd_change</a></td>
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#562">cmd_delete</a></td>
|
||||
<td class="coverFnHi">3136</td>
|
||||
<td class="coverFnHi">3207</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#221">cmd_generate</a></td>
|
||||
|
|
@ -85,15 +85,15 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#198">cmd_generate_symlink</a></td>
|
||||
<td class="coverFnHi">940</td>
|
||||
<td class="coverFnHi">930</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#508">cmd_truncate</a></td>
|
||||
<td class="coverFnHi">3141</td>
|
||||
<td class="coverFnHi">3103</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#289">cmd_write</a></td>
|
||||
<td class="coverFnHi">6227</td>
|
||||
<td class="coverFnHi">6251</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#89">fallback</a></td>
|
||||
|
|
@ -101,7 +101,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#84">file_cmp</a></td>
|
||||
<td class="coverFnHi">146571</td>
|
||||
<td class="coverFnHi">146564</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#632">help</a></td>
|
||||
|
|
@ -113,15 +113,15 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#28">rnd</a></td>
|
||||
<td class="coverFnHi">56072909</td>
|
||||
<td class="coverFnHi">56053599</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#70">rnd_name</a></td>
|
||||
<td class="coverFnHi">26849</td>
|
||||
<td class="coverFnHi">26839</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#35">rndnz</a></td>
|
||||
<td class="coverFnHi">55661691</td>
|
||||
<td class="coverFnHi">55642239</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#51">rndnz_damage</a></td>
|
||||
|
|
@ -129,7 +129,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="mktest.c.gcov.html#43">rndnz_range</a></td>
|
||||
<td class="coverFnHi">32723</td>
|
||||
<td class="coverFnHi">32684</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">18</td>
|
||||
|
|
@ -89,28 +89,28 @@
|
|||
<span class="lineNum"> 27 </span> : */
|
||||
<a name="28"><span class="lineNum"> 28 </span> : unsigned long long seed = 0;</a>
|
||||
<span class="lineNum"> 29 </span> :
|
||||
<span class="lineNum"> 30 </span><span class="lineCov"> 56072909 : unsigned rnd(unsigned max)</span>
|
||||
<span class="lineNum"> 30 </span><span class="lineCov"> 56053599 : unsigned rnd(unsigned max)</span>
|
||||
<span class="lineNum"> 31 </span> : {
|
||||
<span class="lineNum"> 32 </span><span class="lineCov"> 56072909 : seed = seed * 6364136223846793005LL + 1442695040888963407LL;</span>
|
||||
<span class="lineNum"> 32 </span><span class="lineCov"> 56053599 : seed = seed * 6364136223846793005LL + 1442695040888963407LL;</span>
|
||||
<span class="lineNum"> 33 </span> :
|
||||
<span class="lineNum"> 34 </span><span class="lineCov"> 56072909 : return (seed >> 32) % max;</span>
|
||||
<span class="lineNum"> 34 </span><span class="lineCov"> 56053599 : return (seed >> 32) % max;</span>
|
||||
<a name="35"><span class="lineNum"> 35 </span> : }</a>
|
||||
<span class="lineNum"> 36 </span> :
|
||||
<span class="lineNum"> 37 </span><span class="lineCov"> 55661691 : unsigned rndnz(unsigned max)</span>
|
||||
<span class="lineNum"> 37 </span><span class="lineCov"> 55642239 : unsigned rndnz(unsigned max)</span>
|
||||
<span class="lineNum"> 38 </span> : {
|
||||
<span class="lineNum"> 39 </span><span class="lineCov"> 55661691 : if (max <= 1)</span>
|
||||
<span class="lineNum"> 39 </span><span class="lineCov"> 55642239 : if (max <= 1)</span>
|
||||
<span class="lineNum"> 40 </span><span class="lineCov"> 2831 : return 1;</span>
|
||||
<span class="lineNum"> 41 </span> : else
|
||||
<span class="lineNum"> 42 </span><span class="lineCov"> 55658860 : return rnd(max - 1) + 1;</span>
|
||||
<span class="lineNum"> 42 </span><span class="lineCov"> 55639408 : return rnd(max - 1) + 1;</span>
|
||||
<a name="43"><span class="lineNum"> 43 </span> : }</a>
|
||||
<span class="lineNum"> 44 </span> :
|
||||
<span class="lineNum"> 45 </span><span class="lineCov"> 32723 : void rndnz_range(unsigned char* data, int size)</span>
|
||||
<span class="lineNum"> 45 </span><span class="lineCov"> 32684 : void rndnz_range(unsigned char* data, int size)</span>
|
||||
<span class="lineNum"> 46 </span> : {
|
||||
<span class="lineNum"> 47 </span> : int i;
|
||||
<span class="lineNum"> 48 </span> :
|
||||
<span class="lineNum"> 49 </span><span class="lineCov"> 55687651 : for (i = 0; i < size; ++i)</span>
|
||||
<span class="lineNum"> 50 </span><span class="lineCov"> 55654928 : data[i] = rndnz(256);</span>
|
||||
<a name="51"><span class="lineNum"> 51 </span><span class="lineCov"> 32723 : }</span></a>
|
||||
<span class="lineNum"> 49 </span><span class="lineCov"> 55668161 : for (i = 0; i < size; ++i)</span>
|
||||
<span class="lineNum"> 50 </span><span class="lineCov"> 55635477 : data[i] = rndnz(256);</span>
|
||||
<a name="51"><span class="lineNum"> 51 </span><span class="lineCov"> 32684 : }</span></a>
|
||||
<span class="lineNum"> 52 </span> :
|
||||
<span class="lineNum"> 53 </span><span class="lineCov"> 1821 : void rndnz_damage(unsigned char* data, int size)</span>
|
||||
<span class="lineNum"> 54 </span> : {
|
||||
|
|
@ -121,8 +121,8 @@
|
|||
<span class="lineNum"> 59 </span> : unsigned char c;
|
||||
<span class="lineNum"> 60 </span> :
|
||||
<span class="lineNum"> 61 </span> : do {
|
||||
<span class="lineNum"> 62 </span><span class="lineCov"> 1832 : c = rndnz(256);</span>
|
||||
<span class="lineNum"> 63 </span><span class="lineCov"> 1832 : } while (c == data[i]);</span>
|
||||
<span class="lineNum"> 62 </span><span class="lineCov"> 1831 : c = rndnz(256);</span>
|
||||
<span class="lineNum"> 63 </span><span class="lineCov"> 1831 : } while (c == data[i]);</span>
|
||||
<span class="lineNum"> 64 </span> :
|
||||
<span class="lineNum"> 65 </span><span class="lineCov"> 1821 : data[i] = c;</span>
|
||||
<span class="lineNum"> 66 </span> : }
|
||||
|
|
@ -131,23 +131,23 @@
|
|||
<span class="lineNum"> 69 </span> : char CHARSET[] = "qwertyuiopasdfghjklzxcvbnm1234567890 .-+";
|
||||
<a name="70"><span class="lineNum"> 70 </span> : #define CHARSET_LEN (sizeof(CHARSET) - 1)</a>
|
||||
<span class="lineNum"> 71 </span> :
|
||||
<span class="lineNum"> 72 </span><span class="lineCov"> 26849 : void rnd_name(char* file)</span>
|
||||
<span class="lineNum"> 72 </span><span class="lineCov"> 26839 : void rnd_name(char* file)</span>
|
||||
<span class="lineNum"> 73 </span> : {
|
||||
<span class="lineNum"> 74 </span><span class="lineCov"> 26849 : int l = 1 + rnd(20);</span>
|
||||
<span class="lineNum"> 74 </span><span class="lineCov"> 26839 : int l = 1 + rnd(20);</span>
|
||||
<span class="lineNum"> 75 </span> :
|
||||
<span class="lineNum"> 76 </span><span class="lineCov"> 335390 : while (l) {</span>
|
||||
<span class="lineNum"> 77 </span><span class="lineCov"> 281692 : *file++ = CHARSET[rnd(CHARSET_LEN)];</span>
|
||||
<span class="lineNum"> 78 </span><span class="lineCov"> 281692 : --l;</span>
|
||||
<span class="lineNum"> 76 </span><span class="lineCov"> 335505 : while (l) {</span>
|
||||
<span class="lineNum"> 77 </span><span class="lineCov"> 281827 : *file++ = CHARSET[rnd(CHARSET_LEN)];</span>
|
||||
<span class="lineNum"> 78 </span><span class="lineCov"> 281827 : --l;</span>
|
||||
<span class="lineNum"> 79 </span> : }
|
||||
<span class="lineNum"> 80 </span><span class="lineCov"> 26849 : *file = 0;</span>
|
||||
<span class="lineNum"> 81 </span><span class="lineCov"> 26849 : }</span>
|
||||
<span class="lineNum"> 80 </span><span class="lineCov"> 26839 : *file = 0;</span>
|
||||
<span class="lineNum"> 81 </span><span class="lineCov"> 26839 : }</span>
|
||||
<span class="lineNum"> 82 </span> :
|
||||
<span class="lineNum"> 83 </span> : /****************************************************************************/
|
||||
<a name="84"><span class="lineNum"> 84 </span> : /* file */</a>
|
||||
<span class="lineNum"> 85 </span> :
|
||||
<span class="lineNum"> 86 </span><span class="lineCov"> 146571 : int file_cmp(const void* a, const void* b)</span>
|
||||
<span class="lineNum"> 86 </span><span class="lineCov"> 146564 : int file_cmp(const void* a, const void* b)</span>
|
||||
<span class="lineNum"> 87 </span> : {
|
||||
<span class="lineNum"> 88 </span><span class="lineCov"> 146571 : return strcmp(a, b);</span>
|
||||
<span class="lineNum"> 88 </span><span class="lineCov"> 146564 : return strcmp(a, b);</span>
|
||||
<a name="89"><span class="lineNum"> 89 </span> : }</a>
|
||||
<span class="lineNum"> 90 </span> :
|
||||
<span class="lineNum"> 91 </span><span class="lineCov"> 1821 : int fallback(int f, struct stat* st)</span>
|
||||
|
|
@ -259,11 +259,11 @@
|
|||
<span class="lineNum"> 197 </span> : * Create a symlink.
|
||||
<a name="198"><span class="lineNum"> 198 </span> : * - If the file already exists, it's removed.</a>
|
||||
<span class="lineNum"> 199 </span> : */
|
||||
<span class="lineNum"> 200 </span><span class="lineCov"> 940 : void cmd_generate_symlink(const char* path, const char* linkto)</span>
|
||||
<span class="lineNum"> 200 </span><span class="lineCov"> 930 : void cmd_generate_symlink(const char* path, const char* linkto)</span>
|
||||
<span class="lineNum"> 201 </span> : {
|
||||
<span class="lineNum"> 202 </span> : /* remove the existing file/symlink if any */
|
||||
<span class="lineNum"> 203 </span><span class="lineCov"> 940 : if (remove(path) != 0) {</span>
|
||||
<span class="lineNum"> 204 </span><span class="lineCov"> 919 : if (errno != ENOENT) {</span>
|
||||
<span class="lineNum"> 203 </span><span class="lineCov"> 930 : if (remove(path) != 0) {</span>
|
||||
<span class="lineNum"> 204 </span><span class="lineCov"> 909 : if (errno != ENOENT) {</span>
|
||||
<span class="lineNum"> 205 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 206 </span> : log_fatal("Error removing file %s\n", path);
|
||||
<span class="lineNum"> 207 </span> : exit(EXIT_FAILURE);
|
||||
|
|
@ -271,13 +271,13 @@
|
|||
<span class="lineNum"> 209 </span> : }
|
||||
<span class="lineNum"> 210 </span> : }
|
||||
<span class="lineNum"> 211 </span> :
|
||||
<span class="lineNum"> 212 </span><span class="lineCov"> 940 : if (symlink(linkto, path) != 0) {</span>
|
||||
<span class="lineNum"> 212 </span><span class="lineCov"> 930 : if (symlink(linkto, path) != 0) {</span>
|
||||
<span class="lineNum"> 213 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 214 </span> : log_fatal("Error writing symlink %s\n", path);
|
||||
<span class="lineNum"> 215 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 216 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 217 </span> : }
|
||||
<span class="lineNum"> 218 </span><span class="lineCov"> 940 : }</span>
|
||||
<span class="lineNum"> 218 </span><span class="lineCov"> 930 : }</span>
|
||||
<span class="lineNum"> 219 </span> :
|
||||
<span class="lineNum"> 220 </span> : /**
|
||||
<a name="221"><span class="lineNum"> 221 </span> : * Create a file or a symlink with a random name.</a>
|
||||
|
|
@ -350,68 +350,68 @@
|
|||
<span class="lineNum"> 288 </span> : * - The written data may be equal or not at the already existing one.
|
||||
<a name="289"><span class="lineNum"> 289 </span> : * - If it's a symlink nothing is done.</a>
|
||||
<span class="lineNum"> 290 </span> : */
|
||||
<span class="lineNum"> 291 </span><span class="lineCov"> 6227 : void cmd_write(const char* path, int size)</span>
|
||||
<span class="lineNum"> 291 </span><span class="lineCov"> 6251 : void cmd_write(const char* path, int size)</span>
|
||||
<span class="lineNum"> 292 </span> : {
|
||||
<span class="lineNum"> 293 </span> : struct stat st;
|
||||
<span class="lineNum"> 294 </span> :
|
||||
<span class="lineNum"> 295 </span><span class="lineCov"> 6227 : if (lstat(path, &st) != 0) {</span>
|
||||
<span class="lineNum"> 295 </span><span class="lineCov"> 6251 : if (lstat(path, &st) != 0) {</span>
|
||||
<span class="lineNum"> 296 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 297 </span> : log_fatal("Error accessing %s\n", path);
|
||||
<span class="lineNum"> 298 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 299 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 300 </span> : }
|
||||
<span class="lineNum"> 301 </span> :
|
||||
<span class="lineNum"> 302 </span><span class="lineCov"> 6227 : if (S_ISREG(st.st_mode)) {</span>
|
||||
<span class="lineNum"> 302 </span><span class="lineCov"> 6251 : if (S_ISREG(st.st_mode)) {</span>
|
||||
<span class="lineNum"> 303 </span> : unsigned char* data;
|
||||
<span class="lineNum"> 304 </span> : off_t off;
|
||||
<span class="lineNum"> 305 </span> : int f;
|
||||
<span class="lineNum"> 306 </span> :
|
||||
<span class="lineNum"> 307 </span> : /* not over the end */
|
||||
<span class="lineNum"> 308 </span><span class="lineCov"> 6200 : if (size > st.st_size)</span>
|
||||
<span class="lineNum"> 309 </span><span class="lineCov"> 695 : size = st.st_size;</span>
|
||||
<span class="lineNum"> 308 </span><span class="lineCov"> 6224 : if (size > st.st_size)</span>
|
||||
<span class="lineNum"> 309 </span><span class="lineCov"> 696 : size = st.st_size;</span>
|
||||
<span class="lineNum"> 310 </span> :
|
||||
<span class="lineNum"> 311 </span> : /* start at random position inside the file */
|
||||
<span class="lineNum"> 312 </span><span class="lineCov"> 6200 : if (size < st.st_size)</span>
|
||||
<span class="lineNum"> 313 </span><span class="lineCov"> 5504 : off = rnd(st.st_size - size);</span>
|
||||
<span class="lineNum"> 312 </span><span class="lineCov"> 6224 : if (size < st.st_size)</span>
|
||||
<span class="lineNum"> 313 </span><span class="lineCov"> 5526 : off = rnd(st.st_size - size);</span>
|
||||
<span class="lineNum"> 314 </span> : else
|
||||
<span class="lineNum"> 315 </span><span class="lineCov"> 696 : off = 0;</span>
|
||||
<span class="lineNum"> 315 </span><span class="lineCov"> 698 : off = 0;</span>
|
||||
<span class="lineNum"> 316 </span> :
|
||||
<span class="lineNum"> 317 </span><span class="lineCov"> 6200 : data = malloc(size);</span>
|
||||
<span class="lineNum"> 317 </span><span class="lineCov"> 6224 : data = malloc(size);</span>
|
||||
<span class="lineNum"> 318 </span> :
|
||||
<span class="lineNum"> 319 </span><span class="lineCov"> 6200 : rndnz_range(data, size);</span>
|
||||
<span class="lineNum"> 319 </span><span class="lineCov"> 6224 : rndnz_range(data, size);</span>
|
||||
<span class="lineNum"> 320 </span> :
|
||||
<span class="lineNum"> 321 </span><span class="lineCov"> 6200 : f = open(path, O_WRONLY | O_BINARY | O_NOFOLLOW);</span>
|
||||
<span class="lineNum"> 322 </span><span class="lineCov"> 6200 : if (f < 0) {</span>
|
||||
<span class="lineNum"> 321 </span><span class="lineCov"> 6224 : f = open(path, O_WRONLY | O_BINARY | O_NOFOLLOW);</span>
|
||||
<span class="lineNum"> 322 </span><span class="lineCov"> 6224 : if (f < 0) {</span>
|
||||
<span class="lineNum"> 323 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 324 </span> : log_fatal("Error creating file %s\n", path);
|
||||
<span class="lineNum"> 325 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 326 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 327 </span> : }
|
||||
<span class="lineNum"> 328 </span> :
|
||||
<span class="lineNum"> 329 </span><span class="lineCov"> 6200 : if (lseek(f, off, SEEK_SET) != off) {</span>
|
||||
<span class="lineNum"> 329 </span><span class="lineCov"> 6224 : if (lseek(f, off, SEEK_SET) != off) {</span>
|
||||
<span class="lineNum"> 330 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 331 </span> : log_fatal("Error seeking file %s\n", path);
|
||||
<span class="lineNum"> 332 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 333 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 334 </span> : }
|
||||
<span class="lineNum"> 335 </span> :
|
||||
<span class="lineNum"> 336 </span><span class="lineCov"> 6200 : if (write(f, data, size) != size) {</span>
|
||||
<span class="lineNum"> 336 </span><span class="lineCov"> 6224 : if (write(f, data, size) != size) {</span>
|
||||
<span class="lineNum"> 337 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 338 </span> : log_fatal("Error writing file %s\n", path);
|
||||
<span class="lineNum"> 339 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 340 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 341 </span> : }
|
||||
<span class="lineNum"> 342 </span> :
|
||||
<span class="lineNum"> 343 </span><span class="lineCov"> 6200 : if (close(f) != 0) {</span>
|
||||
<span class="lineNum"> 343 </span><span class="lineCov"> 6224 : if (close(f) != 0) {</span>
|
||||
<span class="lineNum"> 344 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 345 </span> : log_fatal("Error closing file %s\n", path);
|
||||
<span class="lineNum"> 346 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 347 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 348 </span> : }
|
||||
<span class="lineNum"> 349 </span> :
|
||||
<span class="lineNum"> 350 </span><span class="lineCov"> 6200 : free(data);</span>
|
||||
<span class="lineNum"> 350 </span><span class="lineCov"> 6224 : free(data);</span>
|
||||
<span class="lineNum"> 351 </span> : }
|
||||
<span class="lineNum"> 352 </span><span class="lineCov"> 6227 : }</span>
|
||||
<span class="lineNum"> 352 </span><span class="lineCov"> 6251 : }</span>
|
||||
<span class="lineNum"> 353 </span> :
|
||||
<span class="lineNum"> 354 </span> : /**
|
||||
<span class="lineNum"> 355 </span> : * Damage a file.
|
||||
|
|
@ -518,50 +518,50 @@
|
|||
<span class="lineNum"> 456 </span> : * - The file must exist.
|
||||
<a name="457"><span class="lineNum"> 457 </span> : * - If it's a symlink nothing is done.</a>
|
||||
<span class="lineNum"> 458 </span> : */
|
||||
<span class="lineNum"> 459 </span><span class="lineCov"> 3256 : void cmd_append(const char* path, int size)</span>
|
||||
<span class="lineNum"> 459 </span><span class="lineCov"> 3193 : void cmd_append(const char* path, int size)</span>
|
||||
<span class="lineNum"> 460 </span> : {
|
||||
<span class="lineNum"> 461 </span> : struct stat st;
|
||||
<span class="lineNum"> 462 </span> :
|
||||
<span class="lineNum"> 463 </span><span class="lineCov"> 3256 : if (lstat(path, &st) != 0) {</span>
|
||||
<span class="lineNum"> 463 </span><span class="lineCov"> 3193 : if (lstat(path, &st) != 0) {</span>
|
||||
<span class="lineNum"> 464 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 465 </span> : log_fatal("Error accessing %s\n", path);
|
||||
<span class="lineNum"> 466 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 467 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 468 </span> : }
|
||||
<span class="lineNum"> 469 </span> :
|
||||
<span class="lineNum"> 470 </span><span class="lineCov"> 3256 : if (S_ISREG(st.st_mode)) {</span>
|
||||
<span class="lineNum"> 470 </span><span class="lineCov"> 3193 : if (S_ISREG(st.st_mode)) {</span>
|
||||
<span class="lineNum"> 471 </span> : unsigned char* data;
|
||||
<span class="lineNum"> 472 </span> : int f;
|
||||
<span class="lineNum"> 473 </span> :
|
||||
<span class="lineNum"> 474 </span><span class="lineCov"> 3256 : data = malloc(size);</span>
|
||||
<span class="lineNum"> 474 </span><span class="lineCov"> 3193 : data = malloc(size);</span>
|
||||
<span class="lineNum"> 475 </span> :
|
||||
<span class="lineNum"> 476 </span><span class="lineCov"> 3256 : rndnz_range(data, size);</span>
|
||||
<span class="lineNum"> 476 </span><span class="lineCov"> 3193 : rndnz_range(data, size);</span>
|
||||
<span class="lineNum"> 477 </span> :
|
||||
<span class="lineNum"> 478 </span><span class="lineCov"> 3256 : f = open(path, O_WRONLY | O_APPEND | O_BINARY | O_NOFOLLOW);</span>
|
||||
<span class="lineNum"> 479 </span><span class="lineCov"> 3256 : if (f < 0) {</span>
|
||||
<span class="lineNum"> 478 </span><span class="lineCov"> 3193 : f = open(path, O_WRONLY | O_APPEND | O_BINARY | O_NOFOLLOW);</span>
|
||||
<span class="lineNum"> 479 </span><span class="lineCov"> 3193 : if (f < 0) {</span>
|
||||
<span class="lineNum"> 480 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 481 </span> : log_fatal("Error opening file %s\n", path);
|
||||
<span class="lineNum"> 482 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 483 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 484 </span> : }
|
||||
<span class="lineNum"> 485 </span> :
|
||||
<span class="lineNum"> 486 </span><span class="lineCov"> 3256 : if (write(f, data, size) != size) {</span>
|
||||
<span class="lineNum"> 486 </span><span class="lineCov"> 3193 : if (write(f, data, size) != size) {</span>
|
||||
<span class="lineNum"> 487 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 488 </span> : log_fatal("Error writing file %s\n", path);
|
||||
<span class="lineNum"> 489 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 490 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 491 </span> : }
|
||||
<span class="lineNum"> 492 </span> :
|
||||
<span class="lineNum"> 493 </span><span class="lineCov"> 3256 : if (close(f) != 0) {</span>
|
||||
<span class="lineNum"> 493 </span><span class="lineCov"> 3193 : if (close(f) != 0) {</span>
|
||||
<span class="lineNum"> 494 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 495 </span> : log_fatal("Error closing file %s\n", path);
|
||||
<span class="lineNum"> 496 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 497 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 498 </span> : }
|
||||
<span class="lineNum"> 499 </span> :
|
||||
<span class="lineNum"> 500 </span><span class="lineCov"> 3256 : free(data);</span>
|
||||
<span class="lineNum"> 500 </span><span class="lineCov"> 3193 : free(data);</span>
|
||||
<span class="lineNum"> 501 </span> : }
|
||||
<span class="lineNum"> 502 </span><span class="lineCov"> 3256 : }</span>
|
||||
<span class="lineNum"> 502 </span><span class="lineCov"> 3193 : }</span>
|
||||
<span class="lineNum"> 503 </span> :
|
||||
<span class="lineNum"> 504 </span> : /**
|
||||
<span class="lineNum"> 505 </span> : * Truncate a file.
|
||||
|
|
@ -569,69 +569,69 @@
|
|||
<span class="lineNum"> 507 </span> : * - The file is NEVER truncated to 0.
|
||||
<a name="508"><span class="lineNum"> 508 </span> : * - If it's a symlink nothing is done.</a>
|
||||
<span class="lineNum"> 509 </span> : */
|
||||
<span class="lineNum"> 510 </span><span class="lineCov"> 3141 : void cmd_truncate(const char* path, int size)</span>
|
||||
<span class="lineNum"> 510 </span><span class="lineCov"> 3103 : void cmd_truncate(const char* path, int size)</span>
|
||||
<span class="lineNum"> 511 </span> : {
|
||||
<span class="lineNum"> 512 </span> : struct stat st;
|
||||
<span class="lineNum"> 513 </span> :
|
||||
<span class="lineNum"> 514 </span><span class="lineCov"> 3141 : if (lstat(path, &st) != 0) {</span>
|
||||
<span class="lineNum"> 514 </span><span class="lineCov"> 3103 : if (lstat(path, &st) != 0) {</span>
|
||||
<span class="lineNum"> 515 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 516 </span> : log_fatal("Error accessing %s\n", path);
|
||||
<span class="lineNum"> 517 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 518 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 519 </span> : }
|
||||
<span class="lineNum"> 520 </span> :
|
||||
<span class="lineNum"> 521 </span><span class="lineCov"> 3141 : if (S_ISREG(st.st_mode)) {</span>
|
||||
<span class="lineNum"> 521 </span><span class="lineCov"> 3103 : if (S_ISREG(st.st_mode)) {</span>
|
||||
<span class="lineNum"> 522 </span> : off_t off;
|
||||
<span class="lineNum"> 523 </span> : int f;
|
||||
<span class="lineNum"> 524 </span> :
|
||||
<span class="lineNum"> 525 </span> : /* if file is empty, just rewrite it */
|
||||
<span class="lineNum"> 526 </span><span class="lineCov"> 3141 : if (st.st_size == 0) {</span>
|
||||
<span class="lineNum"> 527 </span><span class="lineCov"> 1 : size = 0;</span>
|
||||
<span class="lineNum"> 526 </span><span class="lineCov"> 3103 : if (st.st_size == 0) {</span>
|
||||
<span class="lineNum"> 527 </span><span class="lineCov"> 3 : size = 0;</span>
|
||||
<span class="lineNum"> 528 </span> : } else {
|
||||
<span class="lineNum"> 529 </span> : /* don't truncate files to 0 size to avoid ZERO file size protection */
|
||||
<span class="lineNum"> 530 </span><span class="lineCov"> 3140 : if (size >= st.st_size)</span>
|
||||
<span class="lineNum"> 531 </span><span class="lineCov"> 200 : size = st.st_size - 1;</span>
|
||||
<span class="lineNum"> 530 </span><span class="lineCov"> 3100 : if (size >= st.st_size)</span>
|
||||
<span class="lineNum"> 531 </span><span class="lineCov"> 195 : size = st.st_size - 1;</span>
|
||||
<span class="lineNum"> 532 </span> : }
|
||||
<span class="lineNum"> 533 </span> :
|
||||
<span class="lineNum"> 534 </span><span class="lineCov"> 3141 : off = st.st_size - size;</span>
|
||||
<span class="lineNum"> 534 </span><span class="lineCov"> 3103 : off = st.st_size - size;</span>
|
||||
<span class="lineNum"> 535 </span> :
|
||||
<span class="lineNum"> 536 </span><span class="lineCov"> 3141 : f = open(path, O_WRONLY | O_BINARY | O_NOFOLLOW);</span>
|
||||
<span class="lineNum"> 537 </span><span class="lineCov"> 3141 : if (f < 0) {</span>
|
||||
<span class="lineNum"> 536 </span><span class="lineCov"> 3103 : f = open(path, O_WRONLY | O_BINARY | O_NOFOLLOW);</span>
|
||||
<span class="lineNum"> 537 </span><span class="lineCov"> 3103 : if (f < 0) {</span>
|
||||
<span class="lineNum"> 538 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 539 </span> : log_fatal("Error opening file %s\n", path);
|
||||
<span class="lineNum"> 540 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 541 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 542 </span> : }
|
||||
<span class="lineNum"> 543 </span> :
|
||||
<span class="lineNum"> 544 </span><span class="lineCov"> 3141 : if (ftruncate(f, off) != 0) {</span>
|
||||
<span class="lineNum"> 544 </span><span class="lineCov"> 3103 : if (ftruncate(f, off) != 0) {</span>
|
||||
<span class="lineNum"> 545 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 546 </span> : log_fatal("Error truncating file %s\n", path);
|
||||
<span class="lineNum"> 547 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 548 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 549 </span> : }
|
||||
<span class="lineNum"> 550 </span> :
|
||||
<span class="lineNum"> 551 </span><span class="lineCov"> 3141 : if (close(f) != 0) {</span>
|
||||
<span class="lineNum"> 551 </span><span class="lineCov"> 3103 : if (close(f) != 0) {</span>
|
||||
<span class="lineNum"> 552 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 553 </span> : log_fatal("Error closing file %s\n", path);
|
||||
<span class="lineNum"> 554 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 555 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 556 </span> : }
|
||||
<span class="lineNum"> 557 </span> : }
|
||||
<span class="lineNum"> 558 </span><span class="lineCov"> 3141 : }</span>
|
||||
<span class="lineNum"> 558 </span><span class="lineCov"> 3103 : }</span>
|
||||
<span class="lineNum"> 559 </span> :
|
||||
<span class="lineNum"> 560 </span> : /**
|
||||
<span class="lineNum"> 561 </span> : * Delete a file.
|
||||
<a name="562"><span class="lineNum"> 562 </span> : * - The file must exist.</a>
|
||||
<span class="lineNum"> 563 </span> : */
|
||||
<span class="lineNum"> 564 </span><span class="lineCov"> 3136 : void cmd_delete(const char* path)</span>
|
||||
<span class="lineNum"> 564 </span><span class="lineCov"> 3207 : void cmd_delete(const char* path)</span>
|
||||
<span class="lineNum"> 565 </span> : {
|
||||
<span class="lineNum"> 566 </span><span class="lineCov"> 3136 : if (remove(path) != 0) {</span>
|
||||
<span class="lineNum"> 566 </span><span class="lineCov"> 3207 : if (remove(path) != 0) {</span>
|
||||
<span class="lineNum"> 567 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 568 </span> : log_fatal("Error removing %s\n", path);
|
||||
<span class="lineNum"> 569 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 570 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 571 </span> : }
|
||||
<span class="lineNum"> 572 </span><span class="lineCov"> 3136 : }</span>
|
||||
<span class="lineNum"> 572 </span><span class="lineCov"> 3207 : }</span>
|
||||
<span class="lineNum"> 573 </span> :
|
||||
<span class="lineNum"> 574 </span> : /**
|
||||
<span class="lineNum"> 575 </span> : * Change a file. Or deleted/truncated/append/created.
|
||||
|
|
@ -642,20 +642,20 @@
|
|||
<span class="lineNum"> 580 </span> : struct stat st;
|
||||
<span class="lineNum"> 581 </span> :
|
||||
<span class="lineNum"> 582 </span><span class="lineCov"> 13128 : if (!size)</span>
|
||||
<span class="lineNum"> 583 </span><span class="lineCov"> 13152 : return;</span>
|
||||
<span class="lineNum"> 583 </span><span class="lineCov"> 13157 : return;</span>
|
||||
<span class="lineNum"> 584 </span> :
|
||||
<span class="lineNum"> 585 </span><span class="lineCov"> 13104 : if (lstat(path, &st) != 0) {</span>
|
||||
<span class="lineNum"> 585 </span><span class="lineCov"> 13099 : if (lstat(path, &st) != 0) {</span>
|
||||
<span class="lineNum"> 586 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 587 </span> : log_fatal("Error accessing %s\n", path);
|
||||
<span class="lineNum"> 588 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 589 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 590 </span> : }
|
||||
<span class="lineNum"> 591 </span> :
|
||||
<span class="lineNum"> 592 </span><span class="lineCov"> 13104 : if (S_ISLNK(st.st_mode)) {</span>
|
||||
<span class="lineNum"> 592 </span><span class="lineCov"> 13099 : if (S_ISLNK(st.st_mode)) {</span>
|
||||
<span class="lineNum"> 593 </span> : /* symlink */
|
||||
<span class="lineNum"> 594 </span><span class="lineCov"> 393 : if (rnd(2) == 0) {</span>
|
||||
<span class="lineNum"> 594 </span><span class="lineCov"> 394 : if (rnd(2) == 0) {</span>
|
||||
<span class="lineNum"> 595 </span> : /* delete */
|
||||
<span class="lineNum"> 596 </span><span class="lineCov"> 186 : if (remove(path) != 0) {</span>
|
||||
<span class="lineNum"> 596 </span><span class="lineCov"> 197 : if (remove(path) != 0) {</span>
|
||||
<span class="lineNum"> 597 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 598 </span> : log_fatal("Error removing %s\n", path);
|
||||
<span class="lineNum"> 599 </span> : exit(EXIT_FAILURE);
|
||||
|
|
@ -665,30 +665,30 @@
|
|||
<span class="lineNum"> 603 </span> : /* recreate */
|
||||
<span class="lineNum"> 604 </span> : char linkto[PATH_MAX];
|
||||
<span class="lineNum"> 605 </span> :
|
||||
<span class="lineNum"> 606 </span><span class="lineCov"> 207 : if (remove(path) != 0) {</span>
|
||||
<span class="lineNum"> 606 </span><span class="lineCov"> 197 : if (remove(path) != 0) {</span>
|
||||
<span class="lineNum"> 607 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 608 </span> : log_fatal("Error removing %s\n", path);
|
||||
<span class="lineNum"> 609 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 610 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 611 </span> : }
|
||||
<span class="lineNum"> 612 </span> :
|
||||
<span class="lineNum"> 613 </span><span class="lineCov"> 207 : rnd_name(linkto);</span>
|
||||
<span class="lineNum"> 613 </span><span class="lineCov"> 197 : rnd_name(linkto);</span>
|
||||
<span class="lineNum"> 614 </span> :
|
||||
<span class="lineNum"> 615 </span><span class="lineCov"> 207 : cmd_generate_symlink(path, linkto);</span>
|
||||
<span class="lineNum"> 615 </span><span class="lineCov"> 197 : cmd_generate_symlink(path, linkto);</span>
|
||||
<span class="lineNum"> 616 </span> : }
|
||||
<span class="lineNum"> 617 </span><span class="lineCov"> 12711 : } else if (S_ISREG(st.st_mode)) {</span>
|
||||
<span class="lineNum"> 617 </span><span class="lineCov"> 12705 : } else if (S_ISREG(st.st_mode)) {</span>
|
||||
<span class="lineNum"> 618 </span> : int r;
|
||||
<span class="lineNum"> 619 </span> :
|
||||
<span class="lineNum"> 620 </span><span class="lineCov"> 12711 : r = rnd(4);</span>
|
||||
<span class="lineNum"> 620 </span><span class="lineCov"> 12705 : r = rnd(4);</span>
|
||||
<span class="lineNum"> 621 </span> :
|
||||
<span class="lineNum"> 622 </span><span class="lineCov"> 12711 : if (r == 0) {</span>
|
||||
<span class="lineNum"> 623 </span><span class="lineCov"> 3178 : cmd_write(path, size);</span>
|
||||
<span class="lineNum"> 624 </span><span class="lineCov"> 9533 : } else if (r == 1) {</span>
|
||||
<span class="lineNum"> 625 </span><span class="lineCov"> 3256 : cmd_append(path, size);</span>
|
||||
<span class="lineNum"> 626 </span><span class="lineCov"> 6277 : } else if (r == 2) {</span>
|
||||
<span class="lineNum"> 627 </span><span class="lineCov"> 3141 : cmd_truncate(path, size);</span>
|
||||
<span class="lineNum"> 622 </span><span class="lineCov"> 12705 : if (r == 0) {</span>
|
||||
<span class="lineNum"> 623 </span><span class="lineCov"> 3202 : cmd_write(path, size);</span>
|
||||
<span class="lineNum"> 624 </span><span class="lineCov"> 9503 : } else if (r == 1) {</span>
|
||||
<span class="lineNum"> 625 </span><span class="lineCov"> 3193 : cmd_append(path, size);</span>
|
||||
<span class="lineNum"> 626 </span><span class="lineCov"> 6310 : } else if (r == 2) {</span>
|
||||
<span class="lineNum"> 627 </span><span class="lineCov"> 3103 : cmd_truncate(path, size);</span>
|
||||
<span class="lineNum"> 628 </span> : } else {
|
||||
<span class="lineNum"> 629 </span><span class="lineCov"> 3136 : cmd_delete(path);</span>
|
||||
<span class="lineNum"> 629 </span><span class="lineCov"> 3207 : cmd_delete(path);</span>
|
||||
<span class="lineNum"> 630 </span> : }
|
||||
<span class="lineNum"> 631 </span> : }
|
||||
<a name="632"><span class="lineNum"> 632 </span> : }</a>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">2</td>
|
||||
|
|
@ -61,11 +61,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="murmur3.c.gcov.html#30">fmix32</a></td>
|
||||
<td class="coverFnHi">8307408</td>
|
||||
<td class="coverFnHi">8307428</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="murmur3.c.gcov.html#76">MurmurHash3_x86_128</a></td>
|
||||
<td class="coverFnHi">2076852</td>
|
||||
<td class="coverFnHi">2076857</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">2</td>
|
||||
|
|
@ -61,11 +61,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="murmur3.c.gcov.html#76">MurmurHash3_x86_128</a></td>
|
||||
<td class="coverFnHi">2076852</td>
|
||||
<td class="coverFnHi">2076857</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="murmur3.c.gcov.html#30">fmix32</a></td>
|
||||
<td class="coverFnHi">8307408</td>
|
||||
<td class="coverFnHi">8307428</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">2</td>
|
||||
|
|
@ -91,14 +91,14 @@
|
|||
<span class="lineNum"> 29 </span> : // domain. The author hereby disclaims copyright to this source code.
|
||||
<a name="30"><span class="lineNum"> 30 </span> : </a>
|
||||
<span class="lineNum"> 31 </span> : /* Finalization mix - force all bits of a hash block to avalanche */
|
||||
<span class="lineNum"> 32 </span><span class="lineCov"> 8307408 : static inline uint32_t fmix32(uint32_t h)</span>
|
||||
<span class="lineNum"> 32 </span><span class="lineCov"> 8307428 : static inline uint32_t fmix32(uint32_t h)</span>
|
||||
<span class="lineNum"> 33 </span> : {
|
||||
<span class="lineNum"> 34 </span><span class="lineCov"> 8307408 : h ^= h >> 16;</span>
|
||||
<span class="lineNum"> 35 </span><span class="lineCov"> 8307408 : h *= 0x85ebca6b;</span>
|
||||
<span class="lineNum"> 36 </span><span class="lineCov"> 8307408 : h ^= h >> 13;</span>
|
||||
<span class="lineNum"> 37 </span><span class="lineCov"> 8307408 : h *= 0xc2b2ae35;</span>
|
||||
<span class="lineNum"> 38 </span><span class="lineCov"> 8307408 : h ^= h >> 16;</span>
|
||||
<span class="lineNum"> 39 </span><span class="lineCov"> 8307408 : return h;</span>
|
||||
<span class="lineNum"> 34 </span><span class="lineCov"> 8307428 : h ^= h >> 16;</span>
|
||||
<span class="lineNum"> 35 </span><span class="lineCov"> 8307428 : h *= 0x85ebca6b;</span>
|
||||
<span class="lineNum"> 36 </span><span class="lineCov"> 8307428 : h ^= h >> 13;</span>
|
||||
<span class="lineNum"> 37 </span><span class="lineCov"> 8307428 : h *= 0xc2b2ae35;</span>
|
||||
<span class="lineNum"> 38 </span><span class="lineCov"> 8307428 : h ^= h >> 16;</span>
|
||||
<span class="lineNum"> 39 </span><span class="lineCov"> 8307428 : return h;</span>
|
||||
<span class="lineNum"> 40 </span> : }
|
||||
<span class="lineNum"> 41 </span> :
|
||||
<span class="lineNum"> 42 </span> : /*
|
||||
|
|
@ -137,7 +137,7 @@
|
|||
<span class="lineNum"> 75 </span> : uint32_t c3 = 0x38b34ae5;
|
||||
<a name="76"><span class="lineNum"> 76 </span> : uint32_t c4 = 0xa1e38b93;</a>
|
||||
<span class="lineNum"> 77 </span> :
|
||||
<span class="lineNum"> 78 </span><span class="lineCov"> 2076852 : void MurmurHash3_x86_128(const void* data, size_t size, const uint8_t* seed, void* digest)</span>
|
||||
<span class="lineNum"> 78 </span><span class="lineCov"> 2076857 : void MurmurHash3_x86_128(const void* data, size_t size, const uint8_t* seed, void* digest)</span>
|
||||
<span class="lineNum"> 79 </span> : {
|
||||
<span class="lineNum"> 80 </span> : size_t nblocks;
|
||||
<span class="lineNum"> 81 </span> : const uint32_t* blocks;
|
||||
|
|
@ -145,21 +145,21 @@
|
|||
<span class="lineNum"> 83 </span> : size_t size_remainder;
|
||||
<span class="lineNum"> 84 </span> : uint32_t h1, h2, h3, h4;
|
||||
<span class="lineNum"> 85 </span> :
|
||||
<span class="lineNum"> 86 </span><span class="lineCov"> 2076852 : h1 = util_read32(seed + 0);</span>
|
||||
<span class="lineNum"> 87 </span><span class="lineCov"> 2076852 : h2 = util_read32(seed + 4);</span>
|
||||
<span class="lineNum"> 88 </span><span class="lineCov"> 2076852 : h3 = util_read32(seed + 8);</span>
|
||||
<span class="lineNum"> 89 </span><span class="lineCov"> 2076852 : h4 = util_read32(seed + 12);</span>
|
||||
<span class="lineNum"> 86 </span><span class="lineCov"> 2076857 : h1 = util_read32(seed + 0);</span>
|
||||
<span class="lineNum"> 87 </span><span class="lineCov"> 2076857 : h2 = util_read32(seed + 4);</span>
|
||||
<span class="lineNum"> 88 </span><span class="lineCov"> 2076857 : h3 = util_read32(seed + 8);</span>
|
||||
<span class="lineNum"> 89 </span><span class="lineCov"> 2076857 : h4 = util_read32(seed + 12);</span>
|
||||
<span class="lineNum"> 90 </span> :
|
||||
<span class="lineNum"> 91 </span><span class="lineCov"> 2076852 : nblocks = size / 16;</span>
|
||||
<span class="lineNum"> 92 </span><span class="lineCov"> 2076852 : blocks = data;</span>
|
||||
<span class="lineNum"> 93 </span><span class="lineCov"> 2076852 : end = blocks + nblocks * 4;</span>
|
||||
<span class="lineNum"> 91 </span><span class="lineCov"> 2076857 : nblocks = size / 16;</span>
|
||||
<span class="lineNum"> 92 </span><span class="lineCov"> 2076857 : blocks = data;</span>
|
||||
<span class="lineNum"> 93 </span><span class="lineCov"> 2076857 : end = blocks + nblocks * 4;</span>
|
||||
<span class="lineNum"> 94 </span> :
|
||||
<span class="lineNum"> 95 </span> : /* body */
|
||||
<span class="lineNum"> 96 </span><span class="lineCov"> 110684486 : while (blocks < end) {</span>
|
||||
<span class="lineNum"> 97 </span><span class="lineCov"> 106530782 : uint32_t k1 = blocks[0];</span>
|
||||
<span class="lineNum"> 98 </span><span class="lineCov"> 106530782 : uint32_t k2 = blocks[1];</span>
|
||||
<span class="lineNum"> 99 </span><span class="lineCov"> 106530782 : uint32_t k3 = blocks[2];</span>
|
||||
<span class="lineNum"> 100 </span><span class="lineCov"> 106530782 : uint32_t k4 = blocks[3];</span>
|
||||
<span class="lineNum"> 96 </span><span class="lineCov"> 110684757 : while (blocks < end) {</span>
|
||||
<span class="lineNum"> 97 </span><span class="lineCov"> 106531043 : uint32_t k1 = blocks[0];</span>
|
||||
<span class="lineNum"> 98 </span><span class="lineCov"> 106531043 : uint32_t k2 = blocks[1];</span>
|
||||
<span class="lineNum"> 99 </span><span class="lineCov"> 106531043 : uint32_t k3 = blocks[2];</span>
|
||||
<span class="lineNum"> 100 </span><span class="lineCov"> 106531043 : uint32_t k4 = blocks[3];</span>
|
||||
<span class="lineNum"> 101 </span> :
|
||||
<span class="lineNum"> 102 </span> : #if WORDS_BIGENDIAN
|
||||
<span class="lineNum"> 103 </span> : k1 = util_swap32(k1);
|
||||
|
|
@ -168,77 +168,77 @@
|
|||
<span class="lineNum"> 106 </span> : k4 = util_swap32(k4);
|
||||
<span class="lineNum"> 107 </span> : #endif
|
||||
<span class="lineNum"> 108 </span> :
|
||||
<span class="lineNum"> 109 </span><span class="lineCov"> 106530782 : k1 *= c1; k1 = util_rotl32(k1, 15); k1 *= c2; h1 ^= k1;</span>
|
||||
<span class="lineNum"> 109 </span><span class="lineCov"> 106531043 : k1 *= c1; k1 = util_rotl32(k1, 15); k1 *= c2; h1 ^= k1;</span>
|
||||
<span class="lineNum"> 110 </span> :
|
||||
<span class="lineNum"> 111 </span><span class="lineCov"> 106530782 : h1 = util_rotl32(h1, 19); h1 += h2; h1 = h1 * 5 + 0x561ccd1b;</span>
|
||||
<span class="lineNum"> 111 </span><span class="lineCov"> 106531043 : h1 = util_rotl32(h1, 19); h1 += h2; h1 = h1 * 5 + 0x561ccd1b;</span>
|
||||
<span class="lineNum"> 112 </span> :
|
||||
<span class="lineNum"> 113 </span><span class="lineCov"> 106530782 : k2 *= c2; k2 = util_rotl32(k2, 16); k2 *= c3; h2 ^= k2;</span>
|
||||
<span class="lineNum"> 113 </span><span class="lineCov"> 106531043 : k2 *= c2; k2 = util_rotl32(k2, 16); k2 *= c3; h2 ^= k2;</span>
|
||||
<span class="lineNum"> 114 </span> :
|
||||
<span class="lineNum"> 115 </span><span class="lineCov"> 106530782 : h2 = util_rotl32(h2, 17); h2 += h3; h2 = h2 * 5 + 0x0bcaa747;</span>
|
||||
<span class="lineNum"> 115 </span><span class="lineCov"> 106531043 : h2 = util_rotl32(h2, 17); h2 += h3; h2 = h2 * 5 + 0x0bcaa747;</span>
|
||||
<span class="lineNum"> 116 </span> :
|
||||
<span class="lineNum"> 117 </span><span class="lineCov"> 106530782 : k3 *= c3; k3 = util_rotl32(k3, 17); k3 *= c4; h3 ^= k3;</span>
|
||||
<span class="lineNum"> 117 </span><span class="lineCov"> 106531043 : k3 *= c3; k3 = util_rotl32(k3, 17); k3 *= c4; h3 ^= k3;</span>
|
||||
<span class="lineNum"> 118 </span> :
|
||||
<span class="lineNum"> 119 </span><span class="lineCov"> 106530782 : h3 = util_rotl32(h3, 15); h3 += h4; h3 = h3 * 5 + 0x96cd1c35;</span>
|
||||
<span class="lineNum"> 119 </span><span class="lineCov"> 106531043 : h3 = util_rotl32(h3, 15); h3 += h4; h3 = h3 * 5 + 0x96cd1c35;</span>
|
||||
<span class="lineNum"> 120 </span> :
|
||||
<span class="lineNum"> 121 </span><span class="lineCov"> 106530782 : k4 *= c4; k4 = util_rotl32(k4, 18); k4 *= c1; h4 ^= k4;</span>
|
||||
<span class="lineNum"> 121 </span><span class="lineCov"> 106531043 : k4 *= c4; k4 = util_rotl32(k4, 18); k4 *= c1; h4 ^= k4;</span>
|
||||
<span class="lineNum"> 122 </span> :
|
||||
<span class="lineNum"> 123 </span><span class="lineCov"> 106530782 : h4 = util_rotl32(h4, 13); h4 += h1; h4 = h4 * 5 + 0x32ac3b17;</span>
|
||||
<span class="lineNum"> 123 </span><span class="lineCov"> 106531043 : h4 = util_rotl32(h4, 13); h4 += h1; h4 = h4 * 5 + 0x32ac3b17;</span>
|
||||
<span class="lineNum"> 124 </span> :
|
||||
<span class="lineNum"> 125 </span><span class="lineCov"> 106530782 : blocks += 4;</span>
|
||||
<span class="lineNum"> 125 </span><span class="lineCov"> 106531043 : blocks += 4;</span>
|
||||
<span class="lineNum"> 126 </span> : }
|
||||
<span class="lineNum"> 127 </span> :
|
||||
<span class="lineNum"> 128 </span> : /* tail */
|
||||
<span class="lineNum"> 129 </span><span class="lineCov"> 2076852 : size_remainder = size & 15;</span>
|
||||
<span class="lineNum"> 130 </span><span class="lineCov"> 2076852 : if (size_remainder != 0) {</span>
|
||||
<span class="lineNum"> 131 </span><span class="lineCov"> 779223 : const uint8_t* tail = (const uint8_t*)blocks;</span>
|
||||
<span class="lineNum"> 129 </span><span class="lineCov"> 2076857 : size_remainder = size & 15;</span>
|
||||
<span class="lineNum"> 130 </span><span class="lineCov"> 2076857 : if (size_remainder != 0) {</span>
|
||||
<span class="lineNum"> 131 </span><span class="lineCov"> 779280 : const uint8_t* tail = (const uint8_t*)blocks;</span>
|
||||
<span class="lineNum"> 132 </span> :
|
||||
<span class="lineNum"> 133 </span><span class="lineCov"> 779223 : uint32_t k1 = 0;</span>
|
||||
<span class="lineNum"> 134 </span><span class="lineCov"> 779223 : uint32_t k2 = 0;</span>
|
||||
<span class="lineNum"> 135 </span><span class="lineCov"> 779223 : uint32_t k3 = 0;</span>
|
||||
<span class="lineNum"> 136 </span><span class="lineCov"> 779223 : uint32_t k4 = 0;</span>
|
||||
<span class="lineNum"> 133 </span><span class="lineCov"> 779280 : uint32_t k1 = 0;</span>
|
||||
<span class="lineNum"> 134 </span><span class="lineCov"> 779280 : uint32_t k2 = 0;</span>
|
||||
<span class="lineNum"> 135 </span><span class="lineCov"> 779280 : uint32_t k3 = 0;</span>
|
||||
<span class="lineNum"> 136 </span><span class="lineCov"> 779280 : uint32_t k4 = 0;</span>
|
||||
<span class="lineNum"> 137 </span> :
|
||||
<span class="lineNum"> 138 </span><span class="lineCov"> 779223 : switch (size_remainder) {</span>
|
||||
<span class="lineNum"> 139 </span><span class="lineCov"> 51253 : case 15 : k4 ^= (uint32_t)tail[14] << 16;</span>
|
||||
<span class="lineNum"> 140 </span><span class="lineCov"> 103976 : case 14 : k4 ^= (uint32_t)tail[13] << 8;</span>
|
||||
<span class="lineNum"> 141 </span><span class="lineCov"> 156183 : case 13 : k4 ^= (uint32_t)tail[12] << 0;</span>
|
||||
<span class="lineNum"> 142 </span><span class="lineCov"> 156183 : k4 *= c4; k4 = util_rotl32(k4, 18); k4 *= c1; h4 ^= k4;</span>
|
||||
<span class="lineNum"> 143 </span><span class="lineCov"> 208955 : case 12 : k3 ^= (uint32_t)tail[11] << 24;</span>
|
||||
<span class="lineNum"> 144 </span><span class="lineCov"> 261477 : case 11 : k3 ^= (uint32_t)tail[10] << 16;</span>
|
||||
<span class="lineNum"> 145 </span><span class="lineCov"> 313646 : case 10 : k3 ^= (uint32_t)tail[ 9] << 8;</span>
|
||||
<span class="lineNum"> 146 </span><span class="lineCov"> 366950 : case 9 : k3 ^= (uint32_t)tail[ 8] << 0;</span>
|
||||
<span class="lineNum"> 147 </span><span class="lineCov"> 366950 : k3 *= c3; k3 = util_rotl32(k3, 17); k3 *= c4; h3 ^= k3;</span>
|
||||
<span class="lineNum"> 148 </span><span class="lineCov"> 420888 : case 8 : k2 ^= (uint32_t)tail[ 7] << 24;</span>
|
||||
<span class="lineNum"> 149 </span><span class="lineCov"> 470405 : case 7 : k2 ^= (uint32_t)tail[ 6] << 16;</span>
|
||||
<span class="lineNum"> 150 </span><span class="lineCov"> 523044 : case 6 : k2 ^= (uint32_t)tail[ 5] << 8;</span>
|
||||
<span class="lineNum"> 151 </span><span class="lineCov"> 573538 : case 5 : k2 ^= (uint32_t)tail[ 4] << 0;</span>
|
||||
<span class="lineNum"> 152 </span><span class="lineCov"> 573538 : k2 *= c2; k2 = util_rotl32(k2, 16); k2 *= c3; h2 ^= k2;</span>
|
||||
<span class="lineNum"> 153 </span><span class="lineCov"> 625492 : case 4 : k1 ^= (uint32_t)tail[ 3] << 24;</span>
|
||||
<span class="lineNum"> 154 </span><span class="lineCov"> 675841 : case 3 : k1 ^= (uint32_t)tail[ 2] << 16;</span>
|
||||
<span class="lineNum"> 155 </span><span class="lineCov"> 726916 : case 2 : k1 ^= (uint32_t)tail[ 1] << 8;</span>
|
||||
<span class="lineNum"> 156 </span><span class="lineCov"> 779223 : case 1 : k1 ^= (uint32_t)tail[ 0] << 0;</span>
|
||||
<span class="lineNum"> 157 </span><span class="lineCov"> 779223 : k1 *= c1; k1 = util_rotl32(k1, 15); k1 *= c2; h1 ^= k1;</span>
|
||||
<span class="lineNum"> 138 </span><span class="lineCov"> 779280 : switch (size_remainder) {</span>
|
||||
<span class="lineNum"> 139 </span><span class="lineCov"> 51283 : case 15 : k4 ^= (uint32_t)tail[14] << 16;</span>
|
||||
<span class="lineNum"> 140 </span><span class="lineCov"> 104014 : case 14 : k4 ^= (uint32_t)tail[13] << 8;</span>
|
||||
<span class="lineNum"> 141 </span><span class="lineCov"> 156219 : case 13 : k4 ^= (uint32_t)tail[12] << 0;</span>
|
||||
<span class="lineNum"> 142 </span><span class="lineCov"> 156219 : k4 *= c4; k4 = util_rotl32(k4, 18); k4 *= c1; h4 ^= k4;</span>
|
||||
<span class="lineNum"> 143 </span><span class="lineCov"> 208972 : case 12 : k3 ^= (uint32_t)tail[11] << 24;</span>
|
||||
<span class="lineNum"> 144 </span><span class="lineCov"> 261514 : case 11 : k3 ^= (uint32_t)tail[10] << 16;</span>
|
||||
<span class="lineNum"> 145 </span><span class="lineCov"> 313715 : case 10 : k3 ^= (uint32_t)tail[ 9] << 8;</span>
|
||||
<span class="lineNum"> 146 </span><span class="lineCov"> 366995 : case 9 : k3 ^= (uint32_t)tail[ 8] << 0;</span>
|
||||
<span class="lineNum"> 147 </span><span class="lineCov"> 366995 : k3 *= c3; k3 = util_rotl32(k3, 17); k3 *= c4; h3 ^= k3;</span>
|
||||
<span class="lineNum"> 148 </span><span class="lineCov"> 420927 : case 8 : k2 ^= (uint32_t)tail[ 7] << 24;</span>
|
||||
<span class="lineNum"> 149 </span><span class="lineCov"> 470437 : case 7 : k2 ^= (uint32_t)tail[ 6] << 16;</span>
|
||||
<span class="lineNum"> 150 </span><span class="lineCov"> 523081 : case 6 : k2 ^= (uint32_t)tail[ 5] << 8;</span>
|
||||
<span class="lineNum"> 151 </span><span class="lineCov"> 573603 : case 5 : k2 ^= (uint32_t)tail[ 4] << 0;</span>
|
||||
<span class="lineNum"> 152 </span><span class="lineCov"> 573603 : k2 *= c2; k2 = util_rotl32(k2, 16); k2 *= c3; h2 ^= k2;</span>
|
||||
<span class="lineNum"> 153 </span><span class="lineCov"> 625568 : case 4 : k1 ^= (uint32_t)tail[ 3] << 24;</span>
|
||||
<span class="lineNum"> 154 </span><span class="lineCov"> 675931 : case 3 : k1 ^= (uint32_t)tail[ 2] << 16;</span>
|
||||
<span class="lineNum"> 155 </span><span class="lineCov"> 726990 : case 2 : k1 ^= (uint32_t)tail[ 1] << 8;</span>
|
||||
<span class="lineNum"> 156 </span><span class="lineCov"> 779280 : case 1 : k1 ^= (uint32_t)tail[ 0] << 0;</span>
|
||||
<span class="lineNum"> 157 </span><span class="lineCov"> 779280 : k1 *= c1; k1 = util_rotl32(k1, 15); k1 *= c2; h1 ^= k1;</span>
|
||||
<span class="lineNum"> 158 </span> : }
|
||||
<span class="lineNum"> 159 </span> : }
|
||||
<span class="lineNum"> 160 </span> :
|
||||
<span class="lineNum"> 161 </span> : /* finalization */
|
||||
<span class="lineNum"> 162 </span><span class="lineCov"> 2076852 : h1 ^= size; h2 ^= size; h3 ^= size; h4 ^= size;</span>
|
||||
<span class="lineNum"> 162 </span><span class="lineCov"> 2076857 : h1 ^= size; h2 ^= size; h3 ^= size; h4 ^= size;</span>
|
||||
<span class="lineNum"> 163 </span> :
|
||||
<span class="lineNum"> 164 </span><span class="lineCov"> 2076852 : h1 += h2; h1 += h3; h1 += h4;</span>
|
||||
<span class="lineNum"> 165 </span><span class="lineCov"> 2076852 : h2 += h1; h3 += h1; h4 += h1;</span>
|
||||
<span class="lineNum"> 164 </span><span class="lineCov"> 2076857 : h1 += h2; h1 += h3; h1 += h4;</span>
|
||||
<span class="lineNum"> 165 </span><span class="lineCov"> 2076857 : h2 += h1; h3 += h1; h4 += h1;</span>
|
||||
<span class="lineNum"> 166 </span> :
|
||||
<span class="lineNum"> 167 </span><span class="lineCov"> 2076852 : h1 = fmix32(h1);</span>
|
||||
<span class="lineNum"> 168 </span><span class="lineCov"> 2076852 : h2 = fmix32(h2);</span>
|
||||
<span class="lineNum"> 169 </span><span class="lineCov"> 2076852 : h3 = fmix32(h3);</span>
|
||||
<span class="lineNum"> 170 </span><span class="lineCov"> 2076852 : h4 = fmix32(h4);</span>
|
||||
<span class="lineNum"> 167 </span><span class="lineCov"> 2076857 : h1 = fmix32(h1);</span>
|
||||
<span class="lineNum"> 168 </span><span class="lineCov"> 2076857 : h2 = fmix32(h2);</span>
|
||||
<span class="lineNum"> 169 </span><span class="lineCov"> 2076857 : h3 = fmix32(h3);</span>
|
||||
<span class="lineNum"> 170 </span><span class="lineCov"> 2076857 : h4 = fmix32(h4);</span>
|
||||
<span class="lineNum"> 171 </span> :
|
||||
<span class="lineNum"> 172 </span><span class="lineCov"> 2076852 : h1 += h2; h1 += h3; h1 += h4;</span>
|
||||
<span class="lineNum"> 173 </span><span class="lineCov"> 2076852 : h2 += h1; h3 += h1; h4 += h1;</span>
|
||||
<span class="lineNum"> 172 </span><span class="lineCov"> 2076857 : h1 += h2; h1 += h3; h1 += h4;</span>
|
||||
<span class="lineNum"> 173 </span><span class="lineCov"> 2076857 : h2 += h1; h3 += h1; h4 += h1;</span>
|
||||
<span class="lineNum"> 174 </span> :
|
||||
<span class="lineNum"> 175 </span><span class="lineCov"> 2076852 : util_write32(digest + 0, h1);</span>
|
||||
<span class="lineNum"> 176 </span><span class="lineCov"> 2076852 : util_write32(digest + 4, h2);</span>
|
||||
<span class="lineNum"> 177 </span><span class="lineCov"> 2076852 : util_write32(digest + 8, h3);</span>
|
||||
<span class="lineNum"> 178 </span><span class="lineCov"> 2076852 : util_write32(digest + 12, h4);</span>
|
||||
<span class="lineNum"> 179 </span><span class="lineCov"> 2076852 : }</span>
|
||||
<span class="lineNum"> 175 </span><span class="lineCov"> 2076857 : util_write32(digest + 0, h1);</span>
|
||||
<span class="lineNum"> 176 </span><span class="lineCov"> 2076857 : util_write32(digest + 4, h2);</span>
|
||||
<span class="lineNum"> 177 </span><span class="lineCov"> 2076857 : util_write32(digest + 8, h3);</span>
|
||||
<span class="lineNum"> 178 </span><span class="lineCov"> 2076857 : util_write32(digest + 12, h4);</span>
|
||||
<span class="lineNum"> 179 </span><span class="lineCov"> 2076857 : }</span>
|
||||
<span class="lineNum"> 180 </span> :
|
||||
</pre>
|
||||
</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">18</td>
|
||||
|
|
@ -61,15 +61,15 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="parity.c.gcov.html#765">parity_split_find</a></td>
|
||||
<td class="coverFnHi">4113807</td>
|
||||
<td class="coverFnHi">4114072</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="parity.c.gcov.html#824">parity_read</a></td>
|
||||
<td class="coverFnHi">3501819</td>
|
||||
<td class="coverFnHi">3501740</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="parity.c.gcov.html#784">parity_write</a></td>
|
||||
<td class="coverFnHi">611983</td>
|
||||
<td class="coverFnHi">612363</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="parity.c.gcov.html#457">parity_handle_chsize</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">18</td>
|
||||
|
|
@ -109,7 +109,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="parity.c.gcov.html#824">parity_read</a></td>
|
||||
<td class="coverFnHi">3501819</td>
|
||||
<td class="coverFnHi">3501740</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="parity.c.gcov.html#158">parity_size</a></td>
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="parity.c.gcov.html#765">parity_split_find</a></td>
|
||||
<td class="coverFnHi">4113807</td>
|
||||
<td class="coverFnHi">4114072</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="parity.c.gcov.html#506">parity_split_is_fixed</a></td>
|
||||
|
|
@ -133,7 +133,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="parity.c.gcov.html#784">parity_write</a></td>
|
||||
<td class="coverFnHi">611983</td>
|
||||
<td class="coverFnHi">612363</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">18</td>
|
||||
|
|
@ -135,8 +135,8 @@
|
|||
<span class="lineNum"> 73 </span><span class="lineCov"> 521 : block_off_t block = fs_size(disk);</span>
|
||||
<span class="lineNum"> 74 </span> :
|
||||
<span class="lineNum"> 75 </span> : /* decrease the block until an used one */
|
||||
<span class="lineNum"> 76 </span><span class="lineCov"> 221718 : while (block > parity_block && !block_has_file_and_valid_parity(fs_par2block_find(disk, block - 1)))</span>
|
||||
<span class="lineNum"> 77 </span><span class="lineCov"> 220676 : --block;</span>
|
||||
<span class="lineNum"> 76 </span><span class="lineCov"> 221719 : while (block > parity_block && !block_has_file_and_valid_parity(fs_par2block_find(disk, block - 1)))</span>
|
||||
<span class="lineNum"> 77 </span><span class="lineCov"> 220677 : --block;</span>
|
||||
<span class="lineNum"> 78 </span> :
|
||||
<span class="lineNum"> 79 </span> : /* get the highest value */
|
||||
<span class="lineNum"> 80 </span><span class="lineCov"> 521 : if (block > parity_block)</span>
|
||||
|
|
@ -826,44 +826,44 @@
|
|||
<span class="lineNum"> 764 </span><span class="lineCov"> 1022 : return f_ret;</span>
|
||||
<a name="765"><span class="lineNum"> 765 </span> : }</a>
|
||||
<span class="lineNum"> 766 </span> :
|
||||
<span class="lineNum"> 767 </span><span class="lineCov"> 4113807 : struct snapraid_split_handle* parity_split_find(struct snapraid_parity_handle* handle, data_off_t* offset)</span>
|
||||
<span class="lineNum"> 767 </span><span class="lineCov"> 4114072 : struct snapraid_split_handle* parity_split_find(struct snapraid_parity_handle* handle, data_off_t* offset)</span>
|
||||
<span class="lineNum"> 768 </span> : {
|
||||
<span class="lineNum"> 769 </span> : unsigned s;
|
||||
<span class="lineNum"> 770 </span> :
|
||||
<span class="lineNum"> 771 </span><span class="lineCov"> 4113807 : if (*offset < 0)</span>
|
||||
<span class="lineNum"> 771 </span><span class="lineCov"> 4114072 : if (*offset < 0)</span>
|
||||
<span class="lineNum"> 772 </span><span class="lineNoCov"> 0 : return 0;</span>
|
||||
<span class="lineNum"> 773 </span> :
|
||||
<span class="lineNum"> 774 </span><span class="lineCov"> 6502165 : for (s = 0;s < handle->split_mac;++s) {</span>
|
||||
<span class="lineNum"> 775 </span><span class="lineCov"> 6490805 : struct snapraid_split_handle* split = &handle->split_map[s];</span>
|
||||
<span class="lineNum"> 774 </span><span class="lineCov"> 6502675 : for (s = 0;s < handle->split_mac;++s) {</span>
|
||||
<span class="lineNum"> 775 </span><span class="lineCov"> 6491315 : struct snapraid_split_handle* split = &handle->split_map[s];</span>
|
||||
<span class="lineNum"> 776 </span> :
|
||||
<span class="lineNum"> 777 </span><span class="lineCov"> 6490805 : if (*offset < split->size)</span>
|
||||
<span class="lineNum"> 778 </span><span class="lineCov"> 4102447 : return split;</span>
|
||||
<span class="lineNum"> 777 </span><span class="lineCov"> 6491315 : if (*offset < split->size)</span>
|
||||
<span class="lineNum"> 778 </span><span class="lineCov"> 4102712 : return split;</span>
|
||||
<span class="lineNum"> 779 </span> :
|
||||
<span class="lineNum"> 780 </span><span class="lineCov"> 2388358 : *offset -= split->size;</span>
|
||||
<span class="lineNum"> 780 </span><span class="lineCov"> 2388603 : *offset -= split->size;</span>
|
||||
<span class="lineNum"> 781 </span> : }
|
||||
<span class="lineNum"> 782 </span> :
|
||||
<span class="lineNum"> 783 </span><span class="lineCov"> 11360 : return 0;</span>
|
||||
<a name="784"><span class="lineNum"> 784 </span> : }</a>
|
||||
<span class="lineNum"> 785 </span> :
|
||||
<span class="lineNum"> 786 </span><span class="lineCov"> 611983 : int parity_write(struct snapraid_parity_handle* handle, block_off_t pos, unsigned char* block_buffer, unsigned block_size)</span>
|
||||
<span class="lineNum"> 786 </span><span class="lineCov"> 612363 : int parity_write(struct snapraid_parity_handle* handle, block_off_t pos, unsigned char* block_buffer, unsigned block_size)</span>
|
||||
<span class="lineNum"> 787 </span> : {
|
||||
<span class="lineNum"> 788 </span> : ssize_t write_ret;
|
||||
<span class="lineNum"> 789 </span> : data_off_t offset;
|
||||
<span class="lineNum"> 790 </span> : struct snapraid_split_handle* split;
|
||||
<span class="lineNum"> 791 </span> : int ret;
|
||||
<span class="lineNum"> 792 </span> :
|
||||
<span class="lineNum"> 793 </span><span class="lineCov"> 611983 : offset = pos * (data_off_t)block_size;</span>
|
||||
<span class="lineNum"> 793 </span><span class="lineCov"> 612363 : offset = pos * (data_off_t)block_size;</span>
|
||||
<span class="lineNum"> 794 </span> :
|
||||
<span class="lineNum"> 795 </span><span class="lineCov"> 611983 : split = parity_split_find(handle, &offset);</span>
|
||||
<span class="lineNum"> 796 </span><span class="lineCov"> 611984 : if (!split) {</span>
|
||||
<span class="lineNum"> 795 </span><span class="lineCov"> 612363 : split = parity_split_find(handle, &offset);</span>
|
||||
<span class="lineNum"> 796 </span><span class="lineCov"> 612400 : if (!split) {</span>
|
||||
<span class="lineNum"> 797 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 798 </span> : log_fatal("Writing parity data outside range at extra offset %" PRIu64 ".\n", offset);
|
||||
<span class="lineNum"> 799 </span> : return -1;
|
||||
<span class="lineNum"> 800 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 801 </span> : }
|
||||
<span class="lineNum"> 802 </span> :
|
||||
<span class="lineNum"> 803 </span><span class="lineCov"> 611984 : write_ret = pwrite(split->f, block_buffer, block_size, offset);</span>
|
||||
<span class="lineNum"> 804 </span><span class="lineCov"> 611983 : if (write_ret != (ssize_t)block_size) { /* conversion is safe because block_size is always small */</span>
|
||||
<span class="lineNum"> 803 </span><span class="lineCov"> 612400 : write_ret = pwrite(split->f, block_buffer, block_size, offset);</span>
|
||||
<span class="lineNum"> 804 </span><span class="lineCov"> 612277 : if (write_ret != (ssize_t)block_size) { /* conversion is safe because block_size is always small */</span>
|
||||
<span class="lineNum"> 805 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 806 </span> : if (errno == ENOSPC) {
|
||||
<span class="lineNum"> 807 </span> : log_fatal("Failed to grow parity file '%s' using write due lack of space.\n", split->path);
|
||||
|
|
@ -874,18 +874,18 @@
|
|||
<span class="lineNum"> 812 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 813 </span> : }
|
||||
<span class="lineNum"> 814 </span> :
|
||||
<span class="lineNum"> 815 </span><span class="lineCov"> 611983 : ret = advise_write(&split->advise, split->f, offset, block_size);</span>
|
||||
<span class="lineNum"> 816 </span><span class="lineCov"> 611981 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 815 </span><span class="lineCov"> 612277 : ret = advise_write(&split->advise, split->f, offset, block_size);</span>
|
||||
<span class="lineNum"> 816 </span><span class="lineCov"> 612100 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 817 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 818 </span> : log_fatal("Error advising parity file '%s'. %s.\n", split->path, strerror(errno));
|
||||
<span class="lineNum"> 819 </span> : return -1;
|
||||
<span class="lineNum"> 820 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 821 </span> : }
|
||||
<span class="lineNum"> 822 </span> :
|
||||
<span class="lineNum"> 823 </span><span class="lineCov"> 611981 : return 0;</span>
|
||||
<span class="lineNum"> 823 </span><span class="lineCov"> 612100 : return 0;</span>
|
||||
<a name="824"><span class="lineNum"> 824 </span> : }</a>
|
||||
<span class="lineNum"> 825 </span> :
|
||||
<span class="lineNum"> 826 </span><span class="lineCov"> 3501819 : int parity_read(struct snapraid_parity_handle* handle, block_off_t pos, unsigned char* block_buffer, unsigned block_size, fptr* out)</span>
|
||||
<span class="lineNum"> 826 </span><span class="lineCov"> 3501740 : int parity_read(struct snapraid_parity_handle* handle, block_off_t pos, unsigned char* block_buffer, unsigned block_size, fptr* out)</span>
|
||||
<span class="lineNum"> 827 </span> : {
|
||||
<span class="lineNum"> 828 </span> : ssize_t read_ret;
|
||||
<span class="lineNum"> 829 </span> : data_off_t offset;
|
||||
|
|
@ -893,44 +893,44 @@
|
|||
<span class="lineNum"> 831 </span> : struct snapraid_split_handle* split;
|
||||
<span class="lineNum"> 832 </span> : int ret;
|
||||
<span class="lineNum"> 833 </span> :
|
||||
<span class="lineNum"> 834 </span><span class="lineCov"> 3501819 : offset = pos * (data_off_t)block_size;</span>
|
||||
<span class="lineNum"> 834 </span><span class="lineCov"> 3501740 : offset = pos * (data_off_t)block_size;</span>
|
||||
<span class="lineNum"> 835 </span> :
|
||||
<span class="lineNum"> 836 </span><span class="lineCov"> 3501819 : split = parity_split_find(handle, &offset);</span>
|
||||
<span class="lineNum"> 837 </span><span class="lineCov"> 3501808 : if (!split) {</span>
|
||||
<span class="lineNum"> 836 </span><span class="lineCov"> 3501740 : split = parity_split_find(handle, &offset);</span>
|
||||
<span class="lineNum"> 837 </span><span class="lineCov"> 3501789 : if (!split) {</span>
|
||||
<span class="lineNum"> 838 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 839 </span> : out("Reading parity data outside range at extra offset %" PRIu64 ".\n", offset);
|
||||
<span class="lineNum"> 840 </span> : return -1;
|
||||
<span class="lineNum"> 841 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 842 </span> : }
|
||||
<span class="lineNum"> 843 </span> :
|
||||
<span class="lineNum"> 844 </span><span class="lineCov"> 3490448 : count = 0;</span>
|
||||
<span class="lineNum"> 844 </span><span class="lineCov"> 3490429 : count = 0;</span>
|
||||
<span class="lineNum"> 845 </span> : do {
|
||||
<span class="lineNum"> 846 </span><span class="lineCov"> 3490446 : read_ret = pread(split->f, block_buffer + count, block_size - count, offset + count);</span>
|
||||
<span class="lineNum"> 847 </span><span class="lineCov"> 3490413 : if (read_ret < 0) {</span>
|
||||
<span class="lineNum"> 846 </span><span class="lineCov"> 3490283 : read_ret = pread(split->f, block_buffer + count, block_size - count, offset + count);</span>
|
||||
<span class="lineNum"> 847 </span><span class="lineCov"> 3490289 : if (read_ret < 0) {</span>
|
||||
<span class="lineNum"> 848 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 849 </span> : out("Error reading file '%s' at offset %" PRIu64 " for size %u. %s.\n", split->path, offset + count, block_size - count, strerror(errno));
|
||||
<span class="lineNum"> 850 </span> : return -1;
|
||||
<span class="lineNum"> 851 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 852 </span> : }
|
||||
<span class="lineNum"> 853 </span><span class="lineCov"> 3490413 : if (read_ret == 0) {</span>
|
||||
<span class="lineNum"> 853 </span><span class="lineCov"> 3490289 : if (read_ret == 0) {</span>
|
||||
<span class="lineNum"> 854 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 855 </span> : out("Unexpected end of file '%s' at offset %" PRIu64 ". %s.\n", split->path, offset, strerror(errno));
|
||||
<span class="lineNum"> 856 </span> : return -1;
|
||||
<span class="lineNum"> 857 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 858 </span> : }
|
||||
<span class="lineNum"> 859 </span> :
|
||||
<span class="lineNum"> 860 </span><span class="lineCov"> 3490413 : count += read_ret;</span>
|
||||
<span class="lineNum"> 861 </span><span class="lineCov"> 3490413 : } while (count < block_size);</span>
|
||||
<span class="lineNum"> 860 </span><span class="lineCov"> 3490289 : count += read_ret;</span>
|
||||
<span class="lineNum"> 861 </span><span class="lineCov"> 3490289 : } while (count < block_size);</span>
|
||||
<span class="lineNum"> 862 </span> :
|
||||
<span class="lineNum"> 863 </span><span class="lineCov"> 3490415 : ret = advise_read(&split->advise, split->f, offset, block_size);</span>
|
||||
<span class="lineNum"> 864 </span><span class="lineCov"> 3490417 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 863 </span><span class="lineCov"> 3490435 : ret = advise_read(&split->advise, split->f, offset, block_size);</span>
|
||||
<span class="lineNum"> 864 </span><span class="lineCov"> 3490346 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 865 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 866 </span> : out("Error advising parity file '%s'. %s.\n", split->path, strerror(errno));
|
||||
<span class="lineNum"> 867 </span> : return -1;
|
||||
<span class="lineNum"> 868 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 869 </span> : }
|
||||
<span class="lineNum"> 870 </span> :
|
||||
<span class="lineNum"> 871 </span><span class="lineCov"> 3490417 : return block_size;</span>
|
||||
<span class="lineNum"> 871 </span><span class="lineCov"> 3490346 : return block_size;</span>
|
||||
<span class="lineNum"> 872 </span> : }
|
||||
<span class="lineNum"> 873 </span> :
|
||||
</pre>
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">64</td>
|
||||
<td class="headerCovTableEntry">68</td>
|
||||
<td class="headerCovTableEntryHi">94.1 %</td>
|
||||
<td class="headerCovTableEntry">67</td>
|
||||
<td class="headerCovTableEntry">71</td>
|
||||
<td class="headerCovTableEntryHi">94.4 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">3</td>
|
||||
|
|
@ -68,7 +68,7 @@
|
|||
<td class="coverFnHi">5</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="pool.c.gcov.html#199">state_pool</a></td>
|
||||
<td class="coverFn"><a href="pool.c.gcov.html#209">state_pool</a></td>
|
||||
<td class="coverFnHi">3</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">64</td>
|
||||
<td class="headerCovTableEntry">68</td>
|
||||
<td class="headerCovTableEntryHi">94.1 %</td>
|
||||
<td class="headerCovTableEntry">67</td>
|
||||
<td class="headerCovTableEntry">71</td>
|
||||
<td class="headerCovTableEntryHi">94.4 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">3</td>
|
||||
|
|
@ -68,7 +68,7 @@
|
|||
<td class="coverFnHi">17589</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="pool.c.gcov.html#199">state_pool</a></td>
|
||||
<td class="coverFn"><a href="pool.c.gcov.html#209">state_pool</a></td>
|
||||
<td class="coverFnHi">3</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">64</td>
|
||||
<td class="headerCovTableEntry">68</td>
|
||||
<td class="headerCovTableEntryHi">94.1 %</td>
|
||||
<td class="headerCovTableEntry">67</td>
|
||||
<td class="headerCovTableEntry">71</td>
|
||||
<td class="headerCovTableEntryHi">94.4 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">3</td>
|
||||
|
|
@ -209,7 +209,7 @@
|
|||
<span class="lineNum"> 147 </span> : /**
|
||||
<a name="148"><span class="lineNum"> 148 </span> : * Create a link to the specified disk entry.</a>
|
||||
<span class="lineNum"> 149 </span> : */
|
||||
<span class="lineNum"> 150 </span><span class="lineCov"> 17589 : static void make_link(const char* pool_dir, const char* share_dir, struct snapraid_disk* disk, const char* sub)</span>
|
||||
<span class="lineNum"> 150 </span><span class="lineCov"> 17589 : static void make_link(const char* pool_dir, const char* share_dir, struct snapraid_disk* disk, const char* sub, int64_t mtime_sec, int mtime_nsec)</span>
|
||||
<span class="lineNum"> 151 </span> : {
|
||||
<span class="lineNum"> 152 </span> : char path[PATH_MAX];
|
||||
<span class="lineNum"> 153 </span> : char linkto[PATH_MAX];
|
||||
|
|
@ -258,70 +258,80 @@
|
|||
<span class="lineNum"> 196 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 197 </span> : }
|
||||
<span class="lineNum"> 198 </span> : }
|
||||
<a name="199"><span class="lineNum"> 199 </span><span class="lineCov"> 17589 : }</span></a>
|
||||
<span class="lineNum"> 200 </span> :
|
||||
<span class="lineNum"> 201 </span><span class="lineCov"> 3 : void state_pool(struct snapraid_state* state)</span>
|
||||
<span class="lineNum"> 202 </span> : {
|
||||
<span class="lineNum"> 203 </span> : tommy_node* i;
|
||||
<span class="lineNum"> 204 </span> : char pool_dir[PATH_MAX];
|
||||
<span class="lineNum"> 205 </span> : char share_dir[PATH_MAX];
|
||||
<span class="lineNum"> 206 </span> : unsigned count;
|
||||
<span class="lineNum"> 207 </span> :
|
||||
<span class="lineNum"> 208 </span><span class="lineCov"> 3 : if (state->pool[0] == 0) {</span>
|
||||
<span class="lineNum"> 209 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 210 </span> : log_fatal("To use the 'pool' command you must set the pool directory in the configuration file\n");
|
||||
<span class="lineNum"> 211 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 212 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 213 </span> : }
|
||||
<span class="lineNum"> 214 </span> :
|
||||
<span class="lineNum"> 215 </span><span class="lineCov"> 3 : msg_progress("Cleaning...\n");</span>
|
||||
<span class="lineNum"> 216 </span> :
|
||||
<span class="lineNum"> 217 </span> : /* pool directory with final slash */
|
||||
<span class="lineNum"> 218 </span><span class="lineCov"> 3 : pathprint(pool_dir, sizeof(pool_dir), "%s", state->pool);</span>
|
||||
<span class="lineNum"> 219 </span><span class="lineCov"> 3 : pathslash(pool_dir, sizeof(pool_dir));</span>
|
||||
<span class="lineNum"> 220 </span> :
|
||||
<span class="lineNum"> 221 </span> : /* share directory with final slash */
|
||||
<span class="lineNum"> 222 </span><span class="lineCov"> 3 : pathprint(share_dir, sizeof(share_dir), "%s", state->share);</span>
|
||||
<span class="lineNum"> 223 </span><span class="lineCov"> 3 : pathslash(share_dir, sizeof(share_dir));</span>
|
||||
<span class="lineNum"> 199 </span> :
|
||||
<span class="lineNum"> 200 </span><span class="lineCov"> 17589 : if (mtime_sec) {</span>
|
||||
<span class="lineNum"> 201 </span><span class="lineCov"> 17000 : ret = lmtime(path, mtime_sec, mtime_nsec);</span>
|
||||
<span class="lineNum"> 202 </span><span class="lineCov"> 17000 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 203 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 204 </span> : log_fatal("Error setting time to symlink '%s'. %s.\n", path, strerror(errno));
|
||||
<span class="lineNum"> 205 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 206 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 207 </span> : }
|
||||
<span class="lineNum"> 208 </span> : }
|
||||
<a name="209"><span class="lineNum"> 209 </span><span class="lineCov"> 17589 : }</span></a>
|
||||
<span class="lineNum"> 210 </span> :
|
||||
<span class="lineNum"> 211 </span><span class="lineCov"> 3 : void state_pool(struct snapraid_state* state)</span>
|
||||
<span class="lineNum"> 212 </span> : {
|
||||
<span class="lineNum"> 213 </span> : tommy_node* i;
|
||||
<span class="lineNum"> 214 </span> : char pool_dir[PATH_MAX];
|
||||
<span class="lineNum"> 215 </span> : char share_dir[PATH_MAX];
|
||||
<span class="lineNum"> 216 </span> : unsigned count;
|
||||
<span class="lineNum"> 217 </span> :
|
||||
<span class="lineNum"> 218 </span><span class="lineCov"> 3 : if (state->pool[0] == 0) {</span>
|
||||
<span class="lineNum"> 219 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 220 </span> : log_fatal("To use the 'pool' command you must set the pool directory in the configuration file\n");
|
||||
<span class="lineNum"> 221 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 222 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 223 </span> : }
|
||||
<span class="lineNum"> 224 </span> :
|
||||
<span class="lineNum"> 225 </span> : /* first clear the previous pool tree */
|
||||
<span class="lineNum"> 226 </span><span class="lineCov"> 3 : clean_dir(state, pool_dir);</span>
|
||||
<span class="lineNum"> 227 </span> :
|
||||
<span class="lineNum"> 228 </span><span class="lineCov"> 3 : msg_progress("Pooling...\n");</span>
|
||||
<span class="lineNum"> 229 </span> :
|
||||
<span class="lineNum"> 230 </span> : /* for each disk */
|
||||
<span class="lineNum"> 231 </span><span class="lineCov"> 3 : count = 0;</span>
|
||||
<span class="lineNum"> 232 </span><span class="lineCov"> 21 : for (i = state->disklist; i != 0; i = i->next) {</span>
|
||||
<span class="lineNum"> 233 </span> : tommy_node* j;
|
||||
<span class="lineNum"> 234 </span><span class="lineCov"> 18 : struct snapraid_disk* disk = i->data;</span>
|
||||
<span class="lineNum"> 235 </span> :
|
||||
<span class="lineNum"> 236 </span> : /* for each file */
|
||||
<span class="lineNum"> 237 </span><span class="lineCov"> 17018 : for (j = disk->filelist; j != 0; j = j->next) {</span>
|
||||
<span class="lineNum"> 238 </span><span class="lineCov"> 17000 : struct snapraid_file* file = j->data;</span>
|
||||
<span class="lineNum"> 239 </span><span class="lineCov"> 17000 : make_link(pool_dir, share_dir, disk, file->sub);</span>
|
||||
<span class="lineNum"> 240 </span><span class="lineCov"> 17000 : ++count;</span>
|
||||
<span class="lineNum"> 241 </span> : }
|
||||
<span class="lineNum"> 242 </span> :
|
||||
<span class="lineNum"> 243 </span> : /* for each link */
|
||||
<span class="lineNum"> 244 </span><span class="lineCov"> 607 : for (j = disk->linklist; j != 0; j = j->next) {</span>
|
||||
<span class="lineNum"> 245 </span><span class="lineCov"> 589 : struct snapraid_link* slink = j->data;</span>
|
||||
<span class="lineNum"> 246 </span><span class="lineCov"> 589 : make_link(pool_dir, share_dir, disk, slink->sub);</span>
|
||||
<span class="lineNum"> 247 </span><span class="lineCov"> 589 : ++count;</span>
|
||||
<span class="lineNum"> 248 </span> : }
|
||||
<span class="lineNum"> 249 </span> :
|
||||
<span class="lineNum"> 250 </span> : /* we ignore empty dirs in disk->dir */
|
||||
<span class="lineNum"> 251 </span> : }
|
||||
<span class="lineNum"> 225 </span><span class="lineCov"> 3 : msg_progress("Cleaning...\n");</span>
|
||||
<span class="lineNum"> 226 </span> :
|
||||
<span class="lineNum"> 227 </span> : /* pool directory with final slash */
|
||||
<span class="lineNum"> 228 </span><span class="lineCov"> 3 : pathprint(pool_dir, sizeof(pool_dir), "%s", state->pool);</span>
|
||||
<span class="lineNum"> 229 </span><span class="lineCov"> 3 : pathslash(pool_dir, sizeof(pool_dir));</span>
|
||||
<span class="lineNum"> 230 </span> :
|
||||
<span class="lineNum"> 231 </span> : /* share directory with final slash */
|
||||
<span class="lineNum"> 232 </span><span class="lineCov"> 3 : pathprint(share_dir, sizeof(share_dir), "%s", state->share);</span>
|
||||
<span class="lineNum"> 233 </span><span class="lineCov"> 3 : pathslash(share_dir, sizeof(share_dir));</span>
|
||||
<span class="lineNum"> 234 </span> :
|
||||
<span class="lineNum"> 235 </span> : /* first clear the previous pool tree */
|
||||
<span class="lineNum"> 236 </span><span class="lineCov"> 3 : clean_dir(state, pool_dir);</span>
|
||||
<span class="lineNum"> 237 </span> :
|
||||
<span class="lineNum"> 238 </span><span class="lineCov"> 3 : msg_progress("Pooling...\n");</span>
|
||||
<span class="lineNum"> 239 </span> :
|
||||
<span class="lineNum"> 240 </span> : /* for each disk */
|
||||
<span class="lineNum"> 241 </span><span class="lineCov"> 3 : count = 0;</span>
|
||||
<span class="lineNum"> 242 </span><span class="lineCov"> 21 : for (i = state->disklist; i != 0; i = i->next) {</span>
|
||||
<span class="lineNum"> 243 </span> : tommy_node* j;
|
||||
<span class="lineNum"> 244 </span><span class="lineCov"> 18 : struct snapraid_disk* disk = i->data;</span>
|
||||
<span class="lineNum"> 245 </span> :
|
||||
<span class="lineNum"> 246 </span> : /* for each file */
|
||||
<span class="lineNum"> 247 </span><span class="lineCov"> 17018 : for (j = disk->filelist; j != 0; j = j->next) {</span>
|
||||
<span class="lineNum"> 248 </span><span class="lineCov"> 17000 : struct snapraid_file* file = j->data;</span>
|
||||
<span class="lineNum"> 249 </span><span class="lineCov"> 17000 : make_link(pool_dir, share_dir, disk, file->sub, file->mtime_sec, file->mtime_nsec);</span>
|
||||
<span class="lineNum"> 250 </span><span class="lineCov"> 17000 : ++count;</span>
|
||||
<span class="lineNum"> 251 </span> : }
|
||||
<span class="lineNum"> 252 </span> :
|
||||
<span class="lineNum"> 253 </span><span class="lineCov"> 3 : if (count)</span>
|
||||
<span class="lineNum"> 254 </span><span class="lineCov"> 2 : msg_status("%u links created\n", count);</span>
|
||||
<span class="lineNum"> 255 </span> : else
|
||||
<span class="lineNum"> 256 </span><span class="lineCov"> 1 : msg_status("No link created\n");</span>
|
||||
<span class="lineNum"> 257 </span> :
|
||||
<span class="lineNum"> 258 </span><span class="lineCov"> 3 : log_tag("summary:link_count::%u\n", count);</span>
|
||||
<span class="lineNum"> 259 </span><span class="lineCov"> 3 : log_tag("summary:exit:ok\n");</span>
|
||||
<span class="lineNum"> 260 </span><span class="lineCov"> 3 : log_flush();</span>
|
||||
<span class="lineNum"> 261 </span><span class="lineCov"> 3 : }</span>
|
||||
<span class="lineNum"> 253 </span> : /* for each link */
|
||||
<span class="lineNum"> 254 </span><span class="lineCov"> 607 : for (j = disk->linklist; j != 0; j = j->next) {</span>
|
||||
<span class="lineNum"> 255 </span><span class="lineCov"> 589 : struct snapraid_link* slink = j->data;</span>
|
||||
<span class="lineNum"> 256 </span><span class="lineCov"> 589 : make_link(pool_dir, share_dir, disk, slink->sub, 0, 0);</span>
|
||||
<span class="lineNum"> 257 </span><span class="lineCov"> 589 : ++count;</span>
|
||||
<span class="lineNum"> 258 </span> : }
|
||||
<span class="lineNum"> 259 </span> :
|
||||
<span class="lineNum"> 260 </span> : /* we ignore empty dirs in disk->dir */
|
||||
<span class="lineNum"> 261 </span> : }
|
||||
<span class="lineNum"> 262 </span> :
|
||||
<span class="lineNum"> 263 </span><span class="lineCov"> 3 : if (count)</span>
|
||||
<span class="lineNum"> 264 </span><span class="lineCov"> 2 : msg_status("%u links created\n", count);</span>
|
||||
<span class="lineNum"> 265 </span> : else
|
||||
<span class="lineNum"> 266 </span><span class="lineCov"> 1 : msg_status("No link created\n");</span>
|
||||
<span class="lineNum"> 267 </span> :
|
||||
<span class="lineNum"> 268 </span><span class="lineCov"> 3 : log_tag("summary:link_count::%u\n", count);</span>
|
||||
<span class="lineNum"> 269 </span><span class="lineCov"> 3 : log_tag("summary:exit:ok\n");</span>
|
||||
<span class="lineNum"> 270 </span><span class="lineCov"> 3 : log_flush();</span>
|
||||
<span class="lineNum"> 271 </span><span class="lineCov"> 3 : }</span>
|
||||
<span class="lineNum"> 272 </span> :
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
@ -60,7 +60,7 @@
|
|||
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="portable.h.gcov.html#297">hardlink</a></td>
|
||||
<td class="coverFn"><a href="portable.h.gcov.html#303">hardlink</a></td>
|
||||
<td class="coverFnHi">12</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
@ -60,7 +60,7 @@
|
|||
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="portable.h.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="portable.h.gcov.html#297">hardlink</a></td>
|
||||
<td class="coverFn"><a href="portable.h.gcov.html#303">hardlink</a></td>
|
||||
<td class="coverFnHi">12</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
@ -260,292 +260,298 @@
|
|||
<span class="lineNum"> 198 </span> : #include <sys/types.h>
|
||||
<span class="lineNum"> 199 </span> : #endif
|
||||
<span class="lineNum"> 200 </span> :
|
||||
<span class="lineNum"> 201 </span> : #if HAVE_SYS_STAT_H
|
||||
<span class="lineNum"> 202 </span> : #include <sys/stat.h>
|
||||
<span class="lineNum"> 203 </span> : #endif
|
||||
<span class="lineNum"> 204 </span> :
|
||||
<span class="lineNum"> 205 </span> : #if HAVE_SYS_WAIT_H
|
||||
<span class="lineNum"> 206 </span> : #include <sys/wait.h>
|
||||
<span class="lineNum"> 207 </span> : #endif
|
||||
<span class="lineNum"> 208 </span> : #ifndef WEXITSTATUS
|
||||
<span class="lineNum"> 209 </span> : #define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
|
||||
<span class="lineNum"> 210 </span> : #endif
|
||||
<span class="lineNum"> 211 </span> : #ifndef WIFEXITED
|
||||
<span class="lineNum"> 212 </span> : #define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
|
||||
<span class="lineNum"> 201 </span> : #if MAJOR_IN_MKDEV
|
||||
<span class="lineNum"> 202 </span> : #include <sys/mkdev.h>
|
||||
<span class="lineNum"> 203 </span> : #elif MAJOR_IN_SYSMACROS
|
||||
<span class="lineNum"> 204 </span> : #include <sys/sysmacros.h>
|
||||
<span class="lineNum"> 205 </span> : #endif
|
||||
<span class="lineNum"> 206 </span> :
|
||||
<span class="lineNum"> 207 </span> : #if HAVE_SYS_STAT_H
|
||||
<span class="lineNum"> 208 </span> : #include <sys/stat.h>
|
||||
<span class="lineNum"> 209 </span> : #endif
|
||||
<span class="lineNum"> 210 </span> :
|
||||
<span class="lineNum"> 211 </span> : #if HAVE_SYS_WAIT_H
|
||||
<span class="lineNum"> 212 </span> : #include <sys/wait.h>
|
||||
<span class="lineNum"> 213 </span> : #endif
|
||||
<span class="lineNum"> 214 </span> :
|
||||
<span class="lineNum"> 215 </span> : #if HAVE_GETOPT_H
|
||||
<span class="lineNum"> 216 </span> : #include <getopt.h>
|
||||
<span class="lineNum"> 217 </span> : #endif
|
||||
<span class="lineNum"> 218 </span> :
|
||||
<span class="lineNum"> 219 </span> : #if HAVE_FNMATCH_H
|
||||
<span class="lineNum"> 220 </span> : #include <fnmatch.h>
|
||||
<span class="lineNum"> 221 </span> : #else
|
||||
<span class="lineNum"> 222 </span> : #include "fnmatch.h"
|
||||
<span class="lineNum"> 214 </span> : #ifndef WEXITSTATUS
|
||||
<span class="lineNum"> 215 </span> : #define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
|
||||
<span class="lineNum"> 216 </span> : #endif
|
||||
<span class="lineNum"> 217 </span> : #ifndef WIFEXITED
|
||||
<span class="lineNum"> 218 </span> : #define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
|
||||
<span class="lineNum"> 219 </span> : #endif
|
||||
<span class="lineNum"> 220 </span> :
|
||||
<span class="lineNum"> 221 </span> : #if HAVE_GETOPT_H
|
||||
<span class="lineNum"> 222 </span> : #include <getopt.h>
|
||||
<span class="lineNum"> 223 </span> : #endif
|
||||
<span class="lineNum"> 224 </span> :
|
||||
<span class="lineNum"> 225 </span> : #if HAVE_PTHREAD_H
|
||||
<span class="lineNum"> 226 </span> : #include <pthread.h>
|
||||
<span class="lineNum"> 227 </span> : #endif
|
||||
<span class="lineNum"> 228 </span> :
|
||||
<span class="lineNum"> 229 </span> : #if HAVE_MATH_H
|
||||
<span class="lineNum"> 230 </span> : #include <math.h>
|
||||
<span class="lineNum"> 231 </span> : #endif
|
||||
<span class="lineNum"> 232 </span> :
|
||||
<span class="lineNum"> 233 </span> : #if HAVE_EXECINFO_H
|
||||
<span class="lineNum"> 234 </span> : #include <execinfo.h>
|
||||
<span class="lineNum"> 235 </span> : #endif
|
||||
<span class="lineNum"> 236 </span> :
|
||||
<span class="lineNum"> 237 </span> : /**
|
||||
<span class="lineNum"> 238 </span> : * Enable thread use.
|
||||
<span class="lineNum"> 239 </span> : */
|
||||
<span class="lineNum"> 240 </span> : #if HAVE_PTHREAD_CREATE
|
||||
<span class="lineNum"> 241 </span> : #define HAVE_PTHREAD 1
|
||||
<span class="lineNum"> 242 </span> : #endif
|
||||
<span class="lineNum"> 243 </span> :
|
||||
<span class="lineNum"> 244 </span> : /**
|
||||
<span class="lineNum"> 245 </span> : * Disable case check in Windows.
|
||||
<span class="lineNum"> 246 </span> : */
|
||||
<span class="lineNum"> 247 </span> : #ifdef _WIN32
|
||||
<span class="lineNum"> 248 </span> : #define FNM_CASEINSENSITIVE_FOR_WIN FNM_CASEFOLD
|
||||
<span class="lineNum"> 249 </span> : #else
|
||||
<span class="lineNum"> 250 </span> : #define FNM_CASEINSENSITIVE_FOR_WIN 0
|
||||
<span class="lineNum"> 251 </span> : #endif
|
||||
<span class="lineNum"> 252 </span> :
|
||||
<span class="lineNum"> 253 </span> : #if HAVE_IO_H
|
||||
<span class="lineNum"> 254 </span> : #include <io.h>
|
||||
<span class="lineNum"> 255 </span> : #endif
|
||||
<span class="lineNum"> 256 </span> :
|
||||
<span class="lineNum"> 257 </span> : #if HAVE_GETOPT_LONG
|
||||
<span class="lineNum"> 258 </span> : #define SWITCH_GETOPT_LONG(a, b) a
|
||||
<span class="lineNum"> 259 </span> : #else
|
||||
<span class="lineNum"> 260 </span> : #define SWITCH_GETOPT_LONG(a, b) b
|
||||
<span class="lineNum"> 225 </span> : #if HAVE_FNMATCH_H
|
||||
<span class="lineNum"> 226 </span> : #include <fnmatch.h>
|
||||
<span class="lineNum"> 227 </span> : #else
|
||||
<span class="lineNum"> 228 </span> : #include "fnmatch.h"
|
||||
<span class="lineNum"> 229 </span> : #endif
|
||||
<span class="lineNum"> 230 </span> :
|
||||
<span class="lineNum"> 231 </span> : #if HAVE_PTHREAD_H
|
||||
<span class="lineNum"> 232 </span> : #include <pthread.h>
|
||||
<span class="lineNum"> 233 </span> : #endif
|
||||
<span class="lineNum"> 234 </span> :
|
||||
<span class="lineNum"> 235 </span> : #if HAVE_MATH_H
|
||||
<span class="lineNum"> 236 </span> : #include <math.h>
|
||||
<span class="lineNum"> 237 </span> : #endif
|
||||
<span class="lineNum"> 238 </span> :
|
||||
<span class="lineNum"> 239 </span> : #if HAVE_EXECINFO_H
|
||||
<span class="lineNum"> 240 </span> : #include <execinfo.h>
|
||||
<span class="lineNum"> 241 </span> : #endif
|
||||
<span class="lineNum"> 242 </span> :
|
||||
<span class="lineNum"> 243 </span> : /**
|
||||
<span class="lineNum"> 244 </span> : * Enable thread use.
|
||||
<span class="lineNum"> 245 </span> : */
|
||||
<span class="lineNum"> 246 </span> : #if HAVE_PTHREAD_CREATE
|
||||
<span class="lineNum"> 247 </span> : #define HAVE_PTHREAD 1
|
||||
<span class="lineNum"> 248 </span> : #endif
|
||||
<span class="lineNum"> 249 </span> :
|
||||
<span class="lineNum"> 250 </span> : /**
|
||||
<span class="lineNum"> 251 </span> : * Disable case check in Windows.
|
||||
<span class="lineNum"> 252 </span> : */
|
||||
<span class="lineNum"> 253 </span> : #ifdef _WIN32
|
||||
<span class="lineNum"> 254 </span> : #define FNM_CASEINSENSITIVE_FOR_WIN FNM_CASEFOLD
|
||||
<span class="lineNum"> 255 </span> : #else
|
||||
<span class="lineNum"> 256 </span> : #define FNM_CASEINSENSITIVE_FOR_WIN 0
|
||||
<span class="lineNum"> 257 </span> : #endif
|
||||
<span class="lineNum"> 258 </span> :
|
||||
<span class="lineNum"> 259 </span> : #if HAVE_IO_H
|
||||
<span class="lineNum"> 260 </span> : #include <io.h>
|
||||
<span class="lineNum"> 261 </span> : #endif
|
||||
<span class="lineNum"> 262 </span> :
|
||||
<span class="lineNum"> 263 </span> : /**
|
||||
<span class="lineNum"> 264 </span> : * Enables lock file support.
|
||||
<span class="lineNum"> 265 </span> : */
|
||||
<span class="lineNum"> 266 </span> : #if HAVE_FLOCK && HAVE_FTRUNCATE
|
||||
<span class="lineNum"> 267 </span> : #define HAVE_LOCKFILE 1
|
||||
<span class="lineNum"> 268 </span> : #endif
|
||||
<span class="lineNum"> 269 </span> :
|
||||
<span class="lineNum"> 270 </span> : /**
|
||||
<span class="lineNum"> 271 </span> : * Basic block position type.
|
||||
<span class="lineNum"> 272 </span> : * With 32 bits and 128k blocks you can address 256 TB.
|
||||
<span class="lineNum"> 273 </span> : */
|
||||
<span class="lineNum"> 274 </span> : typedef uint32_t block_off_t;
|
||||
<span class="lineNum"> 263 </span> : #if HAVE_GETOPT_LONG
|
||||
<span class="lineNum"> 264 </span> : #define SWITCH_GETOPT_LONG(a, b) a
|
||||
<span class="lineNum"> 265 </span> : #else
|
||||
<span class="lineNum"> 266 </span> : #define SWITCH_GETOPT_LONG(a, b) b
|
||||
<span class="lineNum"> 267 </span> : #endif
|
||||
<span class="lineNum"> 268 </span> :
|
||||
<span class="lineNum"> 269 </span> : /**
|
||||
<span class="lineNum"> 270 </span> : * Enables lock file support.
|
||||
<span class="lineNum"> 271 </span> : */
|
||||
<span class="lineNum"> 272 </span> : #if HAVE_FLOCK && HAVE_FTRUNCATE
|
||||
<span class="lineNum"> 273 </span> : #define HAVE_LOCKFILE 1
|
||||
<span class="lineNum"> 274 </span> : #endif
|
||||
<span class="lineNum"> 275 </span> :
|
||||
<span class="lineNum"> 276 </span> : /**
|
||||
<span class="lineNum"> 277 </span> : * Basic data position type.
|
||||
<span class="lineNum"> 278 </span> : * It's signed as file size and offset are usually signed.
|
||||
<span class="lineNum"> 277 </span> : * Basic block position type.
|
||||
<span class="lineNum"> 278 </span> : * With 32 bits and 128k blocks you can address 256 TB.
|
||||
<span class="lineNum"> 279 </span> : */
|
||||
<span class="lineNum"> 280 </span> : typedef int64_t data_off_t;
|
||||
<span class="lineNum"> 280 </span> : typedef uint32_t block_off_t;
|
||||
<span class="lineNum"> 281 </span> :
|
||||
<span class="lineNum"> 282 </span> : /**
|
||||
<span class="lineNum"> 283 </span> : * Includes specific support for Windows or Linux.
|
||||
<span class="lineNum"> 284 </span> : */
|
||||
<span class="lineNum"> 285 </span> : #ifdef __MINGW32__
|
||||
<span class="lineNum"> 286 </span> : #include "mingw.h"
|
||||
<span class="lineNum"> 287 </span> : #else
|
||||
<span class="lineNum"> 288 </span> : #include "unix.h"
|
||||
<span class="lineNum"> 289 </span> : #endif
|
||||
<span class="lineNum"> 290 </span> :
|
||||
<span class="lineNum"> 291 </span> : /**
|
||||
<span class="lineNum"> 292 </span> : * Include list support to have tommy_node.
|
||||
<span class="lineNum"> 293 </span> : */
|
||||
<span class="lineNum"> 294 </span> : #include "tommyds/tommylist.h"
|
||||
<span class="lineNum"> 295 </span> :
|
||||
<span class="lineNum"> 296 </span> : /**
|
||||
<a name="297"><span class="lineNum"> 297 </span> : * Another name for link() to avoid confusion with local variables called "link".</a>
|
||||
<span class="lineNum"> 298 </span> : */
|
||||
<span class="lineNum"> 299 </span><span class="lineCov"> 12 : static inline int hardlink(const char* a, const char* b)</span>
|
||||
<span class="lineNum"> 300 </span> : {
|
||||
<span class="lineNum"> 301 </span><span class="lineCov"> 12 : return link(a, b);</span>
|
||||
<span class="lineNum"> 302 </span> : }
|
||||
<span class="lineNum"> 303 </span> :
|
||||
<span class="lineNum"> 304 </span> : /**
|
||||
<span class="lineNum"> 305 </span> : * Get the device UUID.
|
||||
<span class="lineNum"> 306 </span> : * Return 0 on success.
|
||||
<span class="lineNum"> 307 </span> : */
|
||||
<span class="lineNum"> 308 </span> : int devuuid(uint64_t device, char* uuid, size_t size);
|
||||
<span class="lineNum"> 283 </span> : * Basic data position type.
|
||||
<span class="lineNum"> 284 </span> : * It's signed as file size and offset are usually signed.
|
||||
<span class="lineNum"> 285 </span> : */
|
||||
<span class="lineNum"> 286 </span> : typedef int64_t data_off_t;
|
||||
<span class="lineNum"> 287 </span> :
|
||||
<span class="lineNum"> 288 </span> : /**
|
||||
<span class="lineNum"> 289 </span> : * Includes specific support for Windows or Linux.
|
||||
<span class="lineNum"> 290 </span> : */
|
||||
<span class="lineNum"> 291 </span> : #ifdef __MINGW32__
|
||||
<span class="lineNum"> 292 </span> : #include "mingw.h"
|
||||
<span class="lineNum"> 293 </span> : #else
|
||||
<span class="lineNum"> 294 </span> : #include "unix.h"
|
||||
<span class="lineNum"> 295 </span> : #endif
|
||||
<span class="lineNum"> 296 </span> :
|
||||
<span class="lineNum"> 297 </span> : /**
|
||||
<span class="lineNum"> 298 </span> : * Include list support to have tommy_node.
|
||||
<span class="lineNum"> 299 </span> : */
|
||||
<span class="lineNum"> 300 </span> : #include "tommyds/tommylist.h"
|
||||
<span class="lineNum"> 301 </span> :
|
||||
<span class="lineNum"> 302 </span> : /**
|
||||
<a name="303"><span class="lineNum"> 303 </span> : * Another name for link() to avoid confusion with local variables called "link".</a>
|
||||
<span class="lineNum"> 304 </span> : */
|
||||
<span class="lineNum"> 305 </span><span class="lineCov"> 12 : static inline int hardlink(const char* a, const char* b)</span>
|
||||
<span class="lineNum"> 306 </span> : {
|
||||
<span class="lineNum"> 307 </span><span class="lineCov"> 12 : return link(a, b);</span>
|
||||
<span class="lineNum"> 308 </span> : }
|
||||
<span class="lineNum"> 309 </span> :
|
||||
<span class="lineNum"> 310 </span> : /**
|
||||
<span class="lineNum"> 311 </span> : * Physical offset not yet read.
|
||||
<span class="lineNum"> 312 </span> : */
|
||||
<span class="lineNum"> 313 </span> : #define FILEPHY_UNREAD_OFFSET 0
|
||||
<span class="lineNum"> 314 </span> :
|
||||
<span class="lineNum"> 315 </span> : /**
|
||||
<span class="lineNum"> 316 </span> : * Special value returned when the file-system doesn't report any offset for unknown reason.
|
||||
<span class="lineNum"> 317 </span> : */
|
||||
<span class="lineNum"> 318 </span> : #define FILEPHY_UNREPORTED_OFFSET 1
|
||||
<span class="lineNum"> 319 </span> :
|
||||
<span class="lineNum"> 320 </span> : /**
|
||||
<span class="lineNum"> 321 </span> : * Special value returned when the file doesn't have a real offset.
|
||||
<span class="lineNum"> 322 </span> : * For example, because it's stored in the NTFS MFT.
|
||||
<span class="lineNum"> 311 </span> : * Get the device UUID.
|
||||
<span class="lineNum"> 312 </span> : * Return 0 on success.
|
||||
<span class="lineNum"> 313 </span> : */
|
||||
<span class="lineNum"> 314 </span> : int devuuid(uint64_t device, char* uuid, size_t size);
|
||||
<span class="lineNum"> 315 </span> :
|
||||
<span class="lineNum"> 316 </span> : /**
|
||||
<span class="lineNum"> 317 </span> : * Physical offset not yet read.
|
||||
<span class="lineNum"> 318 </span> : */
|
||||
<span class="lineNum"> 319 </span> : #define FILEPHY_UNREAD_OFFSET 0
|
||||
<span class="lineNum"> 320 </span> :
|
||||
<span class="lineNum"> 321 </span> : /**
|
||||
<span class="lineNum"> 322 </span> : * Special value returned when the file-system doesn't report any offset for unknown reason.
|
||||
<span class="lineNum"> 323 </span> : */
|
||||
<span class="lineNum"> 324 </span> : #define FILEPHY_WITHOUT_OFFSET 2
|
||||
<span class="lineNum"> 324 </span> : #define FILEPHY_UNREPORTED_OFFSET 1
|
||||
<span class="lineNum"> 325 </span> :
|
||||
<span class="lineNum"> 326 </span> : /**
|
||||
<span class="lineNum"> 327 </span> : * Value indicating real offsets. All offsets greater or equal at this one are real.
|
||||
<span class="lineNum"> 328 </span> : */
|
||||
<span class="lineNum"> 329 </span> : #define FILEPHY_REAL_OFFSET 3
|
||||
<span class="lineNum"> 330 </span> :
|
||||
<span class="lineNum"> 331 </span> : /**
|
||||
<span class="lineNum"> 332 </span> : * Get the physcal address of the specified file.
|
||||
<span class="lineNum"> 333 </span> : * This is expected to be just a hint and not necessarily correct or unique.
|
||||
<span class="lineNum"> 334 </span> : * Return 0 on success.
|
||||
<span class="lineNum"> 335 </span> : */
|
||||
<span class="lineNum"> 336 </span> : int filephy(const char* path, uint64_t size, uint64_t* physical);
|
||||
<span class="lineNum"> 337 </span> :
|
||||
<span class="lineNum"> 338 </span> : /**
|
||||
<span class="lineNum"> 339 </span> : * Check if the underline file-system support persistent inodes.
|
||||
<span class="lineNum"> 340 </span> : * Return -1 on error, 0 on success.
|
||||
<span class="lineNum"> 327 </span> : * Special value returned when the file doesn't have a real offset.
|
||||
<span class="lineNum"> 328 </span> : * For example, because it's stored in the NTFS MFT.
|
||||
<span class="lineNum"> 329 </span> : */
|
||||
<span class="lineNum"> 330 </span> : #define FILEPHY_WITHOUT_OFFSET 2
|
||||
<span class="lineNum"> 331 </span> :
|
||||
<span class="lineNum"> 332 </span> : /**
|
||||
<span class="lineNum"> 333 </span> : * Value indicating real offsets. All offsets greater or equal at this one are real.
|
||||
<span class="lineNum"> 334 </span> : */
|
||||
<span class="lineNum"> 335 </span> : #define FILEPHY_REAL_OFFSET 3
|
||||
<span class="lineNum"> 336 </span> :
|
||||
<span class="lineNum"> 337 </span> : /**
|
||||
<span class="lineNum"> 338 </span> : * Get the physcal address of the specified file.
|
||||
<span class="lineNum"> 339 </span> : * This is expected to be just a hint and not necessarily correct or unique.
|
||||
<span class="lineNum"> 340 </span> : * Return 0 on success.
|
||||
<span class="lineNum"> 341 </span> : */
|
||||
<span class="lineNum"> 342 </span> : int fsinfo(const char* path, int* has_persistent_inode, uint64_t* total_space, uint64_t* free_space);
|
||||
<span class="lineNum"> 342 </span> : int filephy(const char* path, uint64_t size, uint64_t* physical);
|
||||
<span class="lineNum"> 343 </span> :
|
||||
<span class="lineNum"> 344 </span> : /**
|
||||
<span class="lineNum"> 345 </span> : * Get the tick counter value.
|
||||
<span class="lineNum"> 346 </span> : *
|
||||
<span class="lineNum"> 347 </span> : * Note that the frequency is unspecified, because the time measure
|
||||
<span class="lineNum"> 348 </span> : * is meant to be used to compare the ratio between usage times.
|
||||
<span class="lineNum"> 349 </span> : */
|
||||
<span class="lineNum"> 350 </span> : uint64_t tick(void);
|
||||
<span class="lineNum"> 351 </span> :
|
||||
<span class="lineNum"> 352 </span> : /**
|
||||
<span class="lineNum"> 353 </span> : * Get the tick counter value in millisecond.
|
||||
<span class="lineNum"> 354 </span> : */
|
||||
<span class="lineNum"> 355 </span> : uint64_t tick_ms(void);
|
||||
<span class="lineNum"> 356 </span> :
|
||||
<span class="lineNum"> 357 </span> : /**
|
||||
<span class="lineNum"> 358 </span> : * Initializes the system.
|
||||
<span class="lineNum"> 359 </span> : */
|
||||
<span class="lineNum"> 360 </span> : void os_init(int opt);
|
||||
<span class="lineNum"> 361 </span> :
|
||||
<span class="lineNum"> 362 </span> : /**
|
||||
<span class="lineNum"> 363 </span> : * Deinitialize the system.
|
||||
<span class="lineNum"> 364 </span> : */
|
||||
<span class="lineNum"> 365 </span> : void os_done(void);
|
||||
<span class="lineNum"> 366 </span> :
|
||||
<span class="lineNum"> 367 </span> : /**
|
||||
<span class="lineNum"> 368 </span> : * Abort the process with a stacktrace.
|
||||
<span class="lineNum"> 369 </span> : */
|
||||
<span class="lineNum"> 370 </span> : void os_abort(void) __noreturn;
|
||||
<span class="lineNum"> 371 </span> :
|
||||
<span class="lineNum"> 372 </span> : /**
|
||||
<span class="lineNum"> 373 </span> : * Clear the screen.
|
||||
<span class="lineNum"> 374 </span> : */
|
||||
<span class="lineNum"> 375 </span> : void os_clear(void);
|
||||
<span class="lineNum"> 376 </span> :
|
||||
<span class="lineNum"> 377 </span> : /**
|
||||
<span class="lineNum"> 378 </span> : * Log file.
|
||||
<span class="lineNum"> 379 </span> : *
|
||||
<span class="lineNum"> 380 </span> : * This stream if fully buffered.
|
||||
<span class="lineNum"> 381 </span> : *
|
||||
<span class="lineNum"> 382 </span> : * If no log file is selected, it's 0.
|
||||
<span class="lineNum"> 383 </span> : */
|
||||
<span class="lineNum"> 384 </span> : FILE* stdlog;
|
||||
<span class="lineNum"> 385 </span> :
|
||||
<span class="lineNum"> 386 </span> : /**
|
||||
<span class="lineNum"> 387 </span> : * Exit codes for testing.
|
||||
<span class="lineNum"> 388 </span> : */
|
||||
<span class="lineNum"> 389 </span> : int exit_success;
|
||||
<span class="lineNum"> 390 </span> : int exit_failure;
|
||||
<span class="lineNum"> 391 </span> : int exit_sync_needed;
|
||||
<span class="lineNum"> 392 </span> : #undef EXIT_SUCCESS
|
||||
<span class="lineNum"> 393 </span> : #undef EXIT_FAILURE
|
||||
<span class="lineNum"> 394 </span> : #define EXIT_SUCCESS exit_success
|
||||
<span class="lineNum"> 395 </span> : #define EXIT_FAILURE exit_failure
|
||||
<span class="lineNum"> 396 </span> : #define EXIT_SYNC_NEEDED exit_sync_needed
|
||||
<span class="lineNum"> 397 </span> :
|
||||
<span class="lineNum"> 398 </span> : /**
|
||||
<span class="lineNum"> 399 </span> : * Fill memory with pseudo-random values.
|
||||
<span class="lineNum"> 400 </span> : */
|
||||
<span class="lineNum"> 401 </span> : int randomize(void* ptr, size_t size);
|
||||
<span class="lineNum"> 402 </span> :
|
||||
<span class="lineNum"> 403 </span> : /**
|
||||
<span class="lineNum"> 404 </span> : * Standard SMART attributes.
|
||||
<span class="lineNum"> 405 </span> : */
|
||||
<span class="lineNum"> 406 </span> : #define SMART_START_STOP_COUNT 4
|
||||
<span class="lineNum"> 407 </span> : #define SMART_REALLOCATED_SECTOR_COUNT 5
|
||||
<span class="lineNum"> 408 </span> : #define SMART_POWER_ON_HOURS 9
|
||||
<span class="lineNum"> 409 </span> : #define SMART_AIRFLOW_TEMPERATURE_CELSIUS 190
|
||||
<span class="lineNum"> 410 </span> : #define SMART_LOAD_CYCLE_COUNT 193
|
||||
<span class="lineNum"> 411 </span> : #define SMART_TEMPERATURE_CELSIUS 194
|
||||
<span class="lineNum"> 412 </span> :
|
||||
<span class="lineNum"> 413 </span> : /**
|
||||
<span class="lineNum"> 414 </span> : * Additional SMART attributes.
|
||||
<span class="lineNum"> 415 </span> : */
|
||||
<span class="lineNum"> 416 </span> : #define SMART_ERROR 256 /**< ATA Error count. */
|
||||
<span class="lineNum"> 417 </span> : #define SMART_SIZE 257 /**< Size in bytes. */
|
||||
<span class="lineNum"> 418 </span> : #define SMART_ROTATION_RATE 258 /**< Rotation speed. 0 for SSD. */
|
||||
<span class="lineNum"> 419 </span> : #define SMART_FLAGS 259 /**< Flags returned by smartctl. */
|
||||
<span class="lineNum"> 420 </span> :
|
||||
<span class="lineNum"> 421 </span> : /**
|
||||
<span class="lineNum"> 422 </span> : * SMART attributes count.
|
||||
<span class="lineNum"> 423 </span> : */
|
||||
<span class="lineNum"> 424 </span> : #define SMART_COUNT 260
|
||||
<span class="lineNum"> 425 </span> :
|
||||
<span class="lineNum"> 426 </span> : /**
|
||||
<span class="lineNum"> 427 </span> : * Flags returned by smartctl.
|
||||
<span class="lineNum"> 428 </span> : */
|
||||
<span class="lineNum"> 429 </span> : #define SMARTCTL_FLAG_UNSUPPORTED (1 << 0) /**< Device not recognized, requiring the -d option. */
|
||||
<span class="lineNum"> 430 </span> : #define SMARTCTL_FLAG_OPEN (1 << 1) /**< Device open or identification failed. */
|
||||
<span class="lineNum"> 431 </span> : #define SMARTCTL_FLAG_COMMAND (1 << 2) /**< Some SMART or ATA commands failed. This is a common error, also happening with full info gathering. */
|
||||
<span class="lineNum"> 432 </span> : #define SMARTCTL_FLAG_FAIL (1 << 3) /**< SMART status check returned "DISK FAILING". */
|
||||
<span class="lineNum"> 433 </span> : #define SMARTCTL_FLAG_PREFAIL (1 << 4) /**< We found prefail Attributes <= threshold. */
|
||||
<span class="lineNum"> 434 </span> : #define SMARTCTL_FLAG_PREFAIL_LOGGED (1 << 5) /**< SMART status check returned "DISK OK" but we found that some (usage or prefail) Attributes have been <= threshold at some time in the past. */
|
||||
<span class="lineNum"> 435 </span> : #define SMARTCTL_FLAG_ERROR (1 << 6) /**< The device error log contains records of errors. */
|
||||
<span class="lineNum"> 436 </span> : #define SMARTCTL_FLAG_ERROR_LOGGED (1 << 7) /**< The device self-test log contains records of errors. */
|
||||
<span class="lineNum"> 437 </span> :
|
||||
<span class="lineNum"> 438 </span> : /**
|
||||
<span class="lineNum"> 439 </span> : * SMART max attribute length.
|
||||
<span class="lineNum"> 440 </span> : */
|
||||
<span class="lineNum"> 441 </span> : #define SMART_MAX 64
|
||||
<span class="lineNum"> 442 </span> :
|
||||
<span class="lineNum"> 443 </span> : /**
|
||||
<span class="lineNum"> 444 </span> : * Value for unassigned SMART attribute.
|
||||
<span class="lineNum"> 445 </span> : */
|
||||
<span class="lineNum"> 446 </span> : #define SMART_UNASSIGNED 0xFFFFFFFFFFFFFFFFULL
|
||||
<span class="lineNum"> 447 </span> :
|
||||
<span class="lineNum"> 448 </span> : /**
|
||||
<span class="lineNum"> 449 </span> : * Device info entry.
|
||||
<span class="lineNum"> 450 </span> : */
|
||||
<span class="lineNum"> 451 </span> : struct devinfo_struct {
|
||||
<span class="lineNum"> 452 </span> : uint64_t device; /**< Device ID. */
|
||||
<span class="lineNum"> 453 </span> : char name[PATH_MAX]; /**< Name of the disk. */
|
||||
<span class="lineNum"> 454 </span> : char mount[PATH_MAX]; /**< Mount point or other contained directory. */
|
||||
<span class="lineNum"> 455 </span> : char smartctl[PATH_MAX]; /**< Options for smartctl. */
|
||||
<span class="lineNum"> 456 </span> : char file[PATH_MAX]; /**< File device. */
|
||||
<span class="lineNum"> 457 </span> : #ifdef _WIN32
|
||||
<span class="lineNum"> 458 </span> : char wfile[PATH_MAX]; /**< File device in Windows format. Like \\.\PhysicalDriveX, or \\?\Volume{X}. */
|
||||
<span class="lineNum"> 459 </span> : #endif
|
||||
<span class="lineNum"> 460 </span> : struct devinfo_struct* parent; /**< Pointer at the parent if any. */
|
||||
<span class="lineNum"> 461 </span> : uint64_t smart[SMART_COUNT]; /**< SMART raw attributes. */
|
||||
<span class="lineNum"> 462 </span> : char smart_serial[SMART_MAX]; /**< SMART serial number. */
|
||||
<span class="lineNum"> 463 </span> : char smart_vendor[SMART_MAX]; /**< SMART vendor. */
|
||||
<span class="lineNum"> 464 </span> : char smart_model[SMART_MAX]; /**< SMART model. */
|
||||
<span class="lineNum"> 465 </span> : #if HAVE_PTHREAD
|
||||
<span class="lineNum"> 466 </span> : pthread_t thread;
|
||||
<span class="lineNum"> 467 </span> : #endif
|
||||
<span class="lineNum"> 468 </span> : tommy_node node;
|
||||
<span class="lineNum"> 469 </span> : };
|
||||
<span class="lineNum"> 470 </span> : typedef struct devinfo_struct devinfo_t;
|
||||
<span class="lineNum"> 471 </span> :
|
||||
<span class="lineNum"> 472 </span> : #define DEVICE_LIST 0
|
||||
<span class="lineNum"> 473 </span> : #define DEVICE_DOWN 1
|
||||
<span class="lineNum"> 474 </span> : #define DEVICE_UP 2
|
||||
<span class="lineNum"> 475 </span> : #define DEVICE_SMART 3
|
||||
<span class="lineNum"> 476 </span> :
|
||||
<span class="lineNum"> 477 </span> : /**
|
||||
<span class="lineNum"> 478 </span> : * Query all the "high" level devices with the specified operation,
|
||||
<span class="lineNum"> 479 </span> : * and produces a list of "low" level devices to operate on.
|
||||
<span class="lineNum"> 480 </span> : *
|
||||
<span class="lineNum"> 481 </span> : * The passed "low" device list must be already initialized.
|
||||
<span class="lineNum"> 482 </span> : */
|
||||
<span class="lineNum"> 483 </span> : int devquery(tommy_list* high, tommy_list* low, int operation, int others);
|
||||
<span class="lineNum"> 484 </span> :
|
||||
<span class="lineNum"> 485 </span> : #endif
|
||||
<span class="lineNum"> 486 </span> :
|
||||
<span class="lineNum"> 345 </span> : * Check if the underline file-system support persistent inodes.
|
||||
<span class="lineNum"> 346 </span> : * Return -1 on error, 0 on success.
|
||||
<span class="lineNum"> 347 </span> : */
|
||||
<span class="lineNum"> 348 </span> : int fsinfo(const char* path, int* has_persistent_inode, uint64_t* total_space, uint64_t* free_space);
|
||||
<span class="lineNum"> 349 </span> :
|
||||
<span class="lineNum"> 350 </span> : /**
|
||||
<span class="lineNum"> 351 </span> : * Get the tick counter value.
|
||||
<span class="lineNum"> 352 </span> : *
|
||||
<span class="lineNum"> 353 </span> : * Note that the frequency is unspecified, because the time measure
|
||||
<span class="lineNum"> 354 </span> : * is meant to be used to compare the ratio between usage times.
|
||||
<span class="lineNum"> 355 </span> : */
|
||||
<span class="lineNum"> 356 </span> : uint64_t tick(void);
|
||||
<span class="lineNum"> 357 </span> :
|
||||
<span class="lineNum"> 358 </span> : /**
|
||||
<span class="lineNum"> 359 </span> : * Get the tick counter value in millisecond.
|
||||
<span class="lineNum"> 360 </span> : */
|
||||
<span class="lineNum"> 361 </span> : uint64_t tick_ms(void);
|
||||
<span class="lineNum"> 362 </span> :
|
||||
<span class="lineNum"> 363 </span> : /**
|
||||
<span class="lineNum"> 364 </span> : * Initializes the system.
|
||||
<span class="lineNum"> 365 </span> : */
|
||||
<span class="lineNum"> 366 </span> : void os_init(int opt);
|
||||
<span class="lineNum"> 367 </span> :
|
||||
<span class="lineNum"> 368 </span> : /**
|
||||
<span class="lineNum"> 369 </span> : * Deinitialize the system.
|
||||
<span class="lineNum"> 370 </span> : */
|
||||
<span class="lineNum"> 371 </span> : void os_done(void);
|
||||
<span class="lineNum"> 372 </span> :
|
||||
<span class="lineNum"> 373 </span> : /**
|
||||
<span class="lineNum"> 374 </span> : * Abort the process with a stacktrace.
|
||||
<span class="lineNum"> 375 </span> : */
|
||||
<span class="lineNum"> 376 </span> : void os_abort(void) __noreturn;
|
||||
<span class="lineNum"> 377 </span> :
|
||||
<span class="lineNum"> 378 </span> : /**
|
||||
<span class="lineNum"> 379 </span> : * Clear the screen.
|
||||
<span class="lineNum"> 380 </span> : */
|
||||
<span class="lineNum"> 381 </span> : void os_clear(void);
|
||||
<span class="lineNum"> 382 </span> :
|
||||
<span class="lineNum"> 383 </span> : /**
|
||||
<span class="lineNum"> 384 </span> : * Log file.
|
||||
<span class="lineNum"> 385 </span> : *
|
||||
<span class="lineNum"> 386 </span> : * This stream if fully buffered.
|
||||
<span class="lineNum"> 387 </span> : *
|
||||
<span class="lineNum"> 388 </span> : * If no log file is selected, it's 0.
|
||||
<span class="lineNum"> 389 </span> : */
|
||||
<span class="lineNum"> 390 </span> : FILE* stdlog;
|
||||
<span class="lineNum"> 391 </span> :
|
||||
<span class="lineNum"> 392 </span> : /**
|
||||
<span class="lineNum"> 393 </span> : * Exit codes for testing.
|
||||
<span class="lineNum"> 394 </span> : */
|
||||
<span class="lineNum"> 395 </span> : int exit_success;
|
||||
<span class="lineNum"> 396 </span> : int exit_failure;
|
||||
<span class="lineNum"> 397 </span> : int exit_sync_needed;
|
||||
<span class="lineNum"> 398 </span> : #undef EXIT_SUCCESS
|
||||
<span class="lineNum"> 399 </span> : #undef EXIT_FAILURE
|
||||
<span class="lineNum"> 400 </span> : #define EXIT_SUCCESS exit_success
|
||||
<span class="lineNum"> 401 </span> : #define EXIT_FAILURE exit_failure
|
||||
<span class="lineNum"> 402 </span> : #define EXIT_SYNC_NEEDED exit_sync_needed
|
||||
<span class="lineNum"> 403 </span> :
|
||||
<span class="lineNum"> 404 </span> : /**
|
||||
<span class="lineNum"> 405 </span> : * Fill memory with pseudo-random values.
|
||||
<span class="lineNum"> 406 </span> : */
|
||||
<span class="lineNum"> 407 </span> : int randomize(void* ptr, size_t size);
|
||||
<span class="lineNum"> 408 </span> :
|
||||
<span class="lineNum"> 409 </span> : /**
|
||||
<span class="lineNum"> 410 </span> : * Standard SMART attributes.
|
||||
<span class="lineNum"> 411 </span> : */
|
||||
<span class="lineNum"> 412 </span> : #define SMART_START_STOP_COUNT 4
|
||||
<span class="lineNum"> 413 </span> : #define SMART_REALLOCATED_SECTOR_COUNT 5
|
||||
<span class="lineNum"> 414 </span> : #define SMART_POWER_ON_HOURS 9
|
||||
<span class="lineNum"> 415 </span> : #define SMART_AIRFLOW_TEMPERATURE_CELSIUS 190
|
||||
<span class="lineNum"> 416 </span> : #define SMART_LOAD_CYCLE_COUNT 193
|
||||
<span class="lineNum"> 417 </span> : #define SMART_TEMPERATURE_CELSIUS 194
|
||||
<span class="lineNum"> 418 </span> :
|
||||
<span class="lineNum"> 419 </span> : /**
|
||||
<span class="lineNum"> 420 </span> : * Additional SMART attributes.
|
||||
<span class="lineNum"> 421 </span> : */
|
||||
<span class="lineNum"> 422 </span> : #define SMART_ERROR 256 /**< ATA Error count. */
|
||||
<span class="lineNum"> 423 </span> : #define SMART_SIZE 257 /**< Size in bytes. */
|
||||
<span class="lineNum"> 424 </span> : #define SMART_ROTATION_RATE 258 /**< Rotation speed. 0 for SSD. */
|
||||
<span class="lineNum"> 425 </span> : #define SMART_FLAGS 259 /**< Flags returned by smartctl. */
|
||||
<span class="lineNum"> 426 </span> :
|
||||
<span class="lineNum"> 427 </span> : /**
|
||||
<span class="lineNum"> 428 </span> : * SMART attributes count.
|
||||
<span class="lineNum"> 429 </span> : */
|
||||
<span class="lineNum"> 430 </span> : #define SMART_COUNT 260
|
||||
<span class="lineNum"> 431 </span> :
|
||||
<span class="lineNum"> 432 </span> : /**
|
||||
<span class="lineNum"> 433 </span> : * Flags returned by smartctl.
|
||||
<span class="lineNum"> 434 </span> : */
|
||||
<span class="lineNum"> 435 </span> : #define SMARTCTL_FLAG_UNSUPPORTED (1 << 0) /**< Device not recognized, requiring the -d option. */
|
||||
<span class="lineNum"> 436 </span> : #define SMARTCTL_FLAG_OPEN (1 << 1) /**< Device open or identification failed. */
|
||||
<span class="lineNum"> 437 </span> : #define SMARTCTL_FLAG_COMMAND (1 << 2) /**< Some SMART or ATA commands failed. This is a common error, also happening with full info gathering. */
|
||||
<span class="lineNum"> 438 </span> : #define SMARTCTL_FLAG_FAIL (1 << 3) /**< SMART status check returned "DISK FAILING". */
|
||||
<span class="lineNum"> 439 </span> : #define SMARTCTL_FLAG_PREFAIL (1 << 4) /**< We found prefail Attributes <= threshold. */
|
||||
<span class="lineNum"> 440 </span> : #define SMARTCTL_FLAG_PREFAIL_LOGGED (1 << 5) /**< SMART status check returned "DISK OK" but we found that some (usage or prefail) Attributes have been <= threshold at some time in the past. */
|
||||
<span class="lineNum"> 441 </span> : #define SMARTCTL_FLAG_ERROR (1 << 6) /**< The device error log contains records of errors. */
|
||||
<span class="lineNum"> 442 </span> : #define SMARTCTL_FLAG_ERROR_LOGGED (1 << 7) /**< The device self-test log contains records of errors. */
|
||||
<span class="lineNum"> 443 </span> :
|
||||
<span class="lineNum"> 444 </span> : /**
|
||||
<span class="lineNum"> 445 </span> : * SMART max attribute length.
|
||||
<span class="lineNum"> 446 </span> : */
|
||||
<span class="lineNum"> 447 </span> : #define SMART_MAX 64
|
||||
<span class="lineNum"> 448 </span> :
|
||||
<span class="lineNum"> 449 </span> : /**
|
||||
<span class="lineNum"> 450 </span> : * Value for unassigned SMART attribute.
|
||||
<span class="lineNum"> 451 </span> : */
|
||||
<span class="lineNum"> 452 </span> : #define SMART_UNASSIGNED 0xFFFFFFFFFFFFFFFFULL
|
||||
<span class="lineNum"> 453 </span> :
|
||||
<span class="lineNum"> 454 </span> : /**
|
||||
<span class="lineNum"> 455 </span> : * Device info entry.
|
||||
<span class="lineNum"> 456 </span> : */
|
||||
<span class="lineNum"> 457 </span> : struct devinfo_struct {
|
||||
<span class="lineNum"> 458 </span> : uint64_t device; /**< Device ID. */
|
||||
<span class="lineNum"> 459 </span> : char name[PATH_MAX]; /**< Name of the disk. */
|
||||
<span class="lineNum"> 460 </span> : char mount[PATH_MAX]; /**< Mount point or other contained directory. */
|
||||
<span class="lineNum"> 461 </span> : char smartctl[PATH_MAX]; /**< Options for smartctl. */
|
||||
<span class="lineNum"> 462 </span> : char file[PATH_MAX]; /**< File device. */
|
||||
<span class="lineNum"> 463 </span> : #ifdef _WIN32
|
||||
<span class="lineNum"> 464 </span> : char wfile[PATH_MAX]; /**< File device in Windows format. Like \\.\PhysicalDriveX, or \\?\Volume{X}. */
|
||||
<span class="lineNum"> 465 </span> : #endif
|
||||
<span class="lineNum"> 466 </span> : struct devinfo_struct* parent; /**< Pointer at the parent if any. */
|
||||
<span class="lineNum"> 467 </span> : uint64_t smart[SMART_COUNT]; /**< SMART raw attributes. */
|
||||
<span class="lineNum"> 468 </span> : char smart_serial[SMART_MAX]; /**< SMART serial number. */
|
||||
<span class="lineNum"> 469 </span> : char smart_vendor[SMART_MAX]; /**< SMART vendor. */
|
||||
<span class="lineNum"> 470 </span> : char smart_model[SMART_MAX]; /**< SMART model. */
|
||||
<span class="lineNum"> 471 </span> : #if HAVE_PTHREAD
|
||||
<span class="lineNum"> 472 </span> : pthread_t thread;
|
||||
<span class="lineNum"> 473 </span> : #endif
|
||||
<span class="lineNum"> 474 </span> : tommy_node node;
|
||||
<span class="lineNum"> 475 </span> : };
|
||||
<span class="lineNum"> 476 </span> : typedef struct devinfo_struct devinfo_t;
|
||||
<span class="lineNum"> 477 </span> :
|
||||
<span class="lineNum"> 478 </span> : #define DEVICE_LIST 0
|
||||
<span class="lineNum"> 479 </span> : #define DEVICE_DOWN 1
|
||||
<span class="lineNum"> 480 </span> : #define DEVICE_UP 2
|
||||
<span class="lineNum"> 481 </span> : #define DEVICE_SMART 3
|
||||
<span class="lineNum"> 482 </span> :
|
||||
<span class="lineNum"> 483 </span> : /**
|
||||
<span class="lineNum"> 484 </span> : * Query all the "high" level devices with the specified operation,
|
||||
<span class="lineNum"> 485 </span> : * and produces a list of "low" level devices to operate on.
|
||||
<span class="lineNum"> 486 </span> : *
|
||||
<span class="lineNum"> 487 </span> : * The passed "low" device list must be already initialized.
|
||||
<span class="lineNum"> 488 </span> : */
|
||||
<span class="lineNum"> 489 </span> : int devquery(tommy_list* high, tommy_list* low, int operation, int others);
|
||||
<span class="lineNum"> 490 </span> :
|
||||
<span class="lineNum"> 491 </span> : #endif
|
||||
<span class="lineNum"> 492 </span> :
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">23</td>
|
||||
|
|
@ -73,39 +73,39 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#585">scan_file_keep</a></td>
|
||||
<td class="coverFnHi">1025550</td>
|
||||
<td class="coverFnHi">1025552</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#361">file_is_full_invalid_parity_and_stable</a></td>
|
||||
<td class="coverFnHi">1025550</td>
|
||||
<td class="coverFnHi">1025552</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#1082">dd_ino_compare</a></td>
|
||||
<td class="coverFnHi">103390</td>
|
||||
<td class="coverFnHi">103400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#332">scan_file_delayed_allocate</a></td>
|
||||
<td class="coverFnHi">101881</td>
|
||||
<td class="coverFnHi">101879</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#541">scan_file_insert</a></td>
|
||||
<td class="coverFnHi">101881</td>
|
||||
<td class="coverFnHi">101879</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#159">scan_file_allocate</a></td>
|
||||
<td class="coverFnHi">101881</td>
|
||||
<td class="coverFnHi">101879</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#464">scan_file_refresh</a></td>
|
||||
<td class="coverFnHi">79194</td>
|
||||
<td class="coverFnHi">79192</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#560">scan_file_remove</a></td>
|
||||
<td class="coverFnHi">57015</td>
|
||||
<td class="coverFnHi">57013</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#258">scan_file_deallocate</a></td>
|
||||
<td class="coverFnHi">57015</td>
|
||||
<td class="coverFnHi">57013</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#84">scan_link</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">23</td>
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#1082">dd_ino_compare</a></td>
|
||||
<td class="coverFnHi">103390</td>
|
||||
<td class="coverFnHi">103400</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#1096">dd_name_compare</a></td>
|
||||
|
|
@ -77,7 +77,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#361">file_is_full_invalid_parity_and_stable</a></td>
|
||||
<td class="coverFnHi">1025550</td>
|
||||
<td class="coverFnHi">1025552</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#1131">scan_dir</a></td>
|
||||
|
|
@ -101,31 +101,31 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#159">scan_file_allocate</a></td>
|
||||
<td class="coverFnHi">101881</td>
|
||||
<td class="coverFnHi">101879</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#258">scan_file_deallocate</a></td>
|
||||
<td class="coverFnHi">57015</td>
|
||||
<td class="coverFnHi">57013</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#332">scan_file_delayed_allocate</a></td>
|
||||
<td class="coverFnHi">101881</td>
|
||||
<td class="coverFnHi">101879</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#541">scan_file_insert</a></td>
|
||||
<td class="coverFnHi">101881</td>
|
||||
<td class="coverFnHi">101879</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#585">scan_file_keep</a></td>
|
||||
<td class="coverFnHi">1025550</td>
|
||||
<td class="coverFnHi">1025552</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#464">scan_file_refresh</a></td>
|
||||
<td class="coverFnHi">79194</td>
|
||||
<td class="coverFnHi">79192</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#560">scan_file_remove</a></td>
|
||||
<td class="coverFnHi">57015</td>
|
||||
<td class="coverFnHi">57013</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scan.c.gcov.html#84">scan_link</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">23</td>
|
||||
|
|
@ -220,42 +220,42 @@
|
|||
<span class="lineNum"> 158 </span> : /**
|
||||
<a name="159"><span class="lineNum"> 159 </span> : * Insert the specified file in the parity.</a>
|
||||
<span class="lineNum"> 160 </span> : */
|
||||
<span class="lineNum"> 161 </span><span class="lineCov"> 101881 : static void scan_file_allocate(struct snapraid_scan* scan, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 161 </span><span class="lineCov"> 101879 : static void scan_file_allocate(struct snapraid_scan* scan, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 162 </span> : {
|
||||
<span class="lineNum"> 163 </span><span class="lineCov"> 101881 : struct snapraid_state* state = scan->state;</span>
|
||||
<span class="lineNum"> 164 </span><span class="lineCov"> 101881 : struct snapraid_disk* disk = scan->disk;</span>
|
||||
<span class="lineNum"> 163 </span><span class="lineCov"> 101879 : struct snapraid_state* state = scan->state;</span>
|
||||
<span class="lineNum"> 164 </span><span class="lineCov"> 101879 : struct snapraid_disk* disk = scan->disk;</span>
|
||||
<span class="lineNum"> 165 </span> : block_off_t i;
|
||||
<span class="lineNum"> 166 </span> : block_off_t parity_pos;
|
||||
<span class="lineNum"> 167 </span> :
|
||||
<span class="lineNum"> 168 </span> : /* state changed */
|
||||
<span class="lineNum"> 169 </span><span class="lineCov"> 101881 : state->need_write = 1;</span>
|
||||
<span class="lineNum"> 169 </span><span class="lineCov"> 101879 : state->need_write = 1;</span>
|
||||
<span class="lineNum"> 170 </span> :
|
||||
<span class="lineNum"> 171 </span> : /* allocate the blocks of the file */
|
||||
<span class="lineNum"> 172 </span><span class="lineCov"> 101881 : parity_pos = disk->first_free_block;</span>
|
||||
<span class="lineNum"> 173 </span><span class="lineCov"> 353073 : for (i = 0; i < file->blockmax; ++i) {</span>
|
||||
<span class="lineNum"> 172 </span><span class="lineCov"> 101879 : parity_pos = disk->first_free_block;</span>
|
||||
<span class="lineNum"> 173 </span><span class="lineCov"> 353147 : for (i = 0; i < file->blockmax; ++i) {</span>
|
||||
<span class="lineNum"> 174 </span> : struct snapraid_block* block;
|
||||
<span class="lineNum"> 175 </span> : struct snapraid_block* over_block;
|
||||
<span class="lineNum"> 176 </span> : snapraid_info info;
|
||||
<span class="lineNum"> 177 </span> :
|
||||
<span class="lineNum"> 178 </span> : /* increment the position until the first really free block */
|
||||
<span class="lineNum"> 179 </span><span class="lineCov"> 1022715 : while (block_has_file(fs_par2block_find(disk, parity_pos)))</span>
|
||||
<span class="lineNum"> 180 </span><span class="lineCov"> 520331 : ++parity_pos;</span>
|
||||
<span class="lineNum"> 179 </span><span class="lineCov"> 1022869 : while (block_has_file(fs_par2block_find(disk, parity_pos)))</span>
|
||||
<span class="lineNum"> 180 </span><span class="lineCov"> 520333 : ++parity_pos;</span>
|
||||
<span class="lineNum"> 181 </span> :
|
||||
<span class="lineNum"> 182 </span> : /* get block we are going to overwrite, if any */
|
||||
<span class="lineNum"> 183 </span><span class="lineCov"> 251192 : over_block = fs_par2block_find(disk, parity_pos);</span>
|
||||
<span class="lineNum"> 183 </span><span class="lineCov"> 251268 : over_block = fs_par2block_find(disk, parity_pos);</span>
|
||||
<span class="lineNum"> 184 </span> :
|
||||
<span class="lineNum"> 185 </span> : /* deallocate it */
|
||||
<span class="lineNum"> 186 </span><span class="lineCov"> 251192 : if (over_block != BLOCK_NULL)</span>
|
||||
<span class="lineNum"> 187 </span><span class="lineCov"> 95279 : fs_deallocate(disk, parity_pos);</span>
|
||||
<span class="lineNum"> 186 </span><span class="lineCov"> 251268 : if (over_block != BLOCK_NULL)</span>
|
||||
<span class="lineNum"> 187 </span><span class="lineCov"> 95355 : fs_deallocate(disk, parity_pos);</span>
|
||||
<span class="lineNum"> 188 </span> :
|
||||
<span class="lineNum"> 189 </span> : /* get block specific info */
|
||||
<span class="lineNum"> 190 </span><span class="lineCov"> 251192 : info = info_get(&state->infoarr, parity_pos);</span>
|
||||
<span class="lineNum"> 190 </span><span class="lineCov"> 251268 : info = info_get(&state->infoarr, parity_pos);</span>
|
||||
<span class="lineNum"> 191 </span> :
|
||||
<span class="lineNum"> 192 </span> : /* get the new block we are going to write */
|
||||
<span class="lineNum"> 193 </span><span class="lineCov"> 251192 : block = fs_file2block_get(file, i);</span>
|
||||
<span class="lineNum"> 193 </span><span class="lineCov"> 251268 : block = fs_file2block_get(file, i);</span>
|
||||
<span class="lineNum"> 194 </span> :
|
||||
<span class="lineNum"> 195 </span> : /* if the file block already has an updated hash without rehash */
|
||||
<span class="lineNum"> 196 </span><span class="lineCov"> 251192 : if (block_has_updated_hash(block) && !info_get_rehash(info)) {</span>
|
||||
<span class="lineNum"> 196 </span><span class="lineCov"> 251268 : if (block_has_updated_hash(block) && !info_get_rehash(info)) {</span>
|
||||
<span class="lineNum"> 197 </span> : /* the only possible case is for REP blocks */
|
||||
<span class="lineNum"> 198 </span><span class="lineCov"> 86215 : assert(block_state_get(block) == BLOCK_STATE_REP);</span>
|
||||
<span class="lineNum"> 199 </span> :
|
||||
|
|
@ -267,25 +267,25 @@
|
|||
<span class="lineNum"> 205 </span> : unsigned over_state;
|
||||
<span class="lineNum"> 206 </span> :
|
||||
<span class="lineNum"> 207 </span> : /* convert to a CHG block */
|
||||
<span class="lineNum"> 208 </span><span class="lineCov"> 164977 : block_state_set(block, BLOCK_STATE_CHG);</span>
|
||||
<span class="lineNum"> 208 </span><span class="lineCov"> 165053 : block_state_set(block, BLOCK_STATE_CHG);</span>
|
||||
<span class="lineNum"> 209 </span> :
|
||||
<span class="lineNum"> 210 </span> : /* state of the block we are going to overwrite */
|
||||
<span class="lineNum"> 211 </span><span class="lineCov"> 164977 : over_state = block_state_get(over_block);</span>
|
||||
<span class="lineNum"> 211 </span><span class="lineCov"> 165053 : over_state = block_state_get(over_block);</span>
|
||||
<span class="lineNum"> 212 </span> :
|
||||
<span class="lineNum"> 213 </span> : /* if the block is an empty one */
|
||||
<span class="lineNum"> 214 </span><span class="lineCov"> 164977 : if (over_state == BLOCK_STATE_EMPTY) {</span>
|
||||
<span class="lineNum"> 214 </span><span class="lineCov"> 165053 : if (over_state == BLOCK_STATE_EMPTY) {</span>
|
||||
<span class="lineNum"> 215 </span> : /* the block was empty and filled with zeros */
|
||||
<span class="lineNum"> 216 </span> : /* set the hash to the special ZERO value */
|
||||
<span class="lineNum"> 217 </span><span class="lineCov"> 115543 : hash_zero_set(block->hash);</span>
|
||||
<span class="lineNum"> 218 </span> : } else {
|
||||
<span class="lineNum"> 219 </span> : /* otherwise it's a DELETED one */
|
||||
<span class="lineNum"> 220 </span><span class="lineCov"> 49434 : assert(over_state == BLOCK_STATE_DELETED);</span>
|
||||
<span class="lineNum"> 220 </span><span class="lineCov"> 49510 : assert(over_state == BLOCK_STATE_DELETED);</span>
|
||||
<span class="lineNum"> 221 </span> :
|
||||
<span class="lineNum"> 222 </span> : /* copy the past hash of the block */
|
||||
<span class="lineNum"> 223 </span><span class="lineCov"> 49434 : memcpy(block->hash, over_block->hash, BLOCK_HASH_SIZE);</span>
|
||||
<span class="lineNum"> 223 </span><span class="lineCov"> 49510 : memcpy(block->hash, over_block->hash, BLOCK_HASH_SIZE);</span>
|
||||
<span class="lineNum"> 224 </span> :
|
||||
<span class="lineNum"> 225 </span> : /* if we have not already cleared the past hash */
|
||||
<span class="lineNum"> 226 </span><span class="lineCov"> 49434 : if (!state->clear_past_hash) {</span>
|
||||
<span class="lineNum"> 226 </span><span class="lineCov"> 49510 : if (!state->clear_past_hash) {</span>
|
||||
<span class="lineNum"> 227 </span> : /* in this case we don't know if the old state is still the one */
|
||||
<span class="lineNum"> 228 </span> : /* stored inside the parity, because after an aborted sync, the parity */
|
||||
<span class="lineNum"> 229 </span> : /* may be or may be not have been updated with the new data */
|
||||
|
|
@ -302,15 +302,15 @@
|
|||
<span class="lineNum"> 240 </span> : }
|
||||
<span class="lineNum"> 241 </span> :
|
||||
<span class="lineNum"> 242 </span> : /* store in the disk map, after invalidating all the other blocks */
|
||||
<span class="lineNum"> 243 </span><span class="lineCov"> 251192 : fs_allocate(disk, parity_pos, file, i);</span>
|
||||
<span class="lineNum"> 243 </span><span class="lineCov"> 251268 : fs_allocate(disk, parity_pos, file, i);</span>
|
||||
<span class="lineNum"> 244 </span> :
|
||||
<span class="lineNum"> 245 </span> : /* set the new free position */
|
||||
<span class="lineNum"> 246 </span><span class="lineCov"> 251192 : disk->first_free_block = parity_pos + 1;</span>
|
||||
<span class="lineNum"> 246 </span><span class="lineCov"> 251268 : disk->first_free_block = parity_pos + 1;</span>
|
||||
<span class="lineNum"> 247 </span> : }
|
||||
<span class="lineNum"> 248 </span> :
|
||||
<span class="lineNum"> 249 </span> : /* insert in the list of contained files */
|
||||
<span class="lineNum"> 250 </span><span class="lineCov"> 101881 : tommy_list_insert_tail(&disk->filelist, &file->nodelist, file);</span>
|
||||
<span class="lineNum"> 251 </span><span class="lineCov"> 101881 : }</span>
|
||||
<span class="lineNum"> 250 </span><span class="lineCov"> 101879 : tommy_list_insert_tail(&disk->filelist, &file->nodelist, file);</span>
|
||||
<span class="lineNum"> 251 </span><span class="lineCov"> 101879 : }</span>
|
||||
<span class="lineNum"> 252 </span> :
|
||||
<span class="lineNum"> 253 </span> : /**
|
||||
<span class="lineNum"> 254 </span> : * Delete the specified file from the parity.
|
||||
|
|
@ -319,23 +319,23 @@
|
|||
<span class="lineNum"> 257 </span> : * The file is then inserted in the deleted set, and it should not be deallocated,
|
||||
<a name="258"><span class="lineNum"> 258 </span> : * as the parity still references it.</a>
|
||||
<span class="lineNum"> 259 </span> : */
|
||||
<span class="lineNum"> 260 </span><span class="lineCov"> 57015 : static void scan_file_deallocate(struct snapraid_scan* scan, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 260 </span><span class="lineCov"> 57013 : static void scan_file_deallocate(struct snapraid_scan* scan, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 261 </span> : {
|
||||
<span class="lineNum"> 262 </span><span class="lineCov"> 57015 : struct snapraid_state* state = scan->state;</span>
|
||||
<span class="lineNum"> 263 </span><span class="lineCov"> 57015 : struct snapraid_disk* disk = scan->disk;</span>
|
||||
<span class="lineNum"> 262 </span><span class="lineCov"> 57013 : struct snapraid_state* state = scan->state;</span>
|
||||
<span class="lineNum"> 263 </span><span class="lineCov"> 57013 : struct snapraid_disk* disk = scan->disk;</span>
|
||||
<span class="lineNum"> 264 </span> : block_off_t i;
|
||||
<span class="lineNum"> 265 </span> :
|
||||
<span class="lineNum"> 266 </span> : /* remove from the list of contained files */
|
||||
<span class="lineNum"> 267 </span><span class="lineCov"> 57015 : tommy_list_remove_existing(&disk->filelist, &file->nodelist);</span>
|
||||
<span class="lineNum"> 267 </span><span class="lineCov"> 57013 : tommy_list_remove_existing(&disk->filelist, &file->nodelist);</span>
|
||||
<span class="lineNum"> 268 </span> :
|
||||
<span class="lineNum"> 269 </span> : /* state changed */
|
||||
<span class="lineNum"> 270 </span><span class="lineCov"> 57015 : state->need_write = 1;</span>
|
||||
<span class="lineNum"> 270 </span><span class="lineCov"> 57013 : state->need_write = 1;</span>
|
||||
<span class="lineNum"> 271 </span> :
|
||||
<span class="lineNum"> 272 </span> : /* here we are supposed to adjust the ::first_free_block position */
|
||||
<span class="lineNum"> 273 </span> : /* with the parity position we are deleting */
|
||||
<span class="lineNum"> 274 </span> : /* but we also know that we do only delayed insert, after all the deletion, */
|
||||
<span class="lineNum"> 275 </span> : /* so at this point ::first_free_block is always at 0, and we don't need to update it */
|
||||
<span class="lineNum"> 276 </span><span class="lineCov"> 57015 : if (disk->first_free_block != 0) {</span>
|
||||
<span class="lineNum"> 276 </span><span class="lineCov"> 57013 : if (disk->first_free_block != 0) {</span>
|
||||
<span class="lineNum"> 277 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 278 </span> : log_fatal("Internal inconsistency for first free position at '%u' deallocating file '%s'\n", disk->first_free_block, file->sub);
|
||||
<span class="lineNum"> 279 </span> : os_abort();
|
||||
|
|
@ -343,17 +343,17 @@
|
|||
<span class="lineNum"> 281 </span> : }
|
||||
<span class="lineNum"> 282 </span> :
|
||||
<span class="lineNum"> 283 </span> : /* free all the blocks of the file */
|
||||
<span class="lineNum"> 284 </span><span class="lineCov"> 197592 : for (i = 0; i < file->blockmax; ++i) {</span>
|
||||
<span class="lineNum"> 285 </span><span class="lineCov"> 140577 : struct snapraid_block* block = fs_file2block_get(file, i);</span>
|
||||
<span class="lineNum"> 284 </span><span class="lineCov"> 197666 : for (i = 0; i < file->blockmax; ++i) {</span>
|
||||
<span class="lineNum"> 285 </span><span class="lineCov"> 140653 : struct snapraid_block* block = fs_file2block_get(file, i);</span>
|
||||
<span class="lineNum"> 286 </span> : unsigned block_state;
|
||||
<span class="lineNum"> 287 </span> :
|
||||
<span class="lineNum"> 288 </span> : /* in case we scan after an aborted sync, */
|
||||
<span class="lineNum"> 289 </span> : /* we could get also intermediate states */
|
||||
<span class="lineNum"> 290 </span><span class="lineCov"> 140577 : block_state = block_state_get(block);</span>
|
||||
<span class="lineNum"> 291 </span><span class="lineCov"> 140577 : switch (block_state) {</span>
|
||||
<span class="lineNum"> 290 </span><span class="lineCov"> 140653 : block_state = block_state_get(block);</span>
|
||||
<span class="lineNum"> 291 </span><span class="lineCov"> 140653 : switch (block_state) {</span>
|
||||
<span class="lineNum"> 292 </span> : case BLOCK_STATE_BLK :
|
||||
<span class="lineNum"> 293 </span> : /* we keep the hash making it an "old" hash, because the parity is still containing data for it */
|
||||
<span class="lineNum"> 294 </span><span class="lineCov"> 35580 : break;</span>
|
||||
<span class="lineNum"> 294 </span><span class="lineCov"> 35656 : break;</span>
|
||||
<span class="lineNum"> 295 </span> : case BLOCK_STATE_CHG :
|
||||
<span class="lineNum"> 296 </span> : /* if we have not already cleared the past hash */
|
||||
<span class="lineNum"> 297 </span><span class="lineCov"> 28040 : if (!state->clear_past_hash) {</span>
|
||||
|
|
@ -383,23 +383,23 @@
|
|||
<span class="lineNum"> 321 </span> : }
|
||||
<span class="lineNum"> 322 </span> :
|
||||
<span class="lineNum"> 323 </span> : /* set the block as deleted */
|
||||
<span class="lineNum"> 324 </span><span class="lineCov"> 140577 : block_state_set(block, BLOCK_STATE_DELETED);</span>
|
||||
<span class="lineNum"> 324 </span><span class="lineCov"> 140653 : block_state_set(block, BLOCK_STATE_DELETED);</span>
|
||||
<span class="lineNum"> 325 </span> : }
|
||||
<span class="lineNum"> 326 </span> :
|
||||
<span class="lineNum"> 327 </span> : /* mark the file as deleted */
|
||||
<span class="lineNum"> 328 </span><span class="lineCov"> 57015 : file_flag_set(file, FILE_IS_DELETED);</span>
|
||||
<span class="lineNum"> 328 </span><span class="lineCov"> 57013 : file_flag_set(file, FILE_IS_DELETED);</span>
|
||||
<span class="lineNum"> 329 </span> :
|
||||
<span class="lineNum"> 330 </span> : /* insert it in the list of deleted blocks */
|
||||
<span class="lineNum"> 331 </span><span class="lineCov"> 57015 : tommy_list_insert_tail(&disk->deletedlist, &file->nodelist, file);</span>
|
||||
<a name="332"><span class="lineNum"> 332 </span><span class="lineCov"> 57015 : }</span></a>
|
||||
<span class="lineNum"> 331 </span><span class="lineCov"> 57013 : tommy_list_insert_tail(&disk->deletedlist, &file->nodelist, file);</span>
|
||||
<a name="332"><span class="lineNum"> 332 </span><span class="lineCov"> 57013 : }</span></a>
|
||||
<span class="lineNum"> 333 </span> :
|
||||
<span class="lineNum"> 334 </span><span class="lineCov"> 101881 : static void scan_file_delayed_allocate(struct snapraid_scan* scan, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 334 </span><span class="lineCov"> 101879 : static void scan_file_delayed_allocate(struct snapraid_scan* scan, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 335 </span> : {
|
||||
<span class="lineNum"> 336 </span><span class="lineCov"> 101881 : struct snapraid_state* state = scan->state;</span>
|
||||
<span class="lineNum"> 337 </span><span class="lineCov"> 101881 : struct snapraid_disk* disk = scan->disk;</span>
|
||||
<span class="lineNum"> 336 </span><span class="lineCov"> 101879 : struct snapraid_state* state = scan->state;</span>
|
||||
<span class="lineNum"> 337 </span><span class="lineCov"> 101879 : struct snapraid_disk* disk = scan->disk;</span>
|
||||
<span class="lineNum"> 338 </span> :
|
||||
<span class="lineNum"> 339 </span> : /* if we sort for physical offsets we have to read them for new files */
|
||||
<span class="lineNum"> 340 </span><span class="lineCov"> 101881 : if (state->opt.force_order == SORT_PHYSICAL</span>
|
||||
<span class="lineNum"> 340 </span><span class="lineCov"> 101879 : if (state->opt.force_order == SORT_PHYSICAL</span>
|
||||
<span class="lineNum"> 341 </span><span class="lineCov"> 11432 : && file->physical == FILEPHY_UNREAD_OFFSET</span>
|
||||
<span class="lineNum"> 342 </span> : ) {
|
||||
<span class="lineNum"> 343 </span> : char path_next[PATH_MAX];
|
||||
|
|
@ -415,30 +415,30 @@
|
|||
<span class="lineNum"> 353 </span> : }
|
||||
<span class="lineNum"> 354 </span> :
|
||||
<span class="lineNum"> 355 </span> : /* insert in the delayed list */
|
||||
<span class="lineNum"> 356 </span><span class="lineCov"> 101881 : tommy_list_insert_tail(&scan->file_insert_list, &file->nodelist, file);</span>
|
||||
<span class="lineNum"> 357 </span><span class="lineCov"> 101881 : }</span>
|
||||
<span class="lineNum"> 356 </span><span class="lineCov"> 101879 : tommy_list_insert_tail(&scan->file_insert_list, &file->nodelist, file);</span>
|
||||
<span class="lineNum"> 357 </span><span class="lineCov"> 101879 : }</span>
|
||||
<span class="lineNum"> 358 </span> :
|
||||
<span class="lineNum"> 359 </span> : /**
|
||||
<span class="lineNum"> 360 </span> : * Check if a file is completely formed of blocks with invalid parity,
|
||||
<a name="361"><span class="lineNum"> 361 </span> : * and no rehash is tagged, and if it has at least one block.</a>
|
||||
<span class="lineNum"> 362 </span> : */
|
||||
<span class="lineNum"> 363 </span><span class="lineCov"> 1025550 : static int file_is_full_invalid_parity_and_stable(struct snapraid_state* state, struct snapraid_disk* disk, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 363 </span><span class="lineCov"> 1025552 : static int file_is_full_invalid_parity_and_stable(struct snapraid_state* state, struct snapraid_disk* disk, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 364 </span> : {
|
||||
<span class="lineNum"> 365 </span> : block_off_t i;
|
||||
<span class="lineNum"> 366 </span> :
|
||||
<span class="lineNum"> 367 </span> : /* with no block, it never has an invalid parity */
|
||||
<span class="lineNum"> 368 </span><span class="lineCov"> 1025550 : if (file->blockmax == 0)</span>
|
||||
<span class="lineNum"> 369 </span><span class="lineCov"> 1439 : return 0;</span>
|
||||
<span class="lineNum"> 368 </span><span class="lineCov"> 1025552 : if (file->blockmax == 0)</span>
|
||||
<span class="lineNum"> 369 </span><span class="lineCov"> 1437 : return 0;</span>
|
||||
<span class="lineNum"> 370 </span> :
|
||||
<span class="lineNum"> 371 </span> : /* check all blocks */
|
||||
<span class="lineNum"> 372 </span><span class="lineCov"> 1080079 : for (i = 0; i < file->blockmax; ++i) {</span>
|
||||
<span class="lineNum"> 372 </span><span class="lineCov"> 1080083 : for (i = 0; i < file->blockmax; ++i) {</span>
|
||||
<span class="lineNum"> 373 </span> : snapraid_info info;
|
||||
<span class="lineNum"> 374 </span><span class="lineCov"> 1057392 : struct snapraid_block* block = fs_file2block_get(file, i);</span>
|
||||
<span class="lineNum"> 374 </span><span class="lineCov"> 1057396 : struct snapraid_block* block = fs_file2block_get(file, i);</span>
|
||||
<span class="lineNum"> 375 </span> : block_off_t parity_pos;
|
||||
<span class="lineNum"> 376 </span> :
|
||||
<span class="lineNum"> 377 </span> : /* exclude blocks with parity */
|
||||
<span class="lineNum"> 378 </span><span class="lineCov"> 1057392 : if (!block_has_invalid_parity(block))</span>
|
||||
<span class="lineNum"> 379 </span><span class="lineCov"> 1001424 : return 0;</span>
|
||||
<span class="lineNum"> 378 </span><span class="lineCov"> 1057396 : if (!block_has_invalid_parity(block))</span>
|
||||
<span class="lineNum"> 379 </span><span class="lineCov"> 1001428 : return 0;</span>
|
||||
<span class="lineNum"> 380 </span> :
|
||||
<span class="lineNum"> 381 </span> : /*
|
||||
<span class="lineNum"> 382 </span> : * Get the parity position.
|
||||
|
|
@ -525,7 +525,7 @@
|
|||
<span class="lineNum"> 463 </span> : *
|
||||
<a name="464"><span class="lineNum"> 464 </span> : * If this happens, we read also the physical offset, to avoid to read it later.</a>
|
||||
<span class="lineNum"> 465 </span> : */
|
||||
<span class="lineNum"> 466 </span><span class="lineCov"> 79194 : static void scan_file_refresh(struct snapraid_scan* scan, const char* sub, struct stat* st, uint64_t* physical)</span>
|
||||
<span class="lineNum"> 466 </span><span class="lineCov"> 79192 : static void scan_file_refresh(struct snapraid_scan* scan, const char* sub, struct stat* st, uint64_t* physical)</span>
|
||||
<span class="lineNum"> 467 </span> : {
|
||||
<span class="lineNum"> 468 </span> : #if HAVE_LSTAT_SYNC
|
||||
<span class="lineNum"> 469 </span> : struct snapraid_state* state = scan->state;
|
||||
|
|
@ -597,43 +597,43 @@
|
|||
<span class="lineNum"> 535 </span> : (void)st;
|
||||
<span class="lineNum"> 536 </span> : (void)physical;
|
||||
<span class="lineNum"> 537 </span> : #endif
|
||||
<span class="lineNum"> 538 </span><span class="lineCov"> 79194 : }</span>
|
||||
<span class="lineNum"> 538 </span><span class="lineCov"> 79192 : }</span>
|
||||
<span class="lineNum"> 539 </span> :
|
||||
<span class="lineNum"> 540 </span> : /**
|
||||
<a name="541"><span class="lineNum"> 541 </span> : * Insert the file in the data set.</a>
|
||||
<span class="lineNum"> 542 </span> : */
|
||||
<span class="lineNum"> 543 </span><span class="lineCov"> 101881 : static void scan_file_insert(struct snapraid_scan* scan, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 543 </span><span class="lineCov"> 101879 : static void scan_file_insert(struct snapraid_scan* scan, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 544 </span> : {
|
||||
<span class="lineNum"> 545 </span><span class="lineCov"> 101881 : struct snapraid_disk* disk = scan->disk;</span>
|
||||
<span class="lineNum"> 545 </span><span class="lineCov"> 101879 : struct snapraid_disk* disk = scan->disk;</span>
|
||||
<span class="lineNum"> 546 </span> :
|
||||
<span class="lineNum"> 547 </span> : /* insert the file in the containers */
|
||||
<span class="lineNum"> 548 </span><span class="lineCov"> 101881 : if (!file_flag_has(file, FILE_IS_WITHOUT_INODE))</span>
|
||||
<span class="lineNum"> 549 </span><span class="lineCov"> 101881 : tommy_hashdyn_insert(&disk->inodeset, &file->nodeset, file, file_inode_hash(file->inode));</span>
|
||||
<span class="lineNum"> 550 </span><span class="lineCov"> 101881 : tommy_hashdyn_insert(&disk->pathset, &file->pathset, file, file_path_hash(file->sub));</span>
|
||||
<span class="lineNum"> 551 </span><span class="lineCov"> 101881 : tommy_hashdyn_insert(&disk->stampset, &file->stampset, file, file_stamp_hash(file->size, file->mtime_sec, file->mtime_nsec));</span>
|
||||
<span class="lineNum"> 548 </span><span class="lineCov"> 101879 : if (!file_flag_has(file, FILE_IS_WITHOUT_INODE))</span>
|
||||
<span class="lineNum"> 549 </span><span class="lineCov"> 101879 : tommy_hashdyn_insert(&disk->inodeset, &file->nodeset, file, file_inode_hash(file->inode));</span>
|
||||
<span class="lineNum"> 550 </span><span class="lineCov"> 101879 : tommy_hashdyn_insert(&disk->pathset, &file->pathset, file, file_path_hash(file->sub));</span>
|
||||
<span class="lineNum"> 551 </span><span class="lineCov"> 101879 : tommy_hashdyn_insert(&disk->stampset, &file->stampset, file, file_stamp_hash(file->size, file->mtime_sec, file->mtime_nsec));</span>
|
||||
<span class="lineNum"> 552 </span> :
|
||||
<span class="lineNum"> 553 </span> : /* delayed allocation of the parity */
|
||||
<span class="lineNum"> 554 </span><span class="lineCov"> 101881 : scan_file_delayed_allocate(scan, file);</span>
|
||||
<span class="lineNum"> 555 </span><span class="lineCov"> 101881 : }</span>
|
||||
<span class="lineNum"> 554 </span><span class="lineCov"> 101879 : scan_file_delayed_allocate(scan, file);</span>
|
||||
<span class="lineNum"> 555 </span><span class="lineCov"> 101879 : }</span>
|
||||
<span class="lineNum"> 556 </span> :
|
||||
<span class="lineNum"> 557 </span> : /**
|
||||
<span class="lineNum"> 558 </span> : * Remove the file from the data set.
|
||||
<span class="lineNum"> 559 </span> : *
|
||||
<a name="560"><span class="lineNum"> 560 </span> : * File is then deleted.</a>
|
||||
<span class="lineNum"> 561 </span> : */
|
||||
<span class="lineNum"> 562 </span><span class="lineCov"> 57015 : static void scan_file_remove(struct snapraid_scan* scan, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 562 </span><span class="lineCov"> 57013 : static void scan_file_remove(struct snapraid_scan* scan, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 563 </span> : {
|
||||
<span class="lineNum"> 564 </span><span class="lineCov"> 57015 : struct snapraid_disk* disk = scan->disk;</span>
|
||||
<span class="lineNum"> 564 </span><span class="lineCov"> 57013 : struct snapraid_disk* disk = scan->disk;</span>
|
||||
<span class="lineNum"> 565 </span> :
|
||||
<span class="lineNum"> 566 </span> : /* remove the file from the containers */
|
||||
<span class="lineNum"> 567 </span><span class="lineCov"> 57015 : if (!file_flag_has(file, FILE_IS_WITHOUT_INODE))</span>
|
||||
<span class="lineNum"> 568 </span><span class="lineCov"> 56941 : tommy_hashdyn_remove_existing(&disk->inodeset, &file->nodeset);</span>
|
||||
<span class="lineNum"> 569 </span><span class="lineCov"> 57015 : tommy_hashdyn_remove_existing(&disk->pathset, &file->pathset);</span>
|
||||
<span class="lineNum"> 570 </span><span class="lineCov"> 57015 : tommy_hashdyn_remove_existing(&disk->stampset, &file->stampset);</span>
|
||||
<span class="lineNum"> 567 </span><span class="lineCov"> 57013 : if (!file_flag_has(file, FILE_IS_WITHOUT_INODE))</span>
|
||||
<span class="lineNum"> 568 </span><span class="lineCov"> 56967 : tommy_hashdyn_remove_existing(&disk->inodeset, &file->nodeset);</span>
|
||||
<span class="lineNum"> 569 </span><span class="lineCov"> 57013 : tommy_hashdyn_remove_existing(&disk->pathset, &file->pathset);</span>
|
||||
<span class="lineNum"> 570 </span><span class="lineCov"> 57013 : tommy_hashdyn_remove_existing(&disk->stampset, &file->stampset);</span>
|
||||
<span class="lineNum"> 571 </span> :
|
||||
<span class="lineNum"> 572 </span> : /* deallocate the file from the parity */
|
||||
<span class="lineNum"> 573 </span><span class="lineCov"> 57015 : scan_file_deallocate(scan, file);</span>
|
||||
<span class="lineNum"> 574 </span><span class="lineCov"> 57015 : }</span>
|
||||
<span class="lineNum"> 573 </span><span class="lineCov"> 57013 : scan_file_deallocate(scan, file);</span>
|
||||
<span class="lineNum"> 574 </span><span class="lineCov"> 57013 : }</span>
|
||||
<span class="lineNum"> 575 </span> :
|
||||
<span class="lineNum"> 576 </span> : /**
|
||||
<span class="lineNum"> 577 </span> : * Keep the file as it's (or with only a name/inode modification).
|
||||
|
|
@ -646,12 +646,12 @@
|
|||
<span class="lineNum"> 584 </span> : * This could happen after a failed sync, when some other files are deleted,
|
||||
<a name="585"><span class="lineNum"> 585 </span> : * and then new ones can be moved backward to fill the hole created.</a>
|
||||
<span class="lineNum"> 586 </span> : */
|
||||
<span class="lineNum"> 587 </span><span class="lineCov"> 1025550 : static void scan_file_keep(struct snapraid_scan* scan, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 587 </span><span class="lineCov"> 1025552 : static void scan_file_keep(struct snapraid_scan* scan, struct snapraid_file* file)</span>
|
||||
<span class="lineNum"> 588 </span> : {
|
||||
<span class="lineNum"> 589 </span><span class="lineCov"> 1025550 : struct snapraid_disk* disk = scan->disk;</span>
|
||||
<span class="lineNum"> 589 </span><span class="lineCov"> 1025552 : struct snapraid_disk* disk = scan->disk;</span>
|
||||
<span class="lineNum"> 590 </span> :
|
||||
<span class="lineNum"> 591 </span> : /* if the file is full invalid, schedule a reinsert at later stage */
|
||||
<span class="lineNum"> 592 </span><span class="lineCov"> 1025550 : if (file_is_full_invalid_parity_and_stable(scan->state, disk, file)) {</span>
|
||||
<span class="lineNum"> 592 </span><span class="lineCov"> 1025552 : if (file_is_full_invalid_parity_and_stable(scan->state, disk, file)) {</span>
|
||||
<span class="lineNum"> 593 </span><span class="lineCov"> 22687 : struct snapraid_file* copy = file_dup(file);</span>
|
||||
<span class="lineNum"> 594 </span> :
|
||||
<span class="lineNum"> 595 </span> : /* remove the file */
|
||||
|
|
@ -660,7 +660,7 @@
|
|||
<span class="lineNum"> 598 </span> : /* reinsert the copy in the delayed list */
|
||||
<span class="lineNum"> 599 </span><span class="lineCov"> 22687 : scan_file_insert(scan, copy);</span>
|
||||
<span class="lineNum"> 600 </span> : }
|
||||
<span class="lineNum"> 601 </span><span class="lineCov"> 1025550 : }</span>
|
||||
<span class="lineNum"> 601 </span><span class="lineCov"> 1025552 : }</span>
|
||||
<span class="lineNum"> 602 </span> :
|
||||
<span class="lineNum"> 603 </span> : /**
|
||||
<a name="604"><span class="lineNum"> 604 </span> : * Process a file.</a>
|
||||
|
|
@ -717,17 +717,17 @@
|
|||
<span class="lineNum"> 655 </span> : /* identify moved files with past inodes and hardlinks with the new inodes */
|
||||
<span class="lineNum"> 656 </span><span class="lineCov"> 1104939 : if (file) {</span>
|
||||
<span class="lineNum"> 657 </span> : /* check if the file is not changed */
|
||||
<span class="lineNum"> 658 </span><span class="lineCov"> 943901 : if (file->size == st->st_size</span>
|
||||
<span class="lineNum"> 659 </span><span class="lineCov"> 935613 : && file->mtime_sec == st->st_mtime</span>
|
||||
<span class="lineNum"> 660 </span><span class="lineCov"> 932556 : && (file->mtime_nsec == STAT_NSEC(st)</span>
|
||||
<span class="lineNum"> 658 </span><span class="lineCov"> 945290 : if (file->size == st->st_size</span>
|
||||
<span class="lineNum"> 659 </span><span class="lineCov"> 929850 : && file->mtime_sec == st->st_mtime</span>
|
||||
<span class="lineNum"> 660 </span><span class="lineCov"> 926844 : && (file->mtime_nsec == STAT_NSEC(st)</span>
|
||||
<span class="lineNum"> 661 </span> : /* always accept the stored value if it's STAT_NSEC_INVALID */
|
||||
<span class="lineNum"> 662 </span> : /* it happens when upgrading from an old version of SnapRAID */
|
||||
<span class="lineNum"> 663 </span> : /* not yet supporting the nanosecond field */
|
||||
<span class="lineNum"> 664 </span><span class="lineCov"> 1 : || file->mtime_nsec == STAT_NSEC_INVALID</span>
|
||||
<span class="lineNum"> 664 </span><span class="lineCov"> 6 : || file->mtime_nsec == STAT_NSEC_INVALID</span>
|
||||
<span class="lineNum"> 665 </span> : )
|
||||
<span class="lineNum"> 666 </span> : ) {
|
||||
<span class="lineNum"> 667 </span> : /* check if multiple files have the same inode */
|
||||
<span class="lineNum"> 668 </span><span class="lineCov"> 932555 : if (file_flag_has(file, FILE_IS_PRESENT)) {</span>
|
||||
<span class="lineNum"> 668 </span><span class="lineCov"> 926838 : if (file_flag_has(file, FILE_IS_PRESENT)) {</span>
|
||||
<span class="lineNum"> 669 </span> : #if HAVE_STRUCT_STAT_ST_NLINK
|
||||
<span class="lineNum"> 670 </span><span class="lineCov"> 195 : if (st->st_nlink <= 1) {</span>
|
||||
<span class="lineNum"> 671 </span> : /* LCOV_EXCL_START */
|
||||
|
|
@ -742,11 +742,11 @@
|
|||
<span class="lineNum"> 680 </span> : }
|
||||
<span class="lineNum"> 681 </span> :
|
||||
<span class="lineNum"> 682 </span> : /* mark as present */
|
||||
<span class="lineNum"> 683 </span><span class="lineCov"> 932360 : file_flag_set(file, FILE_IS_PRESENT);</span>
|
||||
<span class="lineNum"> 683 </span><span class="lineCov"> 926643 : file_flag_set(file, FILE_IS_PRESENT);</span>
|
||||
<span class="lineNum"> 684 </span> :
|
||||
<span class="lineNum"> 685 </span> : /* update the nanoseconds mtime only if different */
|
||||
<span class="lineNum"> 686 </span> : /* to avoid unneeded updates */
|
||||
<span class="lineNum"> 687 </span><span class="lineCov"> 932360 : if (file->mtime_nsec == STAT_NSEC_INVALID</span>
|
||||
<span class="lineNum"> 687 </span><span class="lineCov"> 926643 : if (file->mtime_nsec == STAT_NSEC_INVALID</span>
|
||||
<span class="lineNum"> 688 </span><span class="lineNoCov"> 0 : && STAT_NSEC(st) != file->mtime_nsec</span>
|
||||
<span class="lineNum"> 689 </span> : ) {
|
||||
<span class="lineNum"> 690 </span><span class="lineNoCov"> 0 : file->mtime_nsec = STAT_NSEC(st);</span>
|
||||
|
|
@ -755,7 +755,7 @@
|
|||
<span class="lineNum"> 693 </span><span class="lineNoCov"> 0 : state->need_write = 1;</span>
|
||||
<span class="lineNum"> 694 </span> : }
|
||||
<span class="lineNum"> 695 </span> :
|
||||
<span class="lineNum"> 696 </span><span class="lineCov"> 932360 : if (strcmp(file->sub, sub) != 0) {</span>
|
||||
<span class="lineNum"> 696 </span><span class="lineCov"> 926643 : if (strcmp(file->sub, sub) != 0) {</span>
|
||||
<span class="lineNum"> 697 </span> : /* if the path is different, it means a moved file with the same inode */
|
||||
<span class="lineNum"> 698 </span><span class="lineCov"> 155 : ++scan->count_move;</span>
|
||||
<span class="lineNum"> 699 </span> :
|
||||
|
|
@ -777,18 +777,18 @@
|
|||
<span class="lineNum"> 715 </span><span class="lineCov"> 155 : state->need_write = 1;</span>
|
||||
<span class="lineNum"> 716 </span> : } else {
|
||||
<span class="lineNum"> 717 </span> : /* otherwise it's equal */
|
||||
<span class="lineNum"> 718 </span><span class="lineCov"> 932205 : ++scan->count_equal;</span>
|
||||
<span class="lineNum"> 718 </span><span class="lineCov"> 926488 : ++scan->count_equal;</span>
|
||||
<span class="lineNum"> 719 </span> :
|
||||
<span class="lineNum"> 720 </span><span class="lineCov"> 932205 : if (state->opt.gui) {</span>
|
||||
<span class="lineNum"> 720 </span><span class="lineCov"> 926488 : if (state->opt.gui) {</span>
|
||||
<span class="lineNum"> 721 </span><span class="lineCov"> 22611 : log_tag("scan:equal:%s:%s\n", disk->name, esc_tag(file->sub, esc_buffer));</span>
|
||||
<span class="lineNum"> 722 </span> : }
|
||||
<span class="lineNum"> 723 </span> : }
|
||||
<span class="lineNum"> 724 </span> :
|
||||
<span class="lineNum"> 725 </span> : /* mark the file as kept */
|
||||
<span class="lineNum"> 726 </span><span class="lineCov"> 932360 : scan_file_keep(scan, file);</span>
|
||||
<span class="lineNum"> 726 </span><span class="lineCov"> 926643 : scan_file_keep(scan, file);</span>
|
||||
<span class="lineNum"> 727 </span> :
|
||||
<span class="lineNum"> 728 </span> : /* nothing more to do */
|
||||
<span class="lineNum"> 729 </span><span class="lineCov"> 932360 : return;</span>
|
||||
<span class="lineNum"> 729 </span><span class="lineCov"> 926643 : return;</span>
|
||||
<span class="lineNum"> 730 </span> : }
|
||||
<span class="lineNum"> 731 </span> :
|
||||
<span class="lineNum"> 732 </span> : /* here the file matches the inode, but not the other info */
|
||||
|
|
@ -797,7 +797,7 @@
|
|||
<span class="lineNum"> 735 </span> : /* or a file-system with not persistent inodes */
|
||||
<span class="lineNum"> 736 </span> :
|
||||
<span class="lineNum"> 737 </span> : /* for sure it cannot be already present */
|
||||
<span class="lineNum"> 738 </span><span class="lineCov"> 11346 : if (file_flag_has(file, FILE_IS_PRESENT)) {</span>
|
||||
<span class="lineNum"> 738 </span><span class="lineCov"> 18452 : if (file_flag_has(file, FILE_IS_PRESENT)) {</span>
|
||||
<span class="lineNum"> 739 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 740 </span> : log_fatal("Internal inode '%" PRIu64 "' inconsistency for files '%s%s' and '%s%s' matching and already present but different\n", file->inode, disk->dir, sub, disk->dir, file->sub);
|
||||
<span class="lineNum"> 741 </span> : os_abort();
|
||||
|
|
@ -810,44 +810,44 @@
|
|||
<span class="lineNum"> 748 </span> : /* otherwise, it will get removed */
|
||||
<span class="lineNum"> 749 </span> :
|
||||
<span class="lineNum"> 750 </span> : /* remove from the inode set */
|
||||
<span class="lineNum"> 751 </span><span class="lineCov"> 11346 : tommy_hashdyn_remove_existing(&disk->inodeset, &file->nodeset);</span>
|
||||
<span class="lineNum"> 751 </span><span class="lineCov"> 18452 : tommy_hashdyn_remove_existing(&disk->inodeset, &file->nodeset);</span>
|
||||
<span class="lineNum"> 752 </span> :
|
||||
<span class="lineNum"> 753 </span> : /* clear the inode */
|
||||
<span class="lineNum"> 754 </span> : /* this is not really needed for correct functionality */
|
||||
<span class="lineNum"> 755 </span> : /* because we are going to set FILE_IS_WITHOUT_INODE */
|
||||
<span class="lineNum"> 756 </span> : /* but it's easier for debugging to have invalid inodes set to 0 */
|
||||
<span class="lineNum"> 757 </span><span class="lineCov"> 11346 : file->inode = 0;</span>
|
||||
<span class="lineNum"> 757 </span><span class="lineCov"> 18452 : file->inode = 0;</span>
|
||||
<span class="lineNum"> 758 </span> :
|
||||
<span class="lineNum"> 759 </span> : /* mark as missing inode */
|
||||
<span class="lineNum"> 760 </span><span class="lineCov"> 11346 : file_flag_set(file, FILE_IS_WITHOUT_INODE);</span>
|
||||
<span class="lineNum"> 760 </span><span class="lineCov"> 18452 : file_flag_set(file, FILE_IS_WITHOUT_INODE);</span>
|
||||
<span class="lineNum"> 761 </span> :
|
||||
<span class="lineNum"> 762 </span> : /* go further to find it by name */
|
||||
<span class="lineNum"> 763 </span> : }
|
||||
<span class="lineNum"> 764 </span> :
|
||||
<span class="lineNum"> 765 </span> : /* initialize for later overwrite */
|
||||
<span class="lineNum"> 766 </span><span class="lineCov"> 172384 : is_file_reported = 0;</span>
|
||||
<span class="lineNum"> 767 </span><span class="lineCov"> 172384 : is_original_file_size_different_than_zero = 0;</span>
|
||||
<span class="lineNum"> 766 </span><span class="lineCov"> 178101 : is_file_reported = 0;</span>
|
||||
<span class="lineNum"> 767 </span><span class="lineCov"> 178101 : is_original_file_size_different_than_zero = 0;</span>
|
||||
<span class="lineNum"> 768 </span> :
|
||||
<span class="lineNum"> 769 </span> : /* then try finding it by name */
|
||||
<span class="lineNum"> 770 </span><span class="lineCov"> 172384 : file = tommy_hashdyn_search(&disk->pathset, file_path_compare_to_arg, sub, file_path_hash(sub));</span>
|
||||
<span class="lineNum"> 770 </span><span class="lineCov"> 178101 : file = tommy_hashdyn_search(&disk->pathset, file_path_compare_to_arg, sub, file_path_hash(sub));</span>
|
||||
<span class="lineNum"> 771 </span> :
|
||||
<span class="lineNum"> 772 </span> : /* keep track if the file already exists */
|
||||
<span class="lineNum"> 773 </span><span class="lineCov"> 172384 : is_file_already_present = file != 0;</span>
|
||||
<span class="lineNum"> 773 </span><span class="lineCov"> 178101 : is_file_already_present = file != 0;</span>
|
||||
<span class="lineNum"> 774 </span> :
|
||||
<span class="lineNum"> 775 </span><span class="lineCov"> 172384 : if (is_file_already_present) {</span>
|
||||
<span class="lineNum"> 775 </span><span class="lineCov"> 178101 : if (is_file_already_present) {</span>
|
||||
<span class="lineNum"> 776 </span> : /* if the file is without an inode */
|
||||
<span class="lineNum"> 777 </span><span class="lineCov"> 97871 : if (file_flag_has(file, FILE_IS_WITHOUT_INODE)) {</span>
|
||||
<span class="lineNum"> 777 </span><span class="lineCov"> 103588 : if (file_flag_has(file, FILE_IS_WITHOUT_INODE)) {</span>
|
||||
<span class="lineNum"> 778 </span> : /* set it now */
|
||||
<span class="lineNum"> 779 </span><span class="lineCov"> 11286 : file->inode = st->st_ino;</span>
|
||||
<span class="lineNum"> 779 </span><span class="lineCov"> 18420 : file->inode = st->st_ino;</span>
|
||||
<span class="lineNum"> 780 </span> :
|
||||
<span class="lineNum"> 781 </span> : /* insert in the set */
|
||||
<span class="lineNum"> 782 </span><span class="lineCov"> 11286 : tommy_hashdyn_insert(&disk->inodeset, &file->nodeset, file, file_inode_hash(file->inode));</span>
|
||||
<span class="lineNum"> 782 </span><span class="lineCov"> 18420 : tommy_hashdyn_insert(&disk->inodeset, &file->nodeset, file, file_inode_hash(file->inode));</span>
|
||||
<span class="lineNum"> 783 </span> :
|
||||
<span class="lineNum"> 784 </span> : /* unmark as missing inode */
|
||||
<span class="lineNum"> 785 </span><span class="lineCov"> 11286 : file_flag_clear(file, FILE_IS_WITHOUT_INODE);</span>
|
||||
<span class="lineNum"> 785 </span><span class="lineCov"> 18420 : file_flag_clear(file, FILE_IS_WITHOUT_INODE);</span>
|
||||
<span class="lineNum"> 786 </span> : } else {
|
||||
<span class="lineNum"> 787 </span> : /* here the inode has to be different, otherwise we would have found it before */
|
||||
<span class="lineNum"> 788 </span><span class="lineCov"> 86585 : if (file->inode == st->st_ino) {</span>
|
||||
<span class="lineNum"> 788 </span><span class="lineCov"> 85168 : if (file->inode == st->st_ino) {</span>
|
||||
<span class="lineNum"> 789 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 790 </span> : log_fatal("Internal inconsistency in inode '%" PRIu64 "' for files '%s%s' as unexpected matching\n", file->inode, disk->dir, sub);
|
||||
<span class="lineNum"> 791 </span> : os_abort();
|
||||
|
|
@ -856,7 +856,7 @@
|
|||
<span class="lineNum"> 794 </span> : }
|
||||
<span class="lineNum"> 795 </span> :
|
||||
<span class="lineNum"> 796 </span> : /* for sure it cannot be already present */
|
||||
<span class="lineNum"> 797 </span><span class="lineCov"> 97871 : if (file_flag_has(file, FILE_IS_PRESENT)) {</span>
|
||||
<span class="lineNum"> 797 </span><span class="lineCov"> 103588 : if (file_flag_has(file, FILE_IS_PRESENT)) {</span>
|
||||
<span class="lineNum"> 798 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 799 </span> : log_fatal("Internal inconsistency in path for file '%s%s' matching and already present\n", disk->dir, sub);
|
||||
<span class="lineNum"> 800 </span> : os_abort();
|
||||
|
|
@ -864,9 +864,9 @@
|
|||
<span class="lineNum"> 802 </span> : }
|
||||
<span class="lineNum"> 803 </span> :
|
||||
<span class="lineNum"> 804 </span> : /* check if the file is not changed */
|
||||
<span class="lineNum"> 805 </span><span class="lineCov"> 97871 : if (file->size == st->st_size</span>
|
||||
<span class="lineNum"> 806 </span><span class="lineCov"> 97275 : && file->mtime_sec == st->st_mtime</span>
|
||||
<span class="lineNum"> 807 </span><span class="lineCov"> 93190 : && (file->mtime_nsec == STAT_NSEC(st)</span>
|
||||
<span class="lineNum"> 805 </span><span class="lineCov"> 103588 : if (file->size == st->st_size</span>
|
||||
<span class="lineNum"> 806 </span><span class="lineCov"> 102992 : && file->mtime_sec == st->st_mtime</span>
|
||||
<span class="lineNum"> 807 </span><span class="lineCov"> 98909 : && (file->mtime_nsec == STAT_NSEC(st)</span>
|
||||
<span class="lineNum"> 808 </span> : /* always accept the stored value if it's STAT_NSEC_INVALID */
|
||||
<span class="lineNum"> 809 </span> : /* it happens when upgrading from an old version of SnapRAID */
|
||||
<span class="lineNum"> 810 </span> : /* not yet supporting the nanosecond field */
|
||||
|
|
@ -874,11 +874,11 @@
|
|||
<span class="lineNum"> 812 </span> : )
|
||||
<span class="lineNum"> 813 </span> : ) {
|
||||
<span class="lineNum"> 814 </span> : /* mark as present */
|
||||
<span class="lineNum"> 815 </span><span class="lineCov"> 93190 : file_flag_set(file, FILE_IS_PRESENT);</span>
|
||||
<span class="lineNum"> 815 </span><span class="lineCov"> 98909 : file_flag_set(file, FILE_IS_PRESENT);</span>
|
||||
<span class="lineNum"> 816 </span> :
|
||||
<span class="lineNum"> 817 </span> : /* update the nano seconds mtime only if different */
|
||||
<span class="lineNum"> 818 </span> : /* to avoid unneeded updates */
|
||||
<span class="lineNum"> 819 </span><span class="lineCov"> 93190 : if (file->mtime_nsec == STAT_NSEC_INVALID</span>
|
||||
<span class="lineNum"> 819 </span><span class="lineCov"> 98909 : if (file->mtime_nsec == STAT_NSEC_INVALID</span>
|
||||
<span class="lineNum"> 820 </span><span class="lineNoCov"> 0 : && STAT_NSEC(st) != STAT_NSEC_INVALID</span>
|
||||
<span class="lineNum"> 821 </span> : ) {
|
||||
<span class="lineNum"> 822 </span><span class="lineNoCov"> 0 : file->mtime_nsec = STAT_NSEC(st);</span>
|
||||
|
|
@ -888,30 +888,30 @@
|
|||
<span class="lineNum"> 826 </span> : }
|
||||
<span class="lineNum"> 827 </span> :
|
||||
<span class="lineNum"> 828 </span> : /* if when processing the disk we used the past inodes values */
|
||||
<span class="lineNum"> 829 </span><span class="lineCov"> 93190 : if (has_past_inodes) {</span>
|
||||
<span class="lineNum"> 829 </span><span class="lineCov"> 98909 : if (has_past_inodes) {</span>
|
||||
<span class="lineNum"> 830 </span> : /* if persistent inodes are supported, we are sure that the inode number */
|
||||
<span class="lineNum"> 831 </span> : /* is now different, because otherwise the file would have been found */
|
||||
<span class="lineNum"> 832 </span> : /* when searching by inode. */
|
||||
<span class="lineNum"> 833 </span> : /* if the inode is different, it means a rewritten file with the same path */
|
||||
<span class="lineNum"> 834 </span> : /* like when restoring a backup that restores also the timestamp */
|
||||
<span class="lineNum"> 835 </span><span class="lineCov"> 93176 : ++scan->count_restore;</span>
|
||||
<span class="lineNum"> 835 </span><span class="lineCov"> 98895 : ++scan->count_restore;</span>
|
||||
<span class="lineNum"> 836 </span> :
|
||||
<span class="lineNum"> 837 </span><span class="lineCov"> 93176 : log_tag("scan:restore:%s:%s\n", disk->name, esc_tag(sub, esc_buffer));</span>
|
||||
<span class="lineNum"> 838 </span><span class="lineCov"> 93176 : if (is_diff) {</span>
|
||||
<span class="lineNum"> 837 </span><span class="lineCov"> 98895 : log_tag("scan:restore:%s:%s\n", disk->name, esc_tag(sub, esc_buffer));</span>
|
||||
<span class="lineNum"> 838 </span><span class="lineCov"> 98895 : if (is_diff) {</span>
|
||||
<span class="lineNum"> 839 </span><span class="lineNoCov"> 0 : printf("restore %s\n", fmt_term(disk, sub, esc_buffer));</span>
|
||||
<span class="lineNum"> 840 </span> : }
|
||||
<span class="lineNum"> 841 </span> :
|
||||
<span class="lineNum"> 842 </span> : /* remove from the inode set */
|
||||
<span class="lineNum"> 843 </span><span class="lineCov"> 93176 : tommy_hashdyn_remove_existing(&disk->inodeset, &file->nodeset);</span>
|
||||
<span class="lineNum"> 843 </span><span class="lineCov"> 98895 : tommy_hashdyn_remove_existing(&disk->inodeset, &file->nodeset);</span>
|
||||
<span class="lineNum"> 844 </span> :
|
||||
<span class="lineNum"> 845 </span> : /* save the new inode */
|
||||
<span class="lineNum"> 846 </span><span class="lineCov"> 93176 : file->inode = st->st_ino;</span>
|
||||
<span class="lineNum"> 846 </span><span class="lineCov"> 98895 : file->inode = st->st_ino;</span>
|
||||
<span class="lineNum"> 847 </span> :
|
||||
<span class="lineNum"> 848 </span> : /* reinsert in the inode set */
|
||||
<span class="lineNum"> 849 </span><span class="lineCov"> 93176 : tommy_hashdyn_insert(&disk->inodeset, &file->nodeset, file, file_inode_hash(file->inode));</span>
|
||||
<span class="lineNum"> 849 </span><span class="lineCov"> 98895 : tommy_hashdyn_insert(&disk->inodeset, &file->nodeset, file, file_inode_hash(file->inode));</span>
|
||||
<span class="lineNum"> 850 </span> :
|
||||
<span class="lineNum"> 851 </span> : /* we have to save the new inode */
|
||||
<span class="lineNum"> 852 </span><span class="lineCov"> 93176 : state->need_write = 1;</span>
|
||||
<span class="lineNum"> 852 </span><span class="lineCov"> 98895 : state->need_write = 1;</span>
|
||||
<span class="lineNum"> 853 </span> : } else {
|
||||
<span class="lineNum"> 854 </span> : /* otherwise it's the case of not persistent inode, where doesn't */
|
||||
<span class="lineNum"> 855 </span> : /* matter if the inode is different or equal, because they have no */
|
||||
|
|
@ -924,24 +924,24 @@
|
|||
<span class="lineNum"> 862 </span> : }
|
||||
<span class="lineNum"> 863 </span> :
|
||||
<span class="lineNum"> 864 </span> : /* mark the file as kept */
|
||||
<span class="lineNum"> 865 </span><span class="lineCov"> 93190 : scan_file_keep(scan, file);</span>
|
||||
<span class="lineNum"> 865 </span><span class="lineCov"> 98909 : scan_file_keep(scan, file);</span>
|
||||
<span class="lineNum"> 866 </span> :
|
||||
<span class="lineNum"> 867 </span> : /* nothing more to do */
|
||||
<span class="lineNum"> 868 </span><span class="lineCov"> 93190 : return;</span>
|
||||
<span class="lineNum"> 868 </span><span class="lineCov"> 98909 : return;</span>
|
||||
<span class="lineNum"> 869 </span> : }
|
||||
<span class="lineNum"> 870 </span> :
|
||||
<span class="lineNum"> 871 </span> : /* here if the file is changed but with the correct name */
|
||||
<span class="lineNum"> 872 </span> :
|
||||
<span class="lineNum"> 873 </span> : /* save the info for later printout */
|
||||
<span class="lineNum"> 874 </span><span class="lineCov"> 4681 : file_already_present_size = file->size;</span>
|
||||
<span class="lineNum"> 875 </span><span class="lineCov"> 4681 : file_already_present_mtime_sec = file->mtime_sec;</span>
|
||||
<span class="lineNum"> 876 </span><span class="lineCov"> 4681 : file_already_present_mtime_nsec = file->mtime_nsec;</span>
|
||||
<span class="lineNum"> 874 </span><span class="lineCov"> 4679 : file_already_present_size = file->size;</span>
|
||||
<span class="lineNum"> 875 </span><span class="lineCov"> 4679 : file_already_present_mtime_sec = file->mtime_sec;</span>
|
||||
<span class="lineNum"> 876 </span><span class="lineCov"> 4679 : file_already_present_mtime_nsec = file->mtime_nsec;</span>
|
||||
<span class="lineNum"> 877 </span> :
|
||||
<span class="lineNum"> 878 </span> : /* keep track if the original file was not of zero size */
|
||||
<span class="lineNum"> 879 </span><span class="lineCov"> 4681 : is_original_file_size_different_than_zero = file->size != 0;</span>
|
||||
<span class="lineNum"> 879 </span><span class="lineCov"> 4679 : is_original_file_size_different_than_zero = file->size != 0;</span>
|
||||
<span class="lineNum"> 880 </span> :
|
||||
<span class="lineNum"> 881 </span> : /* remove it, and continue to insert it again */
|
||||
<span class="lineNum"> 882 </span><span class="lineCov"> 4681 : scan_file_remove(scan, file);</span>
|
||||
<span class="lineNum"> 882 </span><span class="lineCov"> 4679 : scan_file_remove(scan, file);</span>
|
||||
<span class="lineNum"> 883 </span> :
|
||||
<span class="lineNum"> 884 </span> : /* and continue to insert it again */
|
||||
<span class="lineNum"> 885 </span> : } else {
|
||||
|
|
@ -953,13 +953,13 @@
|
|||
<span class="lineNum"> 891 </span> : /* refresh the info, to ensure that they are synced, */
|
||||
<span class="lineNum"> 892 </span> : /* note that we refresh only the info of the new or modified files */
|
||||
<span class="lineNum"> 893 </span> : /* because this is slow operation */
|
||||
<span class="lineNum"> 894 </span><span class="lineCov"> 79194 : scan_file_refresh(scan, sub, st, &physical);</span>
|
||||
<span class="lineNum"> 894 </span><span class="lineCov"> 79192 : scan_file_refresh(scan, sub, st, &physical);</span>
|
||||
<span class="lineNum"> 895 </span> :
|
||||
<span class="lineNum"> 896 </span> : #ifndef _WIN32
|
||||
<span class="lineNum"> 897 </span> : /* do a safety check to ensure that the common ext4 case of zeroing */
|
||||
<span class="lineNum"> 898 </span> : /* the size of a file after a crash doesn't propagate to the backup */
|
||||
<span class="lineNum"> 899 </span> : /* this check is specific for Linux, so we disable it on Windows */
|
||||
<span class="lineNum"> 900 </span><span class="lineCov"> 79194 : if (is_original_file_size_different_than_zero && st->st_size == 0) {</span>
|
||||
<span class="lineNum"> 900 </span><span class="lineCov"> 79192 : if (is_original_file_size_different_than_zero && st->st_size == 0) {</span>
|
||||
<span class="lineNum"> 901 </span><span class="lineNoCov"> 0 : if (!state->opt.force_zero) {</span>
|
||||
<span class="lineNum"> 902 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 903 </span> : log_fatal("The file '%s%s' has unexpected zero size!\n", disk->dir, sub);
|
||||
|
|
@ -978,33 +978,33 @@
|
|||
<span class="lineNum"> 916 </span> : #endif
|
||||
<span class="lineNum"> 917 </span> :
|
||||
<span class="lineNum"> 918 </span> : /* insert it */
|
||||
<span class="lineNum"> 919 </span><span class="lineCov"> 79194 : file = file_alloc(state->block_size, sub, st->st_size, st->st_mtime, STAT_NSEC(st), st->st_ino, physical);</span>
|
||||
<span class="lineNum"> 919 </span><span class="lineCov"> 79192 : file = file_alloc(state->block_size, sub, st->st_size, st->st_mtime, STAT_NSEC(st), st->st_ino, physical);</span>
|
||||
<span class="lineNum"> 920 </span> :
|
||||
<span class="lineNum"> 921 </span> : /* mark it as present */
|
||||
<span class="lineNum"> 922 </span><span class="lineCov"> 79194 : file_flag_set(file, FILE_IS_PRESENT);</span>
|
||||
<span class="lineNum"> 922 </span><span class="lineCov"> 79192 : file_flag_set(file, FILE_IS_PRESENT);</span>
|
||||
<span class="lineNum"> 923 </span> :
|
||||
<span class="lineNum"> 924 </span> : /* if copy detection is enabled */
|
||||
<span class="lineNum"> 925 </span> : /* note that the copy detection is tried also for updated files */
|
||||
<span class="lineNum"> 926 </span> : /* this makes sense because it may happen to have two different copies */
|
||||
<span class="lineNum"> 927 </span> : /* of the same file, and we move the right one over the wrong one */
|
||||
<span class="lineNum"> 928 </span> : /* in such case we have a "copy" over an "update" */
|
||||
<span class="lineNum"> 929 </span><span class="lineCov"> 79194 : if (!state->opt.force_nocopy) {</span>
|
||||
<span class="lineNum"> 930 </span><span class="lineCov"> 79194 : tommy_uint32_t hash = file_stamp_hash(file->size, file->mtime_sec, file->mtime_nsec);</span>
|
||||
<span class="lineNum"> 929 </span><span class="lineCov"> 79192 : if (!state->opt.force_nocopy) {</span>
|
||||
<span class="lineNum"> 930 </span><span class="lineCov"> 79192 : tommy_uint32_t hash = file_stamp_hash(file->size, file->mtime_sec, file->mtime_nsec);</span>
|
||||
<span class="lineNum"> 931 </span> :
|
||||
<span class="lineNum"> 932 </span> : /* search for a file with the same name and stamp in all the disks */
|
||||
<span class="lineNum"> 933 </span><span class="lineCov"> 423410 : for (i = state->disklist; i != 0; i = i->next) {</span>
|
||||
<span class="lineNum"> 934 </span><span class="lineCov"> 367852 : struct snapraid_disk* other_disk = i->data;</span>
|
||||
<span class="lineNum"> 933 </span><span class="lineCov"> 423396 : for (i = state->disklist; i != 0; i = i->next) {</span>
|
||||
<span class="lineNum"> 934 </span><span class="lineCov"> 367840 : struct snapraid_disk* other_disk = i->data;</span>
|
||||
<span class="lineNum"> 935 </span> : struct snapraid_file* other_file;
|
||||
<span class="lineNum"> 936 </span> :
|
||||
<span class="lineNum"> 937 </span> : /* if the nanosecond part of the time stamp is valid, search */
|
||||
<span class="lineNum"> 938 </span> : /* for name and stamp, otherwise for path and stamp */
|
||||
<span class="lineNum"> 939 </span><span class="lineCov"> 367852 : if (file->mtime_nsec != 0 && file->mtime_nsec != STAT_NSEC_INVALID)</span>
|
||||
<span class="lineNum"> 940 </span><span class="lineCov"> 367744 : other_file = tommy_hashdyn_search(&other_disk->stampset, file_namestamp_compare, file, hash);</span>
|
||||
<span class="lineNum"> 939 </span><span class="lineCov"> 367840 : if (file->mtime_nsec != 0 && file->mtime_nsec != STAT_NSEC_INVALID)</span>
|
||||
<span class="lineNum"> 940 </span><span class="lineCov"> 367732 : other_file = tommy_hashdyn_search(&other_disk->stampset, file_namestamp_compare, file, hash);</span>
|
||||
<span class="lineNum"> 941 </span> : else
|
||||
<span class="lineNum"> 942 </span><span class="lineCov"> 108 : other_file = tommy_hashdyn_search(&other_disk->stampset, file_pathstamp_compare, file, hash);</span>
|
||||
<span class="lineNum"> 943 </span> :
|
||||
<span class="lineNum"> 944 </span> : /* if found, and it's a fully hashed file */
|
||||
<span class="lineNum"> 945 </span><span class="lineCov"> 367852 : if (other_file && file_is_full_hashed_and_stable(scan->state, other_disk, other_file)) {</span>
|
||||
<span class="lineNum"> 945 </span><span class="lineCov"> 367840 : if (other_file && file_is_full_hashed_and_stable(scan->state, other_disk, other_file)) {</span>
|
||||
<span class="lineNum"> 946 </span> : /* assume that the file is a copy, and reuse the hash */
|
||||
<span class="lineNum"> 947 </span><span class="lineCov"> 23636 : file_copy(other_file, file);</span>
|
||||
<span class="lineNum"> 948 </span> :
|
||||
|
|
@ -1027,16 +1027,16 @@
|
|||
<span class="lineNum"> 965 </span> :
|
||||
<span class="lineNum"> 966 </span> : /* if not yet reported, do it now */
|
||||
<span class="lineNum"> 967 </span> : /* we postpone this to avoid to print two times the copied files */
|
||||
<span class="lineNum"> 968 </span><span class="lineCov"> 79194 : if (!is_file_reported) {</span>
|
||||
<span class="lineNum"> 969 </span><span class="lineCov"> 55558 : if (is_file_already_present) {</span>
|
||||
<span class="lineNum"> 970 </span><span class="lineCov"> 4681 : ++scan->count_change;</span>
|
||||
<span class="lineNum"> 968 </span><span class="lineCov"> 79192 : if (!is_file_reported) {</span>
|
||||
<span class="lineNum"> 969 </span><span class="lineCov"> 55556 : if (is_file_already_present) {</span>
|
||||
<span class="lineNum"> 970 </span><span class="lineCov"> 4679 : ++scan->count_change;</span>
|
||||
<span class="lineNum"> 971 </span> :
|
||||
<span class="lineNum"> 972 </span><span class="lineCov"> 14043 : log_tag("scan:update:%s:%s: %" PRIu64 " %" PRIu64 ".%d -> %" PRIu64 " %" PRIu64 ".%d\n", disk->name, esc_tag(sub, esc_buffer),</span>
|
||||
<span class="lineNum"> 972 </span><span class="lineCov"> 14037 : log_tag("scan:update:%s:%s: %" PRIu64 " %" PRIu64 ".%d -> %" PRIu64 " %" PRIu64 ".%d\n", disk->name, esc_tag(sub, esc_buffer),</span>
|
||||
<span class="lineNum"> 973 </span> : (uint64_t)file_already_present_size, (uint64_t)file_already_present_mtime_sec, file_already_present_mtime_nsec,
|
||||
<span class="lineNum"> 974 </span><span class="lineCov"> 9362 : (uint64_t)file->size, (uint64_t)file->mtime_sec, file->mtime_nsec</span>
|
||||
<span class="lineNum"> 974 </span><span class="lineCov"> 9358 : (uint64_t)file->size, (uint64_t)file->mtime_sec, file->mtime_nsec</span>
|
||||
<span class="lineNum"> 975 </span> : );
|
||||
<span class="lineNum"> 976 </span> :
|
||||
<span class="lineNum"> 977 </span><span class="lineCov"> 4681 : if (is_diff) {</span>
|
||||
<span class="lineNum"> 977 </span><span class="lineCov"> 4679 : if (is_diff) {</span>
|
||||
<span class="lineNum"> 978 </span><span class="lineCov"> 118 : printf("update %s\n", fmt_term(disk, sub, esc_buffer));</span>
|
||||
<span class="lineNum"> 979 </span> : }
|
||||
<span class="lineNum"> 980 </span> : } else {
|
||||
|
|
@ -1050,7 +1050,7 @@
|
|||
<span class="lineNum"> 988 </span> : }
|
||||
<span class="lineNum"> 989 </span> :
|
||||
<span class="lineNum"> 990 </span> : /* insert the file in the delayed list */
|
||||
<span class="lineNum"> 991 </span><span class="lineCov"> 79194 : scan_file_insert(scan, file);</span>
|
||||
<span class="lineNum"> 991 </span><span class="lineCov"> 79192 : scan_file_insert(scan, file);</span>
|
||||
<span class="lineNum"> 992 </span> : }
|
||||
<span class="lineNum"> 993 </span> :
|
||||
<span class="lineNum"> 994 </span> : /**
|
||||
|
|
@ -1143,15 +1143,15 @@
|
|||
<span class="lineNum"> 1081 </span> : };
|
||||
<a name="1082"><span class="lineNum"> 1082 </span> : </a>
|
||||
<span class="lineNum"> 1083 </span> : #if HAVE_STRUCT_DIRENT_D_INO
|
||||
<span class="lineNum"> 1084 </span><span class="lineCov"> 103390 : static int dd_ino_compare(const void* void_a, const void* void_b)</span>
|
||||
<span class="lineNum"> 1084 </span><span class="lineCov"> 103400 : static int dd_ino_compare(const void* void_a, const void* void_b)</span>
|
||||
<span class="lineNum"> 1085 </span> : {
|
||||
<span class="lineNum"> 1086 </span><span class="lineCov"> 103390 : const struct dirent_sorted* a = void_a;</span>
|
||||
<span class="lineNum"> 1087 </span><span class="lineCov"> 103390 : const struct dirent_sorted* b = void_b;</span>
|
||||
<span class="lineNum"> 1086 </span><span class="lineCov"> 103400 : const struct dirent_sorted* a = void_a;</span>
|
||||
<span class="lineNum"> 1087 </span><span class="lineCov"> 103400 : const struct dirent_sorted* b = void_b;</span>
|
||||
<span class="lineNum"> 1088 </span> :
|
||||
<span class="lineNum"> 1089 </span><span class="lineCov"> 103390 : if (a->d_ino < b->d_ino)</span>
|
||||
<span class="lineNum"> 1090 </span><span class="lineCov"> 49438 : return -1;</span>
|
||||
<span class="lineNum"> 1091 </span><span class="lineCov"> 53952 : if (a->d_ino > b->d_ino)</span>
|
||||
<span class="lineNum"> 1092 </span><span class="lineCov"> 53952 : return 1;</span>
|
||||
<span class="lineNum"> 1089 </span><span class="lineCov"> 103400 : if (a->d_ino < b->d_ino)</span>
|
||||
<span class="lineNum"> 1090 </span><span class="lineCov"> 49432 : return -1;</span>
|
||||
<span class="lineNum"> 1091 </span><span class="lineCov"> 53968 : if (a->d_ino > b->d_ino)</span>
|
||||
<span class="lineNum"> 1092 </span><span class="lineCov"> 53968 : return 1;</span>
|
||||
<span class="lineNum"> 1093 </span> :
|
||||
<span class="lineNum"> 1094 </span><span class="lineNoCov"> 0 : return 0;</span>
|
||||
<span class="lineNum"> 1095 </span> : }
|
||||
|
|
@ -1584,14 +1584,14 @@
|
|||
<span class="lineNum"> 1522 </span> :
|
||||
<span class="lineNum"> 1523 </span> : /* check for removed files */
|
||||
<span class="lineNum"> 1524 </span><span class="lineCov"> 575 : node = disk->filelist;</span>
|
||||
<span class="lineNum"> 1525 </span><span class="lineCov"> 1033660 : while (node) {</span>
|
||||
<span class="lineNum"> 1526 </span><span class="lineCov"> 1032510 : struct snapraid_file* file = node->data;</span>
|
||||
<span class="lineNum"> 1525 </span><span class="lineCov"> 1033662 : while (node) {</span>
|
||||
<span class="lineNum"> 1526 </span><span class="lineCov"> 1032512 : struct snapraid_file* file = node->data;</span>
|
||||
<span class="lineNum"> 1527 </span> :
|
||||
<span class="lineNum"> 1528 </span> : /* next node */
|
||||
<span class="lineNum"> 1529 </span><span class="lineCov"> 1032510 : node = node->next;</span>
|
||||
<span class="lineNum"> 1529 </span><span class="lineCov"> 1032512 : node = node->next;</span>
|
||||
<span class="lineNum"> 1530 </span> :
|
||||
<span class="lineNum"> 1531 </span> : /* remove if not present */
|
||||
<span class="lineNum"> 1532 </span><span class="lineCov"> 1032510 : if (!file_flag_has(file, FILE_IS_PRESENT)) {</span>
|
||||
<span class="lineNum"> 1532 </span><span class="lineCov"> 1032512 : if (!file_flag_has(file, FILE_IS_PRESENT)) {</span>
|
||||
<span class="lineNum"> 1533 </span><span class="lineCov"> 29647 : ++scan->count_remove;</span>
|
||||
<span class="lineNum"> 1534 </span> :
|
||||
<span class="lineNum"> 1535 </span><span class="lineCov"> 29647 : log_tag("scan:remove:%s:%s\n", disk->name, esc_tag(file->sub, esc_buffer));</span>
|
||||
|
|
@ -1664,11 +1664,11 @@
|
|||
<span class="lineNum"> 1602 </span><span class="lineCov"> 575 : phy_dup = 0;</span>
|
||||
<span class="lineNum"> 1603 </span><span class="lineCov"> 575 : phy_last = FILEPHY_UNREAD_OFFSET;</span>
|
||||
<span class="lineNum"> 1604 </span><span class="lineCov"> 575 : phy_file_last = 0;</span>
|
||||
<span class="lineNum"> 1605 </span><span class="lineCov"> 103031 : while (node) {</span>
|
||||
<span class="lineNum"> 1606 </span><span class="lineCov"> 101881 : struct snapraid_file* file = node->data;</span>
|
||||
<span class="lineNum"> 1605 </span><span class="lineCov"> 103029 : while (node) {</span>
|
||||
<span class="lineNum"> 1606 </span><span class="lineCov"> 101879 : struct snapraid_file* file = node->data;</span>
|
||||
<span class="lineNum"> 1607 </span> :
|
||||
<span class="lineNum"> 1608 </span> : /* if the file is not empty, count duplicate physical offsets */
|
||||
<span class="lineNum"> 1609 </span><span class="lineCov"> 101881 : if (state->opt.force_order == SORT_PHYSICAL && file->size != 0) {</span>
|
||||
<span class="lineNum"> 1609 </span><span class="lineCov"> 101879 : if (state->opt.force_order == SORT_PHYSICAL && file->size != 0) {</span>
|
||||
<span class="lineNum"> 1610 </span><span class="lineCov"> 11418 : if (phy_file_last != 0 && file->physical == phy_last</span>
|
||||
<span class="lineNum"> 1611 </span> : /* files without offset are expected to have duplicates */
|
||||
<span class="lineNum"> 1612 </span><span class="lineNoCov"> 0 : && phy_last != FILEPHY_WITHOUT_OFFSET</span>
|
||||
|
|
@ -1686,10 +1686,10 @@
|
|||
<span class="lineNum"> 1624 </span> : }
|
||||
<span class="lineNum"> 1625 </span> :
|
||||
<span class="lineNum"> 1626 </span> : /* next node */
|
||||
<span class="lineNum"> 1627 </span><span class="lineCov"> 101881 : node = node->next;</span>
|
||||
<span class="lineNum"> 1627 </span><span class="lineCov"> 101879 : node = node->next;</span>
|
||||
<span class="lineNum"> 1628 </span> :
|
||||
<span class="lineNum"> 1629 </span> : /* insert in the parity */
|
||||
<span class="lineNum"> 1630 </span><span class="lineCov"> 101881 : scan_file_allocate(scan, file);</span>
|
||||
<span class="lineNum"> 1630 </span><span class="lineCov"> 101879 : scan_file_allocate(scan, file);</span>
|
||||
<span class="lineNum"> 1631 </span> : }
|
||||
<span class="lineNum"> 1632 </span> :
|
||||
<span class="lineNum"> 1633 </span> : /* mark the disk without reliable physical offset if it has duplicates */
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">6</td>
|
||||
|
|
@ -61,11 +61,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scrub.c.gcov.html#217">scrub_parity_reader</a></td>
|
||||
<td class="coverFnHi">168180</td>
|
||||
<td class="coverFnHi">168175</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scrub.c.gcov.html#103">scrub_data_reader</a></td>
|
||||
<td class="coverFnHi">168176</td>
|
||||
<td class="coverFnHi">168095</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scrub.c.gcov.html#51">block_is_enabled</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">6</td>
|
||||
|
|
@ -69,11 +69,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scrub.c.gcov.html#103">scrub_data_reader</a></td>
|
||||
<td class="coverFnHi">168176</td>
|
||||
<td class="coverFnHi">168095</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scrub.c.gcov.html#217">scrub_parity_reader</a></td>
|
||||
<td class="coverFnHi">168180</td>
|
||||
<td class="coverFnHi">168175</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="scrub.c.gcov.html#723">state_scrub</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">6</td>
|
||||
|
|
@ -164,45 +164,45 @@
|
|||
<span class="lineNum"> 102 </span><span class="lineCov"> 21730 : return 1;</span>
|
||||
<a name="103"><span class="lineNum"> 103 </span> : }</a>
|
||||
<span class="lineNum"> 104 </span> :
|
||||
<span class="lineNum"> 105 </span><span class="lineCov"> 168176 : static void scrub_data_reader(struct snapraid_worker* worker, struct snapraid_task* task)</span>
|
||||
<span class="lineNum"> 105 </span><span class="lineCov"> 168095 : static void scrub_data_reader(struct snapraid_worker* worker, struct snapraid_task* task)</span>
|
||||
<span class="lineNum"> 106 </span> : {
|
||||
<span class="lineNum"> 107 </span><span class="lineCov"> 168176 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 108 </span><span class="lineCov"> 168176 : struct snapraid_state* state = io->state;</span>
|
||||
<span class="lineNum"> 109 </span><span class="lineCov"> 168176 : struct snapraid_handle* handle = worker->handle;</span>
|
||||
<span class="lineNum"> 110 </span><span class="lineCov"> 168176 : struct snapraid_disk* disk = handle->disk;</span>
|
||||
<span class="lineNum"> 111 </span><span class="lineCov"> 168176 : block_off_t blockcur = task->position;</span>
|
||||
<span class="lineNum"> 112 </span><span class="lineCov"> 168176 : unsigned char* buffer = task->buffer;</span>
|
||||
<span class="lineNum"> 107 </span><span class="lineCov"> 168095 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 108 </span><span class="lineCov"> 168095 : struct snapraid_state* state = io->state;</span>
|
||||
<span class="lineNum"> 109 </span><span class="lineCov"> 168095 : struct snapraid_handle* handle = worker->handle;</span>
|
||||
<span class="lineNum"> 110 </span><span class="lineCov"> 168095 : struct snapraid_disk* disk = handle->disk;</span>
|
||||
<span class="lineNum"> 111 </span><span class="lineCov"> 168095 : block_off_t blockcur = task->position;</span>
|
||||
<span class="lineNum"> 112 </span><span class="lineCov"> 168095 : unsigned char* buffer = task->buffer;</span>
|
||||
<span class="lineNum"> 113 </span> : int ret;
|
||||
<span class="lineNum"> 114 </span> : char esc_buffer[ESC_MAX];
|
||||
<span class="lineNum"> 115 </span> :
|
||||
<span class="lineNum"> 116 </span> : /* if the disk position is not used */
|
||||
<span class="lineNum"> 117 </span><span class="lineCov"> 168176 : if (!disk) {</span>
|
||||
<span class="lineNum"> 117 </span><span class="lineCov"> 168095 : if (!disk) {</span>
|
||||
<span class="lineNum"> 118 </span> : /* use an empty block */
|
||||
<span class="lineNum"> 119 </span><span class="lineNoCov"> 0 : memset(buffer, 0, state->block_size);</span>
|
||||
<span class="lineNum"> 120 </span><span class="lineNoCov"> 0 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 121 </span><span class="lineCov"> 1585 : return;</span>
|
||||
<span class="lineNum"> 121 </span><span class="lineCov"> 1584 : return;</span>
|
||||
<span class="lineNum"> 122 </span> : }
|
||||
<span class="lineNum"> 123 </span> :
|
||||
<span class="lineNum"> 124 </span> : /* get the block */
|
||||
<span class="lineNum"> 125 </span><span class="lineCov"> 168176 : task->block = fs_par2block_find(disk, blockcur);</span>
|
||||
<span class="lineNum"> 125 </span><span class="lineCov"> 168095 : task->block = fs_par2block_find(disk, blockcur);</span>
|
||||
<span class="lineNum"> 126 </span> :
|
||||
<span class="lineNum"> 127 </span> : /* if the block is not used */
|
||||
<span class="lineNum"> 128 </span><span class="lineCov"> 168151 : if (!block_has_file(task->block)) {</span>
|
||||
<span class="lineNum"> 128 </span><span class="lineCov"> 168015 : if (!block_has_file(task->block)) {</span>
|
||||
<span class="lineNum"> 129 </span> : /* use an empty block */
|
||||
<span class="lineNum"> 130 </span><span class="lineCov"> 1585 : memset(buffer, 0, state->block_size);</span>
|
||||
<span class="lineNum"> 131 </span><span class="lineCov"> 1585 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 132 </span><span class="lineCov"> 1585 : return;</span>
|
||||
<span class="lineNum"> 130 </span><span class="lineCov"> 1584 : memset(buffer, 0, state->block_size);</span>
|
||||
<span class="lineNum"> 131 </span><span class="lineCov"> 1584 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 132 </span><span class="lineCov"> 1584 : return;</span>
|
||||
<span class="lineNum"> 133 </span> : }
|
||||
<span class="lineNum"> 134 </span> :
|
||||
<span class="lineNum"> 135 </span> : /* get the file of this block */
|
||||
<span class="lineNum"> 136 </span><span class="lineCov"> 166552 : task->file = fs_par2file_get(disk, blockcur, &task->file_pos);</span>
|
||||
<span class="lineNum"> 136 </span><span class="lineCov"> 166341 : task->file = fs_par2file_get(disk, blockcur, &task->file_pos);</span>
|
||||
<span class="lineNum"> 137 </span> :
|
||||
<span class="lineNum"> 138 </span> : /* if the file is different than the current one, close it */
|
||||
<span class="lineNum"> 139 </span><span class="lineCov"> 166584 : if (handle->file != 0 && handle->file != task->file) {</span>
|
||||
<span class="lineNum"> 139 </span><span class="lineCov"> 166530 : if (handle->file != 0 && handle->file != task->file) {</span>
|
||||
<span class="lineNum"> 140 </span> : /* keep a pointer at the file we are going to close for error reporting */
|
||||
<span class="lineNum"> 141 </span><span class="lineCov"> 78061 : struct snapraid_file* report = handle->file;</span>
|
||||
<span class="lineNum"> 142 </span><span class="lineCov"> 78061 : ret = handle_close(handle);</span>
|
||||
<span class="lineNum"> 143 </span><span class="lineCov"> 78037 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 141 </span><span class="lineCov"> 78070 : struct snapraid_file* report = handle->file;</span>
|
||||
<span class="lineNum"> 142 </span><span class="lineCov"> 78070 : ret = handle_close(handle);</span>
|
||||
<span class="lineNum"> 143 </span><span class="lineCov"> 77914 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 144 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 145 </span> : /* This one is really an unexpected error, because we are only reading */
|
||||
<span class="lineNum"> 146 </span> : /* and closing a descriptor should never fail */
|
||||
|
|
@ -225,8 +225,8 @@
|
|||
<span class="lineNum"> 163 </span> : }
|
||||
<span class="lineNum"> 164 </span> : }
|
||||
<span class="lineNum"> 165 </span> :
|
||||
<span class="lineNum"> 166 </span><span class="lineCov"> 166560 : ret = handle_open(handle, task->file, state->file_mode, log_error, 0);</span>
|
||||
<span class="lineNum"> 167 </span><span class="lineCov"> 166583 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 166 </span><span class="lineCov"> 166374 : ret = handle_open(handle, task->file, state->file_mode, log_error, 0);</span>
|
||||
<span class="lineNum"> 167 </span><span class="lineCov"> 165524 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 168 </span><span class="lineNoCov"> 0 : if (errno == EIO) {</span>
|
||||
<span class="lineNum"> 169 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 170 </span> : log_tag("error:%u:%s:%s: Open EIO error. %s\n", blockcur, disk->name, esc_tag(task->file->sub, esc_buffer), strerror(errno));
|
||||
|
|
@ -244,9 +244,9 @@
|
|||
<span class="lineNum"> 182 </span> : }
|
||||
<span class="lineNum"> 183 </span> :
|
||||
<span class="lineNum"> 184 </span> : /* check if the file is changed */
|
||||
<span class="lineNum"> 185 </span><span class="lineCov"> 166583 : if (handle->st.st_size != task->file->size</span>
|
||||
<span class="lineNum"> 186 </span><span class="lineCov"> 166587 : || handle->st.st_mtime != task->file->mtime_sec</span>
|
||||
<span class="lineNum"> 187 </span><span class="lineCov"> 160985 : || STAT_NSEC(&handle->st) != task->file->mtime_nsec</span>
|
||||
<span class="lineNum"> 185 </span><span class="lineCov"> 165524 : if (handle->st.st_size != task->file->size</span>
|
||||
<span class="lineNum"> 186 </span><span class="lineCov"> 165815 : || handle->st.st_mtime != task->file->mtime_sec</span>
|
||||
<span class="lineNum"> 187 </span><span class="lineCov"> 160635 : || STAT_NSEC(&handle->st) != task->file->mtime_nsec</span>
|
||||
<span class="lineNum"> 188 </span> : /* don't check the inode to support filesystem without persistent inodes */
|
||||
<span class="lineNum"> 189 </span> : ) {
|
||||
<span class="lineNum"> 190 </span> : /* report that the block and the file are not synced */
|
||||
|
|
@ -258,8 +258,8 @@
|
|||
<span class="lineNum"> 196 </span> : /* from the last sync, as we are expected to return errors if running */
|
||||
<span class="lineNum"> 197 </span> : /* in an unsynced array. This is just like the check command. */
|
||||
<span class="lineNum"> 198 </span> :
|
||||
<span class="lineNum"> 199 </span><span class="lineCov"> 166583 : task->read_size = handle_read(handle, task->file_pos, buffer, state->block_size, log_error, 0);</span>
|
||||
<span class="lineNum"> 200 </span><span class="lineCov"> 166507 : if (task->read_size == -1) {</span>
|
||||
<span class="lineNum"> 199 </span><span class="lineCov"> 165524 : task->read_size = handle_read(handle, task->file_pos, buffer, state->block_size, log_error, 0);</span>
|
||||
<span class="lineNum"> 200 </span><span class="lineCov"> 166073 : if (task->read_size == -1) {</span>
|
||||
<span class="lineNum"> 201 </span><span class="lineNoCov"> 0 : if (errno == EIO) {</span>
|
||||
<span class="lineNum"> 202 </span><span class="lineNoCov"> 0 : log_tag("error:%u:%s:%s: Read EIO error at position %u. %s\n", blockcur, disk->name, esc_tag(task->file->sub, esc_buffer), task->file_pos, strerror(errno));</span>
|
||||
<span class="lineNum"> 203 </span><span class="lineNoCov"> 0 : log_error("Input/Output error in file '%s' at position '%u'\n", handle->path, task->file_pos);</span>
|
||||
|
|
@ -273,24 +273,24 @@
|
|||
<span class="lineNum"> 211 </span> : }
|
||||
<span class="lineNum"> 212 </span> :
|
||||
<span class="lineNum"> 213 </span> : /* store the path of the opened file */
|
||||
<span class="lineNum"> 214 </span><span class="lineCov"> 166507 : pathcpy(task->path, sizeof(task->path), handle->path);</span>
|
||||
<span class="lineNum"> 214 </span><span class="lineCov"> 166073 : pathcpy(task->path, sizeof(task->path), handle->path);</span>
|
||||
<span class="lineNum"> 215 </span> :
|
||||
<span class="lineNum"> 216 </span><span class="lineCov"> 166554 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 216 </span><span class="lineCov"> 165226 : task->state = TASK_STATE_DONE;</span>
|
||||
<a name="217"><span class="lineNum"> 217 </span> : }</a>
|
||||
<span class="lineNum"> 218 </span> :
|
||||
<span class="lineNum"> 219 </span><span class="lineCov"> 168180 : static void scrub_parity_reader(struct snapraid_worker* worker, struct snapraid_task* task)</span>
|
||||
<span class="lineNum"> 219 </span><span class="lineCov"> 168175 : static void scrub_parity_reader(struct snapraid_worker* worker, struct snapraid_task* task)</span>
|
||||
<span class="lineNum"> 220 </span> : {
|
||||
<span class="lineNum"> 221 </span><span class="lineCov"> 168180 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 222 </span><span class="lineCov"> 168180 : struct snapraid_state* state = io->state;</span>
|
||||
<span class="lineNum"> 223 </span><span class="lineCov"> 168180 : struct snapraid_parity_handle* parity_handle = worker->parity_handle;</span>
|
||||
<span class="lineNum"> 224 </span><span class="lineCov"> 168180 : unsigned level = parity_handle->level;</span>
|
||||
<span class="lineNum"> 225 </span><span class="lineCov"> 168180 : block_off_t blockcur = task->position;</span>
|
||||
<span class="lineNum"> 226 </span><span class="lineCov"> 168180 : unsigned char* buffer = task->buffer;</span>
|
||||
<span class="lineNum"> 221 </span><span class="lineCov"> 168175 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 222 </span><span class="lineCov"> 168175 : struct snapraid_state* state = io->state;</span>
|
||||
<span class="lineNum"> 223 </span><span class="lineCov"> 168175 : struct snapraid_parity_handle* parity_handle = worker->parity_handle;</span>
|
||||
<span class="lineNum"> 224 </span><span class="lineCov"> 168175 : unsigned level = parity_handle->level;</span>
|
||||
<span class="lineNum"> 225 </span><span class="lineCov"> 168175 : block_off_t blockcur = task->position;</span>
|
||||
<span class="lineNum"> 226 </span><span class="lineCov"> 168175 : unsigned char* buffer = task->buffer;</span>
|
||||
<span class="lineNum"> 227 </span> : int ret;
|
||||
<span class="lineNum"> 228 </span> :
|
||||
<span class="lineNum"> 229 </span> : /* read the parity */
|
||||
<span class="lineNum"> 230 </span><span class="lineCov"> 168180 : ret = parity_read(parity_handle, blockcur, buffer, state->block_size, log_error);</span>
|
||||
<span class="lineNum"> 231 </span><span class="lineCov"> 168156 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 230 </span><span class="lineCov"> 168175 : ret = parity_read(parity_handle, blockcur, buffer, state->block_size, log_error);</span>
|
||||
<span class="lineNum"> 231 </span><span class="lineCov"> 168065 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 232 </span><span class="lineNoCov"> 0 : if (errno == EIO) {</span>
|
||||
<span class="lineNum"> 233 </span><span class="lineNoCov"> 0 : log_tag("parity_error:%u:%s: Read EIO error. %s\n", blockcur, lev_config_name(level), strerror(errno));</span>
|
||||
<span class="lineNum"> 234 </span><span class="lineNoCov"> 0 : log_error("Input/Output error in parity '%s' at position '%u'\n", lev_config_name(level), blockcur);</span>
|
||||
|
|
@ -303,7 +303,7 @@
|
|||
<span class="lineNum"> 241 </span><span class="lineNoCov"> 0 : return;</span>
|
||||
<span class="lineNum"> 242 </span> : }
|
||||
<span class="lineNum"> 243 </span> :
|
||||
<span class="lineNum"> 244 </span><span class="lineCov"> 168156 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 244 </span><span class="lineCov"> 168065 : task->state = TASK_STATE_DONE;</span>
|
||||
<a name="245"><span class="lineNum"> 245 </span> : }</a>
|
||||
<span class="lineNum"> 246 </span> :
|
||||
<span class="lineNum"> 247 </span><span class="lineCov"> 11 : static int state_scrub_process(struct snapraid_state* state, struct snapraid_parity_handle* parity_handle, block_off_t blockstart, block_off_t blockmax, struct snapraid_plan* plan, time_t now)</span>
|
||||
|
|
@ -535,14 +535,14 @@
|
|||
<span class="lineNum"> 473 </span><span class="lineCov"> 166607 : if (memcmp(hash, block->hash, BLOCK_HASH_SIZE) != 0) {</span>
|
||||
<span class="lineNum"> 474 </span><span class="lineCov"> 920 : unsigned diff = memdiff(hash, block->hash, BLOCK_HASH_SIZE);</span>
|
||||
<span class="lineNum"> 475 </span> :
|
||||
<span class="lineNum"> 476 </span><span class="lineCov"> 920 : log_tag("error:%u:%s:%s: Data error at position %u, diff bits %u\n", blockcur, disk->name, esc_tag(file->sub, esc_buffer), file_pos, diff);</span>
|
||||
<span class="lineNum"> 476 </span><span class="lineCov"> 920 : log_tag("error:%u:%s:%s: Data error at position %u, diff bits %u/%u\n", blockcur, disk->name, esc_tag(file->sub, esc_buffer), file_pos, diff, BLOCK_HASH_SIZE*8);</span>
|
||||
<span class="lineNum"> 477 </span> :
|
||||
<span class="lineNum"> 478 </span> : /* it's a silent error only if we are dealing with synced files */
|
||||
<span class="lineNum"> 479 </span><span class="lineCov"> 920 : if (file_is_unsynced) {</span>
|
||||
<span class="lineNum"> 480 </span><span class="lineNoCov"> 0 : ++error;</span>
|
||||
<span class="lineNum"> 481 </span><span class="lineNoCov"> 0 : error_on_this_block = 1;</span>
|
||||
<span class="lineNum"> 482 </span> : } else {
|
||||
<span class="lineNum"> 483 </span><span class="lineCov"> 920 : log_error("Data error in file '%s' at position '%u', diff bits %u\n", task->path, file_pos, diff);</span>
|
||||
<span class="lineNum"> 483 </span><span class="lineCov"> 920 : log_error("Data error in file '%s' at position '%u', diff bits %u/%u\n", task->path, file_pos, diff, BLOCK_HASH_SIZE*8);</span>
|
||||
<span class="lineNum"> 484 </span><span class="lineCov"> 920 : ++silent_error;</span>
|
||||
<span class="lineNum"> 485 </span><span class="lineCov"> 920 : silent_error_on_this_block = 1;</span>
|
||||
<span class="lineNum"> 486 </span> : }
|
||||
|
|
@ -628,14 +628,14 @@
|
|||
<span class="lineNum"> 566 </span><span class="lineCov"> 162672 : if (buffer_recov[l] && memcmp(buffer[diskmax + l], buffer_recov[l], state->block_size) != 0) {</span>
|
||||
<span class="lineNum"> 567 </span><span class="lineNoCov"> 0 : unsigned diff = memdiff(buffer[diskmax + l], buffer_recov[l], state->block_size);</span>
|
||||
<span class="lineNum"> 568 </span> :
|
||||
<span class="lineNum"> 569 </span><span class="lineNoCov"> 0 : log_tag("parity_error:%u:%s: Data error, diff bits %u\n", blockcur, lev_config_name(l), diff);</span>
|
||||
<span class="lineNum"> 569 </span><span class="lineNoCov"> 0 : log_tag("parity_error:%u:%s: Data error, diff bits %u/%u\n", blockcur, lev_config_name(l), diff, state->block_size*8);</span>
|
||||
<span class="lineNum"> 570 </span> :
|
||||
<span class="lineNum"> 571 </span> : /* it's a silent error only if we are dealing with synced blocks */
|
||||
<span class="lineNum"> 572 </span><span class="lineNoCov"> 0 : if (block_is_unsynced) {</span>
|
||||
<span class="lineNum"> 573 </span><span class="lineNoCov"> 0 : ++error;</span>
|
||||
<span class="lineNum"> 574 </span><span class="lineNoCov"> 0 : error_on_this_block = 1;</span>
|
||||
<span class="lineNum"> 575 </span> : } else {
|
||||
<span class="lineNum"> 576 </span><span class="lineNoCov"> 0 : log_fatal("Data error in parity '%s' at position '%u', diff bits %u\n", lev_config_name(l), blockcur, diff);</span>
|
||||
<span class="lineNum"> 576 </span><span class="lineNoCov"> 0 : log_fatal("Data error in parity '%s' at position '%u', diff bits %u/%u\n", lev_config_name(l), blockcur, diff, state->block_size*8);</span>
|
||||
<span class="lineNum"> 577 </span><span class="lineNoCov"> 0 : ++silent_error;</span>
|
||||
<span class="lineNum"> 578 </span><span class="lineNoCov"> 0 : silent_error_on_this_block = 1;</span>
|
||||
<span class="lineNum"> 579 </span> : }
|
||||
|
|
@ -880,12 +880,12 @@
|
|||
<span class="lineNum"> 818 </span> : /* output the info map */
|
||||
<span class="lineNum"> 819 </span><span class="lineCov"> 11 : i = 0;</span>
|
||||
<span class="lineNum"> 820 </span><span class="lineCov"> 11 : log_tag("info_count:%u\n", count);</span>
|
||||
<span class="lineNum"> 821 </span><span class="lineCov"> 45 : while (i < count) {</span>
|
||||
<span class="lineNum"> 822 </span><span class="lineCov"> 23 : unsigned j = i + 1;</span>
|
||||
<span class="lineNum"> 823 </span><span class="lineCov"> 56108 : while (j < count && timemap[i] == timemap[j])</span>
|
||||
<span class="lineNum"> 824 </span><span class="lineCov"> 56062 : ++j;</span>
|
||||
<span class="lineNum"> 825 </span><span class="lineCov"> 23 : log_tag("info_time:%" PRIu64 ":%u\n", (uint64_t)timemap[i], j - i);</span>
|
||||
<span class="lineNum"> 826 </span><span class="lineCov"> 23 : i = j;</span>
|
||||
<span class="lineNum"> 821 </span><span class="lineCov"> 44 : while (i < count) {</span>
|
||||
<span class="lineNum"> 822 </span><span class="lineCov"> 22 : unsigned j = i + 1;</span>
|
||||
<span class="lineNum"> 823 </span><span class="lineCov"> 56107 : while (j < count && timemap[i] == timemap[j])</span>
|
||||
<span class="lineNum"> 824 </span><span class="lineCov"> 56063 : ++j;</span>
|
||||
<span class="lineNum"> 825 </span><span class="lineCov"> 22 : log_tag("info_time:%" PRIu64 ":%u\n", (uint64_t)timemap[i], j - i);</span>
|
||||
<span class="lineNum"> 826 </span><span class="lineCov"> 22 : i = j;</span>
|
||||
<span class="lineNum"> 827 </span> : }
|
||||
<span class="lineNum"> 828 </span> :
|
||||
<span class="lineNum"> 829 </span> : /* compute the limits from count/recentlimit */
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">7</td>
|
||||
|
|
@ -61,19 +61,19 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="search.c.gcov.html#24">search_file</a></td>
|
||||
<td class="coverFnHi">1843968</td>
|
||||
<td class="coverFnHi">1843727</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="search.c.gcov.html#40">search_file_free</a></td>
|
||||
<td class="coverFnHi">1843968</td>
|
||||
<td class="coverFnHi">1843727</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="search.c.gcov.html#124">state_search_fetch</a></td>
|
||||
<td class="coverFnHi">638616</td>
|
||||
<td class="coverFnHi">639060</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="search.c.gcov.html#56">search_file_compare</a></td>
|
||||
<td class="coverFnHi">20133</td>
|
||||
<td class="coverFnHi">20106</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="search.c.gcov.html#149">search_dir</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">7</td>
|
||||
|
|
@ -65,15 +65,15 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="search.c.gcov.html#24">search_file</a></td>
|
||||
<td class="coverFnHi">1843968</td>
|
||||
<td class="coverFnHi">1843727</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="search.c.gcov.html#56">search_file_compare</a></td>
|
||||
<td class="coverFnHi">20133</td>
|
||||
<td class="coverFnHi">20106</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="search.c.gcov.html#40">search_file_free</a></td>
|
||||
<td class="coverFnHi">1843968</td>
|
||||
<td class="coverFnHi">1843727</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="search.c.gcov.html#255">state_search</a></td>
|
||||
|
|
@ -85,7 +85,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="search.c.gcov.html#124">state_search_fetch</a></td>
|
||||
<td class="coverFnHi">638616</td>
|
||||
<td class="coverFnHi">639060</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">7</td>
|
||||
|
|
@ -85,27 +85,27 @@
|
|||
<span class="lineNum"> 23 </span> : /****************************************************************************/
|
||||
<a name="24"><span class="lineNum"> 24 </span> : /* search */</a>
|
||||
<span class="lineNum"> 25 </span> :
|
||||
<span class="lineNum"> 26 </span><span class="lineCov"> 1843968 : static void search_file(struct snapraid_state* state, const char* path, data_off_t size, int64_t mtime_sec, int mtime_nsec)</span>
|
||||
<span class="lineNum"> 26 </span><span class="lineCov"> 1843727 : static void search_file(struct snapraid_state* state, const char* path, data_off_t size, int64_t mtime_sec, int mtime_nsec)</span>
|
||||
<span class="lineNum"> 27 </span> : {
|
||||
<span class="lineNum"> 28 </span> : struct snapraid_search_file* file;
|
||||
<span class="lineNum"> 29 </span> : tommy_uint32_t file_hash;
|
||||
<span class="lineNum"> 30 </span> :
|
||||
<span class="lineNum"> 31 </span><span class="lineCov"> 1843968 : file = malloc_nofail(sizeof(struct snapraid_search_file));</span>
|
||||
<span class="lineNum"> 32 </span><span class="lineCov"> 1843968 : file->path = strdup_nofail(path);</span>
|
||||
<span class="lineNum"> 33 </span><span class="lineCov"> 1843968 : file->size = size;</span>
|
||||
<span class="lineNum"> 34 </span><span class="lineCov"> 1843968 : file->mtime_sec = mtime_sec;</span>
|
||||
<span class="lineNum"> 35 </span><span class="lineCov"> 1843968 : file->mtime_nsec = mtime_nsec;</span>
|
||||
<span class="lineNum"> 31 </span><span class="lineCov"> 1843727 : file = malloc_nofail(sizeof(struct snapraid_search_file));</span>
|
||||
<span class="lineNum"> 32 </span><span class="lineCov"> 1843727 : file->path = strdup_nofail(path);</span>
|
||||
<span class="lineNum"> 33 </span><span class="lineCov"> 1843727 : file->size = size;</span>
|
||||
<span class="lineNum"> 34 </span><span class="lineCov"> 1843727 : file->mtime_sec = mtime_sec;</span>
|
||||
<span class="lineNum"> 35 </span><span class="lineCov"> 1843727 : file->mtime_nsec = mtime_nsec;</span>
|
||||
<span class="lineNum"> 36 </span> :
|
||||
<span class="lineNum"> 37 </span><span class="lineCov"> 1843968 : file_hash = file_stamp_hash(file->size, file->mtime_sec, file->mtime_nsec);</span>
|
||||
<span class="lineNum"> 37 </span><span class="lineCov"> 1843727 : file_hash = file_stamp_hash(file->size, file->mtime_sec, file->mtime_nsec);</span>
|
||||
<span class="lineNum"> 38 </span> :
|
||||
<span class="lineNum"> 39 </span><span class="lineCov"> 1843968 : tommy_hashdyn_insert(&state->searchset, &file->node, file, file_hash);</span>
|
||||
<a name="40"><span class="lineNum"> 40 </span><span class="lineCov"> 1843968 : }</span></a>
|
||||
<span class="lineNum"> 39 </span><span class="lineCov"> 1843727 : tommy_hashdyn_insert(&state->searchset, &file->node, file, file_hash);</span>
|
||||
<a name="40"><span class="lineNum"> 40 </span><span class="lineCov"> 1843727 : }</span></a>
|
||||
<span class="lineNum"> 41 </span> :
|
||||
<span class="lineNum"> 42 </span><span class="lineCov"> 1843968 : void search_file_free(struct snapraid_search_file* file)</span>
|
||||
<span class="lineNum"> 42 </span><span class="lineCov"> 1843727 : void search_file_free(struct snapraid_search_file* file)</span>
|
||||
<span class="lineNum"> 43 </span> : {
|
||||
<span class="lineNum"> 44 </span><span class="lineCov"> 1843968 : free(file->path);</span>
|
||||
<span class="lineNum"> 45 </span><span class="lineCov"> 1843968 : free(file);</span>
|
||||
<span class="lineNum"> 46 </span><span class="lineCov"> 1843968 : }</span>
|
||||
<span class="lineNum"> 44 </span><span class="lineCov"> 1843727 : free(file->path);</span>
|
||||
<span class="lineNum"> 45 </span><span class="lineCov"> 1843727 : free(file);</span>
|
||||
<span class="lineNum"> 46 </span><span class="lineCov"> 1843727 : }</span>
|
||||
<span class="lineNum"> 47 </span> :
|
||||
<span class="lineNum"> 48 </span> : struct search_file_compare_arg {
|
||||
<span class="lineNum"> 49 </span> : const struct snapraid_state* state;
|
||||
|
|
@ -117,29 +117,29 @@
|
|||
<span class="lineNum"> 55 </span> : int prevhash;
|
||||
<a name="56"><span class="lineNum"> 56 </span> : };</a>
|
||||
<span class="lineNum"> 57 </span> :
|
||||
<span class="lineNum"> 58 </span><span class="lineCov"> 20133 : int search_file_compare(const void* void_arg, const void* void_data)</span>
|
||||
<span class="lineNum"> 58 </span><span class="lineCov"> 20106 : int search_file_compare(const void* void_arg, const void* void_data)</span>
|
||||
<span class="lineNum"> 59 </span> : {
|
||||
<span class="lineNum"> 60 </span><span class="lineCov"> 20133 : const struct search_file_compare_arg* arg = void_arg;</span>
|
||||
<span class="lineNum"> 61 </span><span class="lineCov"> 20133 : const struct snapraid_search_file* file = void_data;</span>
|
||||
<span class="lineNum"> 62 </span><span class="lineCov"> 20133 : const struct snapraid_state* state = arg->state;</span>
|
||||
<span class="lineNum"> 60 </span><span class="lineCov"> 20106 : const struct search_file_compare_arg* arg = void_arg;</span>
|
||||
<span class="lineNum"> 61 </span><span class="lineCov"> 20106 : const struct snapraid_search_file* file = void_data;</span>
|
||||
<span class="lineNum"> 62 </span><span class="lineCov"> 20106 : const struct snapraid_state* state = arg->state;</span>
|
||||
<span class="lineNum"> 63 </span> : unsigned char buffer_hash[HASH_MAX];
|
||||
<span class="lineNum"> 64 </span><span class="lineCov"> 20133 : const char* path = file->path;</span>
|
||||
<span class="lineNum"> 64 </span><span class="lineCov"> 20106 : const char* path = file->path;</span>
|
||||
<span class="lineNum"> 65 </span> : int f;
|
||||
<span class="lineNum"> 66 </span> : ssize_t ret;
|
||||
<span class="lineNum"> 67 </span> :
|
||||
<span class="lineNum"> 68 </span> : /* compare file info */
|
||||
<span class="lineNum"> 69 </span><span class="lineCov"> 20133 : if (arg->file->size != file->size)</span>
|
||||
<span class="lineNum"> 69 </span><span class="lineCov"> 20106 : if (arg->file->size != file->size)</span>
|
||||
<span class="lineNum"> 70 </span><span class="lineNoCov"> 0 : return -1;</span>
|
||||
<span class="lineNum"> 71 </span> :
|
||||
<span class="lineNum"> 72 </span><span class="lineCov"> 20133 : if (arg->file->mtime_sec != file->mtime_sec)</span>
|
||||
<span class="lineNum"> 72 </span><span class="lineCov"> 20106 : if (arg->file->mtime_sec != file->mtime_sec)</span>
|
||||
<span class="lineNum"> 73 </span><span class="lineNoCov"> 0 : return -1;</span>
|
||||
<span class="lineNum"> 74 </span> :
|
||||
<span class="lineNum"> 75 </span><span class="lineCov"> 20133 : if (arg->file->mtime_nsec != file->mtime_nsec)</span>
|
||||
<span class="lineNum"> 75 </span><span class="lineCov"> 20106 : if (arg->file->mtime_nsec != file->mtime_nsec)</span>
|
||||
<span class="lineNum"> 76 </span><span class="lineNoCov"> 0 : return -1;</span>
|
||||
<span class="lineNum"> 77 </span> :
|
||||
<span class="lineNum"> 78 </span> : /* read the block and compare the hash */
|
||||
<span class="lineNum"> 79 </span><span class="lineCov"> 20133 : f = open(path, O_RDONLY | O_BINARY);</span>
|
||||
<span class="lineNum"> 80 </span><span class="lineCov"> 20133 : if (f == -1) {</span>
|
||||
<span class="lineNum"> 79 </span><span class="lineCov"> 20106 : f = open(path, O_RDONLY | O_BINARY);</span>
|
||||
<span class="lineNum"> 80 </span><span class="lineCov"> 20106 : if (f == -1) {</span>
|
||||
<span class="lineNum"> 81 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 82 </span> : if (errno == ENOENT) {
|
||||
<span class="lineNum"> 83 </span> : log_fatal("DANGER! file '%s' disappeared.\n", path);
|
||||
|
|
@ -151,16 +151,16 @@
|
|||
<span class="lineNum"> 89 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 90 </span> : }
|
||||
<span class="lineNum"> 91 </span> :
|
||||
<span class="lineNum"> 92 </span><span class="lineCov"> 20133 : ret = pread(f, arg->buffer, arg->read_size, arg->offset);</span>
|
||||
<span class="lineNum"> 93 </span><span class="lineCov"> 20133 : if (ret < 0 || (unsigned)ret != arg->read_size) {</span>
|
||||
<span class="lineNum"> 92 </span><span class="lineCov"> 20106 : ret = pread(f, arg->buffer, arg->read_size, arg->offset);</span>
|
||||
<span class="lineNum"> 93 </span><span class="lineCov"> 20106 : if (ret < 0 || (unsigned)ret != arg->read_size) {</span>
|
||||
<span class="lineNum"> 94 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 95 </span> : log_fatal("Error reading file '%s'. %s.\n", path, strerror(errno));
|
||||
<span class="lineNum"> 96 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 97 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 98 </span> : }
|
||||
<span class="lineNum"> 99 </span> :
|
||||
<span class="lineNum"> 100 </span><span class="lineCov"> 20133 : ret = close(f);</span>
|
||||
<span class="lineNum"> 101 </span><span class="lineCov"> 20133 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 100 </span><span class="lineCov"> 20106 : ret = close(f);</span>
|
||||
<span class="lineNum"> 101 </span><span class="lineCov"> 20106 : if (ret != 0) {</span>
|
||||
<span class="lineNum"> 102 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 103 </span> : log_fatal("Error closing file '%s'. %s.\n", path, strerror(errno));
|
||||
<span class="lineNum"> 104 </span> : exit(EXIT_FAILURE);
|
||||
|
|
@ -168,14 +168,14 @@
|
|||
<span class="lineNum"> 106 </span> : }
|
||||
<span class="lineNum"> 107 </span> :
|
||||
<span class="lineNum"> 108 </span> : /* compute the hash */
|
||||
<span class="lineNum"> 109 </span><span class="lineCov"> 20133 : if (arg->prevhash)</span>
|
||||
<span class="lineNum"> 109 </span><span class="lineCov"> 20106 : if (arg->prevhash)</span>
|
||||
<span class="lineNum"> 110 </span><span class="lineNoCov"> 0 : memhash(state->prevhash, state->prevhashseed, buffer_hash, arg->buffer, arg->read_size);</span>
|
||||
<span class="lineNum"> 111 </span> : else
|
||||
<span class="lineNum"> 112 </span><span class="lineCov"> 20133 : memhash(state->hash, state->hashseed, buffer_hash, arg->buffer, arg->read_size);</span>
|
||||
<span class="lineNum"> 112 </span><span class="lineCov"> 20106 : memhash(state->hash, state->hashseed, buffer_hash, arg->buffer, arg->read_size);</span>
|
||||
<span class="lineNum"> 113 </span> :
|
||||
<span class="lineNum"> 114 </span> : /* check if the hash is matching */
|
||||
<span class="lineNum"> 115 </span><span class="lineCov"> 20133 : if (memcmp(buffer_hash, arg->block->hash, BLOCK_HASH_SIZE) != 0)</span>
|
||||
<span class="lineNum"> 116 </span><span class="lineCov"> 2223 : return -1;</span>
|
||||
<span class="lineNum"> 115 </span><span class="lineCov"> 20106 : if (memcmp(buffer_hash, arg->block->hash, BLOCK_HASH_SIZE) != 0)</span>
|
||||
<span class="lineNum"> 116 </span><span class="lineCov"> 2196 : return -1;</span>
|
||||
<span class="lineNum"> 117 </span> :
|
||||
<span class="lineNum"> 118 </span><span class="lineCov"> 17910 : if (arg->read_size != state->block_size) {</span>
|
||||
<span class="lineNum"> 119 </span> : /* fill the remaining with 0 */
|
||||
|
|
@ -185,26 +185,26 @@
|
|||
<span class="lineNum"> 123 </span><span class="lineCov"> 17910 : return 0;</span>
|
||||
<a name="124"><span class="lineNum"> 124 </span> : }</a>
|
||||
<span class="lineNum"> 125 </span> :
|
||||
<span class="lineNum"> 126 </span><span class="lineCov"> 638616 : int state_search_fetch(struct snapraid_state* state, int prevhash, struct snapraid_file* missing_file, block_off_t missing_file_pos, struct snapraid_block* missing_block, unsigned char* buffer)</span>
|
||||
<span class="lineNum"> 126 </span><span class="lineCov"> 639060 : int state_search_fetch(struct snapraid_state* state, int prevhash, struct snapraid_file* missing_file, block_off_t missing_file_pos, struct snapraid_block* missing_block, unsigned char* buffer)</span>
|
||||
<span class="lineNum"> 127 </span> : {
|
||||
<span class="lineNum"> 128 </span> : struct snapraid_search_file* file;
|
||||
<span class="lineNum"> 129 </span> : tommy_uint32_t file_hash;
|
||||
<span class="lineNum"> 130 </span> : struct search_file_compare_arg arg;
|
||||
<span class="lineNum"> 131 </span> :
|
||||
<span class="lineNum"> 132 </span><span class="lineCov"> 638616 : arg.state = state;</span>
|
||||
<span class="lineNum"> 133 </span><span class="lineCov"> 638616 : arg.block = missing_block;</span>
|
||||
<span class="lineNum"> 134 </span><span class="lineCov"> 638616 : arg.file = missing_file;</span>
|
||||
<span class="lineNum"> 135 </span><span class="lineCov"> 638616 : arg.buffer = buffer;</span>
|
||||
<span class="lineNum"> 136 </span><span class="lineCov"> 638616 : arg.offset = state->block_size * (data_off_t)missing_file_pos;</span>
|
||||
<span class="lineNum"> 137 </span><span class="lineCov"> 638616 : arg.read_size = file_block_size(missing_file, missing_file_pos, state->block_size);</span>
|
||||
<span class="lineNum"> 138 </span><span class="lineCov"> 638616 : arg.prevhash = prevhash;</span>
|
||||
<span class="lineNum"> 132 </span><span class="lineCov"> 639060 : arg.state = state;</span>
|
||||
<span class="lineNum"> 133 </span><span class="lineCov"> 639060 : arg.block = missing_block;</span>
|
||||
<span class="lineNum"> 134 </span><span class="lineCov"> 639060 : arg.file = missing_file;</span>
|
||||
<span class="lineNum"> 135 </span><span class="lineCov"> 639060 : arg.buffer = buffer;</span>
|
||||
<span class="lineNum"> 136 </span><span class="lineCov"> 639060 : arg.offset = state->block_size * (data_off_t)missing_file_pos;</span>
|
||||
<span class="lineNum"> 137 </span><span class="lineCov"> 639060 : arg.read_size = file_block_size(missing_file, missing_file_pos, state->block_size);</span>
|
||||
<span class="lineNum"> 138 </span><span class="lineCov"> 639060 : arg.prevhash = prevhash;</span>
|
||||
<span class="lineNum"> 139 </span> :
|
||||
<span class="lineNum"> 140 </span><span class="lineCov"> 638616 : file_hash = file_stamp_hash(arg.file->size, arg.file->mtime_sec, arg.file->mtime_nsec);</span>
|
||||
<span class="lineNum"> 140 </span><span class="lineCov"> 639060 : file_hash = file_stamp_hash(arg.file->size, arg.file->mtime_sec, arg.file->mtime_nsec);</span>
|
||||
<span class="lineNum"> 141 </span> :
|
||||
<span class="lineNum"> 142 </span> : /* search in the hashtable, and also check if the data matches the hash */
|
||||
<span class="lineNum"> 143 </span><span class="lineCov"> 638616 : file = tommy_hashdyn_search(&state->searchset, search_file_compare, &arg, file_hash);</span>
|
||||
<span class="lineNum"> 144 </span><span class="lineCov"> 638616 : if (!file)</span>
|
||||
<span class="lineNum"> 145 </span><span class="lineCov"> 620706 : return -1;</span>
|
||||
<span class="lineNum"> 143 </span><span class="lineCov"> 639060 : file = tommy_hashdyn_search(&state->searchset, search_file_compare, &arg, file_hash);</span>
|
||||
<span class="lineNum"> 144 </span><span class="lineCov"> 639060 : if (!file)</span>
|
||||
<span class="lineNum"> 145 </span><span class="lineCov"> 621150 : return -1;</span>
|
||||
<span class="lineNum"> 146 </span> :
|
||||
<span class="lineNum"> 147 </span> : /* if found, buffer is already set with data */
|
||||
<span class="lineNum"> 148 </span><span class="lineCov"> 17910 : return 0;</span>
|
||||
|
|
@ -226,40 +226,40 @@
|
|||
<span class="lineNum"> 164 </span> : char path_next[PATH_MAX];
|
||||
<span class="lineNum"> 165 </span> : char sub_next[PATH_MAX];
|
||||
<span class="lineNum"> 166 </span> : char out[PATH_MAX];
|
||||
<span class="lineNum"> 167 </span><span class="lineCov"> 2040368 : struct snapraid_filter* reason = 0;</span>
|
||||
<span class="lineNum"> 167 </span><span class="lineCov"> 2040206 : struct snapraid_filter* reason = 0;</span>
|
||||
<span class="lineNum"> 168 </span> : struct stat st;
|
||||
<span class="lineNum"> 169 </span> : const char* name;
|
||||
<span class="lineNum"> 170 </span> : struct dirent* dd;
|
||||
<span class="lineNum"> 171 </span> :
|
||||
<span class="lineNum"> 172 </span> : /* clear errno to detect erroneous conditions */
|
||||
<span class="lineNum"> 173 </span><span class="lineCov"> 2040368 : errno = 0;</span>
|
||||
<span class="lineNum"> 174 </span><span class="lineCov"> 2040368 : dd = readdir(d);</span>
|
||||
<span class="lineNum"> 175 </span><span class="lineCov"> 2040368 : if (dd == 0 && errno != 0) {</span>
|
||||
<span class="lineNum"> 173 </span><span class="lineCov"> 2040206 : errno = 0;</span>
|
||||
<span class="lineNum"> 174 </span><span class="lineCov"> 2040206 : dd = readdir(d);</span>
|
||||
<span class="lineNum"> 175 </span><span class="lineCov"> 2040206 : if (dd == 0 && errno != 0) {</span>
|
||||
<span class="lineNum"> 176 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 177 </span> : log_fatal("Error reading directory '%s'. %s.\n", dir, strerror(errno));
|
||||
<span class="lineNum"> 178 </span> : exit(EXIT_FAILURE);
|
||||
<span class="lineNum"> 179 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 180 </span> : }
|
||||
<span class="lineNum"> 181 </span><span class="lineCov"> 2040368 : if (dd == 0) {</span>
|
||||
<span class="lineNum"> 181 </span><span class="lineCov"> 2040206 : if (dd == 0) {</span>
|
||||
<span class="lineNum"> 182 </span><span class="lineCov"> 2462 : break; /* finished */</span>
|
||||
<span class="lineNum"> 183 </span> : }
|
||||
<span class="lineNum"> 184 </span> :
|
||||
<span class="lineNum"> 185 </span> : /* skip "." and ".." files */
|
||||
<span class="lineNum"> 186 </span><span class="lineCov"> 2037906 : name = dd->d_name;</span>
|
||||
<span class="lineNum"> 187 </span><span class="lineCov"> 2037906 : if (name[0] == '.' && (name[1] == 0 || (name[1] == '.' && name[2] == 0)))</span>
|
||||
<span class="lineNum"> 186 </span><span class="lineCov"> 2037744 : name = dd->d_name;</span>
|
||||
<span class="lineNum"> 187 </span><span class="lineCov"> 2037744 : if (name[0] == '.' && (name[1] == 0 || (name[1] == '.' && name[2] == 0)))</span>
|
||||
<span class="lineNum"> 188 </span><span class="lineCov"> 9848 : continue;</span>
|
||||
<span class="lineNum"> 189 </span> :
|
||||
<span class="lineNum"> 190 </span><span class="lineCov"> 2032982 : pathprint(path_next, sizeof(path_next), "%s%s", dir, name);</span>
|
||||
<span class="lineNum"> 191 </span><span class="lineCov"> 2032982 : pathprint(sub_next, sizeof(sub_next), "%s%s", sub, name);</span>
|
||||
<span class="lineNum"> 190 </span><span class="lineCov"> 2032820 : pathprint(path_next, sizeof(path_next), "%s%s", dir, name);</span>
|
||||
<span class="lineNum"> 191 </span><span class="lineCov"> 2032820 : pathprint(sub_next, sizeof(sub_next), "%s%s", sub, name);</span>
|
||||
<span class="lineNum"> 192 </span> :
|
||||
<span class="lineNum"> 193 </span> : /* exclude hidden files even before calling lstat() */
|
||||
<span class="lineNum"> 194 </span><span class="lineCov"> 2032982 : if (disk != 0 && filter_hidden(state->filter_hidden, dd) != 0) {</span>
|
||||
<span class="lineNum"> 194 </span><span class="lineCov"> 2032820 : if (disk != 0 && filter_hidden(state->filter_hidden, dd) != 0) {</span>
|
||||
<span class="lineNum"> 195 </span><span class="lineNoCov"> 0 : msg_verbose("Excluding hidden '%s'\n", path_next);</span>
|
||||
<span class="lineNum"> 196 </span><span class="lineNoCov"> 0 : continue;</span>
|
||||
<span class="lineNum"> 197 </span> : }
|
||||
<span class="lineNum"> 198 </span> :
|
||||
<span class="lineNum"> 199 </span> : /* exclude content files even before calling lstat() */
|
||||
<span class="lineNum"> 200 </span><span class="lineCov"> 2032982 : if (disk != 0 && filter_content(&state->contentlist, path_next) != 0) {</span>
|
||||
<span class="lineNum"> 200 </span><span class="lineCov"> 2032820 : if (disk != 0 && filter_content(&state->contentlist, path_next) != 0) {</span>
|
||||
<span class="lineNum"> 201 </span><span class="lineNoCov"> 0 : msg_verbose("Excluding content '%s'\n", path_next);</span>
|
||||
<span class="lineNum"> 202 </span><span class="lineNoCov"> 0 : continue;</span>
|
||||
<span class="lineNum"> 203 </span> : }
|
||||
|
|
@ -283,7 +283,7 @@
|
|||
<span class="lineNum"> 221 </span> : }
|
||||
<span class="lineNum"> 222 </span> : #else
|
||||
<span class="lineNum"> 223 </span> : /* get lstat info about the file */
|
||||
<span class="lineNum"> 224 </span><span class="lineCov"> 2032982 : if (lstat(path_next, &st) != 0) {</span>
|
||||
<span class="lineNum"> 224 </span><span class="lineCov"> 2032820 : if (lstat(path_next, &st) != 0) {</span>
|
||||
<span class="lineNum"> 225 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 226 </span> : log_fatal("Error in stat file/directory '%s'. %s.\n", path_next, strerror(errno));
|
||||
<span class="lineNum"> 227 </span> : exit(EXIT_FAILURE);
|
||||
|
|
@ -291,13 +291,13 @@
|
|||
<span class="lineNum"> 229 </span> : }
|
||||
<span class="lineNum"> 230 </span> : #endif
|
||||
<span class="lineNum"> 231 </span> :
|
||||
<span class="lineNum"> 232 </span><span class="lineCov"> 2032982 : if (S_ISREG(st.st_mode)) {</span>
|
||||
<span class="lineNum"> 233 </span><span class="lineCov"> 1968671 : if (disk == 0 || filter_path(&state->filterlist, &reason, disk->name, sub_next) == 0) {</span>
|
||||
<span class="lineNum"> 234 </span><span class="lineCov"> 1843968 : search_file(state, path_next, st.st_size, st.st_mtime, STAT_NSEC(&st));</span>
|
||||
<span class="lineNum"> 232 </span><span class="lineCov"> 2032820 : if (S_ISREG(st.st_mode)) {</span>
|
||||
<span class="lineNum"> 233 </span><span class="lineCov"> 1968528 : if (disk == 0 || filter_path(&state->filterlist, &reason, disk->name, sub_next) == 0) {</span>
|
||||
<span class="lineNum"> 234 </span><span class="lineCov"> 1843727 : search_file(state, path_next, st.st_size, st.st_mtime, STAT_NSEC(&st));</span>
|
||||
<span class="lineNum"> 235 </span> : } else {
|
||||
<span class="lineNum"> 236 </span><span class="lineCov"> 124703 : msg_verbose("Excluding link '%s' for rule '%s'\n", path_next, filter_type(reason, out, sizeof(out)));</span>
|
||||
<span class="lineNum"> 236 </span><span class="lineCov"> 124801 : msg_verbose("Excluding link '%s' for rule '%s'\n", path_next, filter_type(reason, out, sizeof(out)));</span>
|
||||
<span class="lineNum"> 237 </span> : }
|
||||
<span class="lineNum"> 238 </span><span class="lineCov"> 64311 : } else if (S_ISDIR(st.st_mode)) {</span>
|
||||
<span class="lineNum"> 238 </span><span class="lineCov"> 64292 : } else if (S_ISDIR(st.st_mode)) {</span>
|
||||
<span class="lineNum"> 239 </span><span class="lineCov"> 1781 : if (disk == 0 || filter_subdir(&state->filterlist, &reason, disk->name, sub_next) == 0) {</span>
|
||||
<span class="lineNum"> 240 </span><span class="lineCov"> 1781 : pathslash(path_next, sizeof(path_next));</span>
|
||||
<span class="lineNum"> 241 </span><span class="lineCov"> 1781 : pathslash(sub_next, sizeof(sub_next));</span>
|
||||
|
|
@ -306,7 +306,7 @@
|
|||
<span class="lineNum"> 244 </span><span class="lineNoCov"> 0 : msg_verbose("Excluding directory '%s' for rule '%s'\n", path_next, filter_type(reason, out, sizeof(out)));</span>
|
||||
<span class="lineNum"> 245 </span> : }
|
||||
<span class="lineNum"> 246 </span> : }
|
||||
<span class="lineNum"> 247 </span><span class="lineCov"> 2037906 : }</span>
|
||||
<span class="lineNum"> 247 </span><span class="lineCov"> 2037744 : }</span>
|
||||
<span class="lineNum"> 248 </span> :
|
||||
<span class="lineNum"> 249 </span><span class="lineCov"> 2462 : if (closedir(d) != 0) {</span>
|
||||
<span class="lineNum"> 250 </span> : /* LCOV_EXCL_START */
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">8</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">8</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">8</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">9</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">9</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">9</td>
|
||||
|
|
@ -526,7 +526,7 @@
|
|||
<span class="lineNum"> 464 </span> : /* Skip space holder file in parity disks */
|
||||
<span class="lineNum"> 465 </span> : { "test-skip-space-holder", 0, 0, OPT_TEST_SKIP_SPACE_HOLDER },
|
||||
<span class="lineNum"> 466 </span> :
|
||||
<span class="lineNum"> 467 </span> : /* Set the ourput format */
|
||||
<span class="lineNum"> 467 </span> : /* Set the output format */
|
||||
<span class="lineNum"> 468 </span> : { "test-fmt", 1, 0, OPT_TEST_FORMAT },
|
||||
<span class="lineNum"> 469 </span> :
|
||||
<span class="lineNum"> 470 </span> : { 0, 0, 0, 0 }
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">2</td>
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="speed.c.gcov.html#39">diffgettimeofday</a></td>
|
||||
<td class="coverFnHi">1814</td>
|
||||
<td class="coverFnHi">1849</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="speed.c.gcov.html#76">speed</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">2</td>
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="speed.c.gcov.html#39">diffgettimeofday</a></td>
|
||||
<td class="coverFnHi">1814</td>
|
||||
<td class="coverFnHi">1849</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="speed.c.gcov.html#76">speed</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">2</td>
|
||||
|
|
@ -100,14 +100,14 @@
|
|||
<span class="lineNum"> 38 </span> : /**
|
||||
<a name="39"><span class="lineNum"> 39 </span> : * Differential us of two timeval.</a>
|
||||
<span class="lineNum"> 40 </span> : */
|
||||
<span class="lineNum"> 41 </span><span class="lineCov"> 1814 : static int64_t diffgettimeofday(struct timeval *start, struct timeval *stop)</span>
|
||||
<span class="lineNum"> 41 </span><span class="lineCov"> 1849 : static int64_t diffgettimeofday(struct timeval *start, struct timeval *stop)</span>
|
||||
<span class="lineNum"> 42 </span> : {
|
||||
<span class="lineNum"> 43 </span> : int64_t d;
|
||||
<span class="lineNum"> 44 </span> :
|
||||
<span class="lineNum"> 45 </span><span class="lineCov"> 1814 : d = 1000000LL * (stop->tv_sec - start->tv_sec);</span>
|
||||
<span class="lineNum"> 46 </span><span class="lineCov"> 1814 : d += stop->tv_usec - start->tv_usec;</span>
|
||||
<span class="lineNum"> 45 </span><span class="lineCov"> 1849 : d = 1000000LL * (stop->tv_sec - start->tv_sec);</span>
|
||||
<span class="lineNum"> 46 </span><span class="lineCov"> 1849 : d += stop->tv_usec - start->tv_usec;</span>
|
||||
<span class="lineNum"> 47 </span> :
|
||||
<span class="lineNum"> 48 </span><span class="lineCov"> 1814 : return d;</span>
|
||||
<span class="lineNum"> 48 </span><span class="lineCov"> 1849 : return d;</span>
|
||||
<span class="lineNum"> 49 </span> : }
|
||||
<span class="lineNum"> 50 </span> :
|
||||
<span class="lineNum"> 51 </span> : /**
|
||||
|
|
@ -232,10 +232,10 @@
|
|||
<span class="lineNum"> 170 </span><span class="lineCov"> 4 : printf("%8s", "memset");</span>
|
||||
<span class="lineNum"> 171 </span><span class="lineCov"> 4 : fflush(stdout);</span>
|
||||
<span class="lineNum"> 172 </span> :
|
||||
<span class="lineNum"> 173 </span><span class="lineCov"> 374 : SPEED_START {</span>
|
||||
<span class="lineNum"> 174 </span><span class="lineCov"> 3330 : for (j = 0; j < nd; ++j)</span>
|
||||
<span class="lineNum"> 175 </span><span class="lineCov"> 2960 : memset(v[j], j, size);</span>
|
||||
<span class="lineNum"> 176 </span><span class="lineCov"> 370 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 173 </span><span class="lineCov"> 375 : SPEED_START {</span>
|
||||
<span class="lineNum"> 174 </span><span class="lineCov"> 3339 : for (j = 0; j < nd; ++j)</span>
|
||||
<span class="lineNum"> 175 </span><span class="lineCov"> 2968 : memset(v[j], j, size);</span>
|
||||
<span class="lineNum"> 176 </span><span class="lineCov"> 371 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 177 </span> :
|
||||
<span class="lineNum"> 178 </span><span class="lineCov"> 4 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 179 </span><span class="lineCov"> 4 : printf("\n");</span>
|
||||
|
|
@ -260,10 +260,10 @@
|
|||
<span class="lineNum"> 198 </span> :
|
||||
<span class="lineNum"> 199 </span> : #if HAVE_SSE42
|
||||
<span class="lineNum"> 200 </span><span class="lineCov"> 4 : if (raid_cpu_has_crc32()) {</span>
|
||||
<span class="lineNum"> 201 </span><span class="lineCov"> 58 : SPEED_START {</span>
|
||||
<span class="lineNum"> 202 </span><span class="lineCov"> 504 : for (j = 0; j < nd; ++j)</span>
|
||||
<span class="lineNum"> 203 </span><span class="lineCov"> 448 : side_effect += crc32c_x86(0, v[j], size);</span>
|
||||
<span class="lineNum"> 204 </span><span class="lineCov"> 56 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 201 </span><span class="lineCov"> 60 : SPEED_START {</span>
|
||||
<span class="lineNum"> 202 </span><span class="lineCov"> 522 : for (j = 0; j < nd; ++j)</span>
|
||||
<span class="lineNum"> 203 </span><span class="lineCov"> 464 : side_effect += crc32c_x86(0, v[j], size);</span>
|
||||
<span class="lineNum"> 204 </span><span class="lineCov"> 58 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 205 </span> :
|
||||
<span class="lineNum"> 206 </span><span class="lineCov"> 2 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 207 </span> : }
|
||||
|
|
@ -302,10 +302,10 @@
|
|||
<span class="lineNum"> 240 </span><span class="lineCov"> 4 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 241 </span><span class="lineCov"> 4 : fflush(stdout);</span>
|
||||
<span class="lineNum"> 242 </span> :
|
||||
<span class="lineNum"> 243 </span><span class="lineCov"> 30 : SPEED_START {</span>
|
||||
<span class="lineNum"> 244 </span><span class="lineCov"> 234 : for (j = 0; j < nd; ++j)</span>
|
||||
<span class="lineNum"> 245 </span><span class="lineCov"> 208 : memhash(HASH_SPOOKY2, seed, digest, v[j], size);</span>
|
||||
<span class="lineNum"> 246 </span><span class="lineCov"> 26 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 243 </span><span class="lineCov"> 32 : SPEED_START {</span>
|
||||
<span class="lineNum"> 244 </span><span class="lineCov"> 252 : for (j = 0; j < nd; ++j)</span>
|
||||
<span class="lineNum"> 245 </span><span class="lineCov"> 224 : memhash(HASH_SPOOKY2, seed, digest, v[j], size);</span>
|
||||
<span class="lineNum"> 246 </span><span class="lineCov"> 28 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 247 </span> :
|
||||
<span class="lineNum"> 248 </span><span class="lineCov"> 4 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 249 </span><span class="lineCov"> 4 : printf("\n");</span>
|
||||
|
|
@ -341,16 +341,16 @@
|
|||
<span class="lineNum"> 279 </span> :
|
||||
<span class="lineNum"> 280 </span><span class="lineCov"> 4 : printf("%8s", "");</span>
|
||||
<span class="lineNum"> 281 </span> :
|
||||
<span class="lineNum"> 282 </span><span class="lineCov"> 114 : SPEED_START {</span>
|
||||
<span class="lineNum"> 283 </span><span class="lineCov"> 110 : raid_gen1_int32(nd, size, v);</span>
|
||||
<span class="lineNum"> 284 </span><span class="lineCov"> 110 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 282 </span><span class="lineCov"> 119 : SPEED_START {</span>
|
||||
<span class="lineNum"> 283 </span><span class="lineCov"> 115 : raid_gen1_int32(nd, size, v);</span>
|
||||
<span class="lineNum"> 284 </span><span class="lineCov"> 115 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 285 </span> :
|
||||
<span class="lineNum"> 286 </span><span class="lineCov"> 4 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 287 </span><span class="lineCov"> 4 : fflush(stdout);</span>
|
||||
<span class="lineNum"> 288 </span> :
|
||||
<span class="lineNum"> 289 </span><span class="lineCov"> 181 : SPEED_START {</span>
|
||||
<span class="lineNum"> 290 </span><span class="lineCov"> 177 : raid_gen1_int64(nd, size, v);</span>
|
||||
<span class="lineNum"> 291 </span><span class="lineCov"> 177 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 289 </span><span class="lineCov"> 184 : SPEED_START {</span>
|
||||
<span class="lineNum"> 290 </span><span class="lineCov"> 180 : raid_gen1_int64(nd, size, v);</span>
|
||||
<span class="lineNum"> 291 </span><span class="lineCov"> 180 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 292 </span> :
|
||||
<span class="lineNum"> 293 </span><span class="lineCov"> 4 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 294 </span><span class="lineCov"> 4 : fflush(stdout);</span>
|
||||
|
|
@ -358,9 +358,9 @@
|
|||
<span class="lineNum"> 296 </span> : #ifdef CONFIG_X86
|
||||
<span class="lineNum"> 297 </span> : #ifdef CONFIG_SSE2
|
||||
<span class="lineNum"> 298 </span><span class="lineCov"> 4 : if (raid_cpu_has_sse2()) {</span>
|
||||
<span class="lineNum"> 299 </span><span class="lineCov"> 305 : SPEED_START {</span>
|
||||
<span class="lineNum"> 300 </span><span class="lineCov"> 301 : raid_gen1_sse2(nd, size, v);</span>
|
||||
<span class="lineNum"> 301 </span><span class="lineCov"> 301 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 299 </span><span class="lineCov"> 309 : SPEED_START {</span>
|
||||
<span class="lineNum"> 300 </span><span class="lineCov"> 305 : raid_gen1_sse2(nd, size, v);</span>
|
||||
<span class="lineNum"> 301 </span><span class="lineCov"> 305 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 302 </span> :
|
||||
<span class="lineNum"> 303 </span><span class="lineCov"> 4 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 304 </span><span class="lineCov"> 4 : fflush(stdout);</span>
|
||||
|
|
@ -376,9 +376,9 @@
|
|||
<span class="lineNum"> 314 </span> : #endif
|
||||
<span class="lineNum"> 315 </span> : #ifdef CONFIG_AVX2
|
||||
<span class="lineNum"> 316 </span><span class="lineCov"> 4 : if (raid_cpu_has_avx2()) {</span>
|
||||
<span class="lineNum"> 317 </span><span class="lineCov"> 13 : SPEED_START {</span>
|
||||
<span class="lineNum"> 318 </span><span class="lineCov"> 12 : raid_gen1_avx2(nd, size, v);</span>
|
||||
<span class="lineNum"> 319 </span><span class="lineCov"> 12 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 317 </span><span class="lineCov"> 14 : SPEED_START {</span>
|
||||
<span class="lineNum"> 318 </span><span class="lineCov"> 13 : raid_gen1_avx2(nd, size, v);</span>
|
||||
<span class="lineNum"> 319 </span><span class="lineCov"> 13 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 320 </span> :
|
||||
<span class="lineNum"> 321 </span><span class="lineCov"> 1 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 322 </span><span class="lineCov"> 1 : fflush(stdout);</span>
|
||||
|
|
@ -394,16 +394,16 @@
|
|||
<span class="lineNum"> 332 </span> :
|
||||
<span class="lineNum"> 333 </span><span class="lineCov"> 4 : printf("%8s", "");</span>
|
||||
<span class="lineNum"> 334 </span> :
|
||||
<span class="lineNum"> 335 </span><span class="lineCov"> 47 : SPEED_START {</span>
|
||||
<span class="lineNum"> 336 </span><span class="lineCov"> 43 : raid_gen2_int32(nd, size, v);</span>
|
||||
<span class="lineNum"> 337 </span><span class="lineCov"> 43 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 335 </span><span class="lineCov"> 48 : SPEED_START {</span>
|
||||
<span class="lineNum"> 336 </span><span class="lineCov"> 44 : raid_gen2_int32(nd, size, v);</span>
|
||||
<span class="lineNum"> 337 </span><span class="lineCov"> 44 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 338 </span> :
|
||||
<span class="lineNum"> 339 </span><span class="lineCov"> 4 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 340 </span><span class="lineCov"> 4 : fflush(stdout);</span>
|
||||
<span class="lineNum"> 341 </span> :
|
||||
<span class="lineNum"> 342 </span><span class="lineCov"> 47 : SPEED_START {</span>
|
||||
<span class="lineNum"> 343 </span><span class="lineCov"> 43 : raid_gen2_int64(nd, size, v);</span>
|
||||
<span class="lineNum"> 344 </span><span class="lineCov"> 43 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 342 </span><span class="lineCov"> 48 : SPEED_START {</span>
|
||||
<span class="lineNum"> 343 </span><span class="lineCov"> 44 : raid_gen2_int64(nd, size, v);</span>
|
||||
<span class="lineNum"> 344 </span><span class="lineCov"> 44 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 345 </span> :
|
||||
<span class="lineNum"> 346 </span><span class="lineCov"> 4 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 347 </span><span class="lineCov"> 4 : fflush(stdout);</span>
|
||||
|
|
@ -411,9 +411,9 @@
|
|||
<span class="lineNum"> 349 </span> : #ifdef CONFIG_X86
|
||||
<span class="lineNum"> 350 </span> : #ifdef CONFIG_SSE2
|
||||
<span class="lineNum"> 351 </span><span class="lineCov"> 4 : if (raid_cpu_has_sse2()) {</span>
|
||||
<span class="lineNum"> 352 </span><span class="lineCov"> 143 : SPEED_START {</span>
|
||||
<span class="lineNum"> 353 </span><span class="lineCov"> 139 : raid_gen2_sse2(nd, size, v);</span>
|
||||
<span class="lineNum"> 354 </span><span class="lineCov"> 139 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 352 </span><span class="lineCov"> 150 : SPEED_START {</span>
|
||||
<span class="lineNum"> 353 </span><span class="lineCov"> 146 : raid_gen2_sse2(nd, size, v);</span>
|
||||
<span class="lineNum"> 354 </span><span class="lineCov"> 146 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 355 </span> :
|
||||
<span class="lineNum"> 356 </span><span class="lineCov"> 4 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 357 </span><span class="lineCov"> 4 : fflush(stdout);</span>
|
||||
|
|
@ -470,9 +470,9 @@
|
|||
<span class="lineNum"> 408 </span> : #ifdef CONFIG_X86
|
||||
<span class="lineNum"> 409 </span> : #ifdef CONFIG_SSE2
|
||||
<span class="lineNum"> 410 </span><span class="lineCov"> 4 : if (raid_cpu_has_sse2()) {</span>
|
||||
<span class="lineNum"> 411 </span><span class="lineCov"> 87 : SPEED_START {</span>
|
||||
<span class="lineNum"> 412 </span><span class="lineCov"> 83 : raid_genz_sse2(nd, size, v);</span>
|
||||
<span class="lineNum"> 413 </span><span class="lineCov"> 83 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 411 </span><span class="lineCov"> 91 : SPEED_START {</span>
|
||||
<span class="lineNum"> 412 </span><span class="lineCov"> 87 : raid_genz_sse2(nd, size, v);</span>
|
||||
<span class="lineNum"> 413 </span><span class="lineCov"> 87 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 414 </span> :
|
||||
<span class="lineNum"> 415 </span><span class="lineCov"> 4 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 416 </span><span class="lineCov"> 4 : fflush(stdout);</span>
|
||||
|
|
@ -537,9 +537,9 @@
|
|||
<span class="lineNum"> 475 </span> : #ifdef CONFIG_X86
|
||||
<span class="lineNum"> 476 </span> : #ifdef CONFIG_SSSE3
|
||||
<span class="lineNum"> 477 </span><span class="lineCov"> 4 : if (raid_cpu_has_ssse3()) {</span>
|
||||
<span class="lineNum"> 478 </span><span class="lineCov"> 52 : SPEED_START {</span>
|
||||
<span class="lineNum"> 479 </span><span class="lineCov"> 49 : raid_gen3_ssse3(nd, size, v);</span>
|
||||
<span class="lineNum"> 480 </span><span class="lineCov"> 49 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 478 </span><span class="lineCov"> 51 : SPEED_START {</span>
|
||||
<span class="lineNum"> 479 </span><span class="lineCov"> 48 : raid_gen3_ssse3(nd, size, v);</span>
|
||||
<span class="lineNum"> 480 </span><span class="lineCov"> 48 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 481 </span> :
|
||||
<span class="lineNum"> 482 </span><span class="lineCov"> 3 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 483 </span><span class="lineCov"> 3 : fflush(stdout);</span>
|
||||
|
|
@ -667,9 +667,9 @@
|
|||
<span class="lineNum"> 605 </span> : #ifdef CONFIG_X86
|
||||
<span class="lineNum"> 606 </span> : #ifdef CONFIG_SSSE3
|
||||
<span class="lineNum"> 607 </span><span class="lineCov"> 4 : if (raid_cpu_has_ssse3()) {</span>
|
||||
<span class="lineNum"> 608 </span><span class="lineCov"> 25 : SPEED_START {</span>
|
||||
<span class="lineNum"> 609 </span><span class="lineCov"> 22 : raid_gen5_ssse3(nd, size, v);</span>
|
||||
<span class="lineNum"> 610 </span><span class="lineCov"> 22 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 608 </span><span class="lineCov"> 27 : SPEED_START {</span>
|
||||
<span class="lineNum"> 609 </span><span class="lineCov"> 24 : raid_gen5_ssse3(nd, size, v);</span>
|
||||
<span class="lineNum"> 610 </span><span class="lineCov"> 24 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 611 </span> :
|
||||
<span class="lineNum"> 612 </span><span class="lineCov"> 3 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 613 </span><span class="lineCov"> 3 : fflush(stdout);</span>
|
||||
|
|
@ -707,9 +707,9 @@
|
|||
<span class="lineNum"> 645 </span><span class="lineCov"> 4 : printf("%8s", raid_gen6_tag());</span>
|
||||
<span class="lineNum"> 646 </span><span class="lineCov"> 4 : fflush(stdout);</span>
|
||||
<span class="lineNum"> 647 </span> :
|
||||
<span class="lineNum"> 648 </span><span class="lineCov"> 9 : SPEED_START {</span>
|
||||
<span class="lineNum"> 649 </span><span class="lineCov"> 5 : raid_gen6_int8(nd, size, v);</span>
|
||||
<span class="lineNum"> 650 </span><span class="lineCov"> 5 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 648 </span><span class="lineCov"> 12 : SPEED_START {</span>
|
||||
<span class="lineNum"> 649 </span><span class="lineCov"> 8 : raid_gen6_int8(nd, size, v);</span>
|
||||
<span class="lineNum"> 650 </span><span class="lineCov"> 8 : } SPEED_STOP</span>
|
||||
<span class="lineNum"> 651 </span> :
|
||||
<span class="lineNum"> 652 </span><span class="lineCov"> 4 : printf("%8" PRIu64, ds / dt);</span>
|
||||
<span class="lineNum"> 653 </span><span class="lineCov"> 4 : fflush(stdout);</span>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="spooky2.c.gcov.html#109">SpookyHash128</a></td>
|
||||
<td class="coverFnHi">3861457</td>
|
||||
<td class="coverFnHi">3861492</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="spooky2.c.gcov.html#109">SpookyHash128</a></td>
|
||||
<td class="coverFnHi">3861457</td>
|
||||
<td class="coverFnHi">3861492</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
@ -170,7 +170,7 @@
|
|||
<span class="lineNum"> 108 </span> : //
|
||||
<a name="109"><span class="lineNum"> 109 </span> : #define sc_const 0xdeadbeefdeadbeefLL</a>
|
||||
<span class="lineNum"> 110 </span> :
|
||||
<span class="lineNum"> 111 </span><span class="lineCov"> 3861457 : void SpookyHash128(const void* data, size_t size, const uint8_t* seed, uint8_t* digest)</span>
|
||||
<span class="lineNum"> 111 </span><span class="lineCov"> 3861492 : void SpookyHash128(const void* data, size_t size, const uint8_t* seed, uint8_t* digest)</span>
|
||||
<span class="lineNum"> 112 </span> : {
|
||||
<span class="lineNum"> 113 </span> : uint64_t h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11;
|
||||
<span class="lineNum"> 114 </span> : uint64_t buf[sc_numVars];
|
||||
|
|
@ -182,45 +182,45 @@
|
|||
<span class="lineNum"> 120 </span> : unsigned i;
|
||||
<span class="lineNum"> 121 </span> : #endif
|
||||
<span class="lineNum"> 122 </span> :
|
||||
<span class="lineNum"> 123 </span><span class="lineCov"> 3861457 : h9 = util_read64(seed + 0);</span>
|
||||
<span class="lineNum"> 124 </span><span class="lineCov"> 3861457 : h10 = util_read64(seed + 8);</span>
|
||||
<span class="lineNum"> 123 </span><span class="lineCov"> 3861492 : h9 = util_read64(seed + 0);</span>
|
||||
<span class="lineNum"> 124 </span><span class="lineCov"> 3861492 : h10 = util_read64(seed + 8);</span>
|
||||
<span class="lineNum"> 125 </span> :
|
||||
<span class="lineNum"> 126 </span><span class="lineCov"> 3861457 : h0 = h3 = h6 = h9;</span>
|
||||
<span class="lineNum"> 127 </span><span class="lineCov"> 3861457 : h1 = h4 = h7 = h10;</span>
|
||||
<span class="lineNum"> 128 </span><span class="lineCov"> 3861457 : h2 = h5 = h8 = h11 = sc_const;</span>
|
||||
<span class="lineNum"> 126 </span><span class="lineCov"> 3861492 : h0 = h3 = h6 = h9;</span>
|
||||
<span class="lineNum"> 127 </span><span class="lineCov"> 3861492 : h1 = h4 = h7 = h10;</span>
|
||||
<span class="lineNum"> 128 </span><span class="lineCov"> 3861492 : h2 = h5 = h8 = h11 = sc_const;</span>
|
||||
<span class="lineNum"> 129 </span> :
|
||||
<span class="lineNum"> 130 </span><span class="lineCov"> 3861457 : nblocks = size / sc_blockSize;</span>
|
||||
<span class="lineNum"> 131 </span><span class="lineCov"> 3861457 : blocks = data;</span>
|
||||
<span class="lineNum"> 132 </span><span class="lineCov"> 3861457 : end = blocks + nblocks * sc_numVars;</span>
|
||||
<span class="lineNum"> 130 </span><span class="lineCov"> 3861492 : nblocks = size / sc_blockSize;</span>
|
||||
<span class="lineNum"> 131 </span><span class="lineCov"> 3861492 : blocks = data;</span>
|
||||
<span class="lineNum"> 132 </span><span class="lineCov"> 3861492 : end = blocks + nblocks * sc_numVars;</span>
|
||||
<span class="lineNum"> 133 </span> :
|
||||
<span class="lineNum"> 134 </span> : /* body */
|
||||
<span class="lineNum"> 135 </span><span class="lineCov"> 38698449 : while (blocks < end) {</span>
|
||||
<span class="lineNum"> 135 </span><span class="lineCov"> 38741744 : while (blocks < end) {</span>
|
||||
<span class="lineNum"> 136 </span> : #if WORDS_BIGENDIAN
|
||||
<span class="lineNum"> 137 </span> : for (i = 0; i < sc_numVars; ++i)
|
||||
<span class="lineNum"> 138 </span> : buf[i] = util_swap64(blocks[i]);
|
||||
<span class="lineNum"> 139 </span> : Mix(buf, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);
|
||||
<span class="lineNum"> 140 </span> : #else
|
||||
<span class="lineNum"> 141 </span><span class="lineCov"> 30975535 : Mix(blocks, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);</span>
|
||||
<span class="lineNum"> 141 </span><span class="lineCov"> 31018760 : Mix(blocks, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);</span>
|
||||
<span class="lineNum"> 142 </span> : #endif
|
||||
<span class="lineNum"> 143 </span><span class="lineCov"> 30975535 : blocks += sc_numVars;</span>
|
||||
<span class="lineNum"> 143 </span><span class="lineCov"> 31018760 : blocks += sc_numVars;</span>
|
||||
<span class="lineNum"> 144 </span> : }
|
||||
<span class="lineNum"> 145 </span> :
|
||||
<span class="lineNum"> 146 </span> : /* tail */
|
||||
<span class="lineNum"> 147 </span><span class="lineCov"> 3861457 : size_remainder = (size - ((const uint8_t*)end - (const uint8_t*)data));</span>
|
||||
<span class="lineNum"> 148 </span><span class="lineCov"> 3861457 : memcpy(buf, end, size_remainder);</span>
|
||||
<span class="lineNum"> 149 </span><span class="lineCov"> 3861457 : memset(((uint8_t*)buf) + size_remainder, 0, sc_blockSize - size_remainder);</span>
|
||||
<span class="lineNum"> 150 </span><span class="lineCov"> 3861457 : ((uint8_t*)buf)[sc_blockSize - 1] = size_remainder;</span>
|
||||
<span class="lineNum"> 147 </span><span class="lineCov"> 3861492 : size_remainder = (size - ((const uint8_t*)end - (const uint8_t*)data));</span>
|
||||
<span class="lineNum"> 148 </span><span class="lineCov"> 3861492 : memcpy(buf, end, size_remainder);</span>
|
||||
<span class="lineNum"> 149 </span><span class="lineCov"> 3861492 : memset(((uint8_t*)buf) + size_remainder, 0, sc_blockSize - size_remainder);</span>
|
||||
<span class="lineNum"> 150 </span><span class="lineCov"> 3861492 : ((uint8_t*)buf)[sc_blockSize - 1] = size_remainder;</span>
|
||||
<span class="lineNum"> 151 </span> :
|
||||
<span class="lineNum"> 152 </span> : /* finalization */
|
||||
<span class="lineNum"> 153 </span> : #if WORDS_BIGENDIAN
|
||||
<span class="lineNum"> 154 </span> : for (i = 0; i < sc_numVars; ++i)
|
||||
<span class="lineNum"> 155 </span> : buf[i] = util_swap64(buf[i]);
|
||||
<span class="lineNum"> 156 </span> : #endif
|
||||
<span class="lineNum"> 157 </span><span class="lineCov"> 3861457 : End(buf, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);</span>
|
||||
<span class="lineNum"> 157 </span><span class="lineCov"> 3861492 : End(buf, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);</span>
|
||||
<span class="lineNum"> 158 </span> :
|
||||
<span class="lineNum"> 159 </span><span class="lineCov"> 3861457 : util_write64(digest + 0, h0);</span>
|
||||
<span class="lineNum"> 160 </span><span class="lineCov"> 3861457 : util_write64(digest + 8, h1);</span>
|
||||
<span class="lineNum"> 161 </span><span class="lineCov"> 3861457 : }</span>
|
||||
<span class="lineNum"> 159 </span><span class="lineCov"> 3861492 : util_write64(digest + 0, h0);</span>
|
||||
<span class="lineNum"> 160 </span><span class="lineCov"> 3861492 : util_write64(digest + 8, h1);</span>
|
||||
<span class="lineNum"> 161 </span><span class="lineCov"> 3861492 : }</span>
|
||||
<span class="lineNum"> 162 </span> :
|
||||
</pre>
|
||||
</td>
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">1478</td>
|
||||
<td class="headerCovTableEntry">1612</td>
|
||||
<td class="headerCovTableEntryHi">91.7 %</td>
|
||||
<td class="headerCovTableEntry">1450</td>
|
||||
<td class="headerCovTableEntry">1615</td>
|
||||
<td class="headerCovTableEntryMed">89.8 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">45</td>
|
||||
|
|
@ -60,51 +60,51 @@
|
|||
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1683">fs_is_block_deleted</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1686">fs_is_block_deleted</a></td>
|
||||
<td class="coverFnHi">4529621</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1646">fs_info_is_required</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1649">fs_info_is_required</a></td>
|
||||
<td class="coverFnHi">1547923</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4334">state_progress</a></td>
|
||||
<td class="coverFnHi">1073436</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4343">state_progress</a></td>
|
||||
<td class="coverFnHi">1073492</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4490">state_usage_misc</a></td>
|
||||
<td class="coverFnHi">1063244</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4499">state_usage_misc</a></td>
|
||||
<td class="coverFnHi">1063636</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4534">state_usage_disk</a></td>
|
||||
<td class="coverFnHi">912519</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4543">state_usage_disk</a></td>
|
||||
<td class="coverFnHi">912855</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4523">state_usage_hash</a></td>
|
||||
<td class="coverFnHi">776953</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4532">state_usage_hash</a></td>
|
||||
<td class="coverFnHi">777321</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4554">state_usage_parity</a></td>
|
||||
<td class="coverFnHi">774185</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4563">state_usage_parity</a></td>
|
||||
<td class="coverFnHi">774521</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1617">fs_position_is_required</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1620">fs_position_is_required</a></td>
|
||||
<td class="coverFnHi">756099</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#64">lev_config_name</a></td>
|
||||
<td class="coverFnHi">186623</td>
|
||||
<td class="coverFnHi">186606</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4501">state_usage_sched</a></td>
|
||||
<td class="coverFnHi">149863</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4510">state_usage_sched</a></td>
|
||||
<td class="coverFnHi">149919</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4512">state_usage_raid</a></td>
|
||||
<td class="coverFnHi">140402</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4521">state_usage_raid</a></td>
|
||||
<td class="coverFnHi">140474</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1251">find_disk_by_name</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1253">find_disk_by_name</a></td>
|
||||
<td class="coverFnHi">7047</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -112,17 +112,17 @@
|
|||
<td class="coverFnHi">6345</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3789">state_verify_thread</a></td>
|
||||
<td class="coverFnHi">1012</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3794">state_verify_thread</a></td>
|
||||
<td class="coverFnHi">1009</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4168">state_progress_latest</a></td>
|
||||
<td class="coverFnHi">532</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4580">state_fscheck</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4589">state_fscheck</a></td>
|
||||
<td class="coverFnHi">499</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4177">state_progress_latest</a></td>
|
||||
<td class="coverFnHi">478</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#494">validate_smartctl</a></td>
|
||||
<td class="coverFnHi">366</td>
|
||||
|
|
@ -144,19 +144,19 @@
|
|||
<td class="coverFnHi">265</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3628">state_read</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3633">state_read</a></td>
|
||||
<td class="coverFnHi">261</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1311">state_map</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1313">state_map</a></td>
|
||||
<td class="coverFnHi">260</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1742">state_read_content</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1745">state_read_content</a></td>
|
||||
<td class="coverFnHi">254</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1586">state_content_check</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1589">state_content_check</a></td>
|
||||
<td class="coverFnHi">253</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -164,51 +164,51 @@
|
|||
<td class="coverFnHi">244</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4110">state_progress_end</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4115">state_progress_end</a></td>
|
||||
<td class="coverFnHi">221</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4078">state_progress_begin</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4083">state_progress_begin</a></td>
|
||||
<td class="coverFnHi">221</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1516">state_refresh</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1519">state_refresh</a></td>
|
||||
<td class="coverFnHi">173</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3937">state_write</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3942">state_write</a></td>
|
||||
<td class="coverFnHi">151</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#2877">state_write_thread</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#2882">state_write_thread</a></td>
|
||||
<td class="coverFnHi">151</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3333">state_write_content</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3338">state_write_content</a></td>
|
||||
<td class="coverFnHi">151</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3830">state_verify_content</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3835">state_verify_content</a></td>
|
||||
<td class="coverFnHi">151</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3915">state_rename_content</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3920">state_rename_content</a></td>
|
||||
<td class="coverFnHi">151</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3954">state_skip</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3959">state_skip</a></td>
|
||||
<td class="coverFnHi">122</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3986">state_filter</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3991">state_filter</a></td>
|
||||
<td class="coverFnHi">122</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4483">state_usage_waste</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4492">state_usage_waste</a></td>
|
||||
<td class="coverFnHi">104</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4568">state_usage_print</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4577">state_usage_print</a></td>
|
||||
<td class="coverFnHi">96</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -216,31 +216,31 @@
|
|||
<td class="coverFnHi">7</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4196">state_progress_graph</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1280">find_disk_by_uuid</a></td>
|
||||
<td class="coverFnHi">2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1278">find_disk_by_uuid</a></td>
|
||||
<td class="coverFnHi">2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4149">state_progress_restart</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4205">state_progress_graph</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4597">generate_configuration</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4158">state_progress_restart</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1694">decoding_error</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4606">generate_configuration</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4135">state_progress_stop</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1697">decoding_error</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1663">fs_position_clear_deleted</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4144">state_progress_stop</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1666">fs_position_clear_deleted</a></td>
|
||||
<td class="coverFnLo">0</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">1478</td>
|
||||
<td class="headerCovTableEntry">1612</td>
|
||||
<td class="headerCovTableEntryHi">91.7 %</td>
|
||||
<td class="headerCovTableEntry">1450</td>
|
||||
<td class="headerCovTableEntry">1615</td>
|
||||
<td class="headerCovTableEntryMed">89.8 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">45</td>
|
||||
|
|
@ -60,40 +60,40 @@
|
|||
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="state.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1694">decoding_error</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1697">decoding_error</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1251">find_disk_by_name</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1253">find_disk_by_name</a></td>
|
||||
<td class="coverFnHi">7047</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1278">find_disk_by_uuid</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1280">find_disk_by_uuid</a></td>
|
||||
<td class="coverFnHi">2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1646">fs_info_is_required</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1649">fs_info_is_required</a></td>
|
||||
<td class="coverFnHi">1547923</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1683">fs_is_block_deleted</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1686">fs_is_block_deleted</a></td>
|
||||
<td class="coverFnHi">4529621</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1663">fs_position_clear_deleted</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1666">fs_position_clear_deleted</a></td>
|
||||
<td class="coverFnLo">0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1617">fs_position_is_required</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1620">fs_position_is_required</a></td>
|
||||
<td class="coverFnHi">756099</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4597">generate_configuration</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4606">generate_configuration</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#64">lev_config_name</a></td>
|
||||
<td class="coverFnHi">186623</td>
|
||||
<td class="coverFnHi">186606</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#78">lev_config_scan</a></td>
|
||||
|
|
@ -116,7 +116,7 @@
|
|||
<td class="coverFnHi">265</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1586">state_content_check</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1589">state_content_check</a></td>
|
||||
<td class="coverFnHi">253</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -124,11 +124,11 @@
|
|||
<td class="coverFnHi">244</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3986">state_filter</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3991">state_filter</a></td>
|
||||
<td class="coverFnHi">122</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4580">state_fscheck</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4589">state_fscheck</a></td>
|
||||
<td class="coverFnHi">499</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -136,107 +136,107 @@
|
|||
<td class="coverFnHi">267</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1311">state_map</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1313">state_map</a></td>
|
||||
<td class="coverFnHi">260</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4334">state_progress</a></td>
|
||||
<td class="coverFnHi">1073436</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4343">state_progress</a></td>
|
||||
<td class="coverFnHi">1073492</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4078">state_progress_begin</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4083">state_progress_begin</a></td>
|
||||
<td class="coverFnHi">221</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4110">state_progress_end</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4115">state_progress_end</a></td>
|
||||
<td class="coverFnHi">221</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4196">state_progress_graph</a></td>
|
||||
<td class="coverFnHi">2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4168">state_progress_latest</a></td>
|
||||
<td class="coverFnHi">532</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4149">state_progress_restart</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4205">state_progress_graph</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4135">state_progress_stop</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4177">state_progress_latest</a></td>
|
||||
<td class="coverFnHi">478</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4158">state_progress_restart</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3628">state_read</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4144">state_progress_stop</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3633">state_read</a></td>
|
||||
<td class="coverFnHi">261</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1742">state_read_content</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1745">state_read_content</a></td>
|
||||
<td class="coverFnHi">254</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1516">state_refresh</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#1519">state_refresh</a></td>
|
||||
<td class="coverFnHi">173</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3915">state_rename_content</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3920">state_rename_content</a></td>
|
||||
<td class="coverFnHi">151</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3954">state_skip</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3959">state_skip</a></td>
|
||||
<td class="coverFnHi">122</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4534">state_usage_disk</a></td>
|
||||
<td class="coverFnHi">912519</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4543">state_usage_disk</a></td>
|
||||
<td class="coverFnHi">912855</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4523">state_usage_hash</a></td>
|
||||
<td class="coverFnHi">776953</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4532">state_usage_hash</a></td>
|
||||
<td class="coverFnHi">777321</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4490">state_usage_misc</a></td>
|
||||
<td class="coverFnHi">1063244</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4499">state_usage_misc</a></td>
|
||||
<td class="coverFnHi">1063636</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4554">state_usage_parity</a></td>
|
||||
<td class="coverFnHi">774185</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4563">state_usage_parity</a></td>
|
||||
<td class="coverFnHi">774521</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4568">state_usage_print</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4577">state_usage_print</a></td>
|
||||
<td class="coverFnHi">96</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4512">state_usage_raid</a></td>
|
||||
<td class="coverFnHi">140402</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4521">state_usage_raid</a></td>
|
||||
<td class="coverFnHi">140474</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4501">state_usage_sched</a></td>
|
||||
<td class="coverFnHi">149863</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4510">state_usage_sched</a></td>
|
||||
<td class="coverFnHi">149919</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4483">state_usage_waste</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#4492">state_usage_waste</a></td>
|
||||
<td class="coverFnHi">104</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3830">state_verify_content</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3835">state_verify_content</a></td>
|
||||
<td class="coverFnHi">151</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3789">state_verify_thread</a></td>
|
||||
<td class="coverFnHi">1012</td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3794">state_verify_thread</a></td>
|
||||
<td class="coverFnHi">1009</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3937">state_write</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3942">state_write</a></td>
|
||||
<td class="coverFnHi">151</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3333">state_write_content</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#3338">state_write_content</a></td>
|
||||
<td class="coverFnHi">151</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#2877">state_write_thread</a></td>
|
||||
<td class="coverFn"><a href="state.c.gcov.html#2882">state_write_thread</a></td>
|
||||
<td class="coverFnHi">151</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">3</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">3</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">3</td>
|
||||
|
|
@ -395,10 +395,10 @@
|
|||
<span class="lineNum"> 333 </span><span class="lineCov"> 39808 : scrub_time = info_get_time(info);</span>
|
||||
<span class="lineNum"> 334 </span> :
|
||||
<span class="lineNum"> 335 </span><span class="lineCov"> 39808 : if (info_get_justsynced(info)) {</span>
|
||||
<span class="lineNum"> 336 </span><span class="lineCov"> 20516 : ++unscrubbed_blocks;</span>
|
||||
<span class="lineNum"> 336 </span><span class="lineCov"> 20520 : ++unscrubbed_blocks;</span>
|
||||
<span class="lineNum"> 337 </span> :
|
||||
<span class="lineNum"> 338 </span> : /* mark the time as not scrubbed */
|
||||
<span class="lineNum"> 339 </span><span class="lineCov"> 20516 : scrub_time |= TIME_NEW;</span>
|
||||
<span class="lineNum"> 339 </span><span class="lineCov"> 20520 : scrub_time |= TIME_NEW;</span>
|
||||
<span class="lineNum"> 340 </span> : }
|
||||
<span class="lineNum"> 341 </span> :
|
||||
<span class="lineNum"> 342 </span><span class="lineCov"> 39808 : timemap[count++] = scrub_time;</span>
|
||||
|
|
@ -430,16 +430,16 @@
|
|||
<span class="lineNum"> 368 </span> : /* output the info map */
|
||||
<span class="lineNum"> 369 </span><span class="lineCov"> 9 : i = 0;</span>
|
||||
<span class="lineNum"> 370 </span><span class="lineCov"> 9 : log_tag("info_count:%u\n", count);</span>
|
||||
<span class="lineNum"> 371 </span><span class="lineCov"> 40 : while (i < count) {</span>
|
||||
<span class="lineNum"> 372 </span><span class="lineCov"> 22 : unsigned j = i + 1;</span>
|
||||
<span class="lineNum"> 373 </span><span class="lineCov"> 39830 : while (j < count && timemap[i] == timemap[j])</span>
|
||||
<span class="lineNum"> 374 </span><span class="lineCov"> 39786 : ++j;</span>
|
||||
<span class="lineNum"> 375 </span><span class="lineCov"> 22 : if ((timemap[i] & TIME_NEW) == 0) {</span>
|
||||
<span class="lineNum"> 376 </span><span class="lineCov"> 8 : log_tag("info_time:%" PRIu64 ":%u:scrubbed\n", (uint64_t)timemap[i], j - i);</span>
|
||||
<span class="lineNum"> 371 </span><span class="lineCov"> 39 : while (i < count) {</span>
|
||||
<span class="lineNum"> 372 </span><span class="lineCov"> 21 : unsigned j = i + 1;</span>
|
||||
<span class="lineNum"> 373 </span><span class="lineCov"> 39829 : while (j < count && timemap[i] == timemap[j])</span>
|
||||
<span class="lineNum"> 374 </span><span class="lineCov"> 39787 : ++j;</span>
|
||||
<span class="lineNum"> 375 </span><span class="lineCov"> 21 : if ((timemap[i] & TIME_NEW) == 0) {</span>
|
||||
<span class="lineNum"> 376 </span><span class="lineCov"> 7 : log_tag("info_time:%" PRIu64 ":%u:scrubbed\n", (uint64_t)timemap[i], j - i);</span>
|
||||
<span class="lineNum"> 377 </span> : } else {
|
||||
<span class="lineNum"> 378 </span><span class="lineCov"> 14 : log_tag("info_time:%" PRIu64 ":%u:new\n", (uint64_t)(timemap[i] & ~TIME_NEW), j - i);</span>
|
||||
<span class="lineNum"> 379 </span> : }
|
||||
<span class="lineNum"> 380 </span><span class="lineCov"> 22 : i = j;</span>
|
||||
<span class="lineNum"> 380 </span><span class="lineCov"> 21 : i = j;</span>
|
||||
<span class="lineNum"> 381 </span> : }
|
||||
<span class="lineNum"> 382 </span> :
|
||||
<span class="lineNum"> 383 </span><span class="lineCov"> 9 : oldest = timemap[0];</span>
|
||||
|
|
@ -462,9 +462,9 @@
|
|||
<span class="lineNum"> 400 </span><span class="lineCov"> 630 : step_new = 0;</span>
|
||||
<span class="lineNum"> 401 </span><span class="lineCov"> 41068 : while (barpos < count && timemap[barpos] <= limit) {</span>
|
||||
<span class="lineNum"> 402 </span><span class="lineCov"> 39808 : if ((timemap[barpos] & TIME_NEW) != 0)</span>
|
||||
<span class="lineNum"> 403 </span><span class="lineCov"> 20516 : ++step_new;</span>
|
||||
<span class="lineNum"> 403 </span><span class="lineCov"> 20520 : ++step_new;</span>
|
||||
<span class="lineNum"> 404 </span> : else
|
||||
<span class="lineNum"> 405 </span><span class="lineCov"> 19292 : ++step_scrubbed;</span>
|
||||
<span class="lineNum"> 405 </span><span class="lineCov"> 19288 : ++step_scrubbed;</span>
|
||||
<span class="lineNum"> 406 </span><span class="lineCov"> 39808 : ++barpos;</span>
|
||||
<span class="lineNum"> 407 </span> : }
|
||||
<span class="lineNum"> 408 </span> :
|
||||
|
|
@ -494,20 +494,20 @@
|
|||
<span class="lineNum"> 432 </span><span class="lineCov"> 9450 : unsigned scrubbed = bar_scrubbed[x];</span>
|
||||
<span class="lineNum"> 433 </span> :
|
||||
<span class="lineNum"> 434 </span><span class="lineCov"> 9450 : if (both > pivot_upper) {</span>
|
||||
<span class="lineNum"> 435 </span><span class="lineCov"> 162 : if (scrubbed > pivot_lower)</span>
|
||||
<span class="lineNum"> 436 </span><span class="lineCov"> 71 : printf("*");</span>
|
||||
<span class="lineNum"> 435 </span><span class="lineCov"> 159 : if (scrubbed > pivot_lower)</span>
|
||||
<span class="lineNum"> 436 </span><span class="lineCov"> 63 : printf("*");</span>
|
||||
<span class="lineNum"> 437 </span> : else
|
||||
<span class="lineNum"> 438 </span><span class="lineCov"> 91 : printf("o");</span>
|
||||
<span class="lineNum"> 439 </span><span class="lineCov"> 9288 : } else if (both > pivot_lower) {</span>
|
||||
<span class="lineNum"> 438 </span><span class="lineCov"> 96 : printf("o");</span>
|
||||
<span class="lineNum"> 439 </span><span class="lineCov"> 9291 : } else if (both > pivot_lower) {</span>
|
||||
<span class="lineNum"> 440 </span><span class="lineCov"> 21 : if (scrubbed == both)</span>
|
||||
<span class="lineNum"> 441 </span><span class="lineCov"> 7 : printf("*");</span>
|
||||
<span class="lineNum"> 442 </span> : else
|
||||
<span class="lineNum"> 443 </span><span class="lineCov"> 14 : printf("o");</span>
|
||||
<span class="lineNum"> 444 </span> : } else {
|
||||
<span class="lineNum"> 445 </span><span class="lineCov"> 9267 : if (y == GRAPH_ROW - 1)</span>
|
||||
<span class="lineNum"> 445 </span><span class="lineCov"> 9270 : if (y == GRAPH_ROW - 1)</span>
|
||||
<span class="lineNum"> 446 </span><span class="lineCov"> 609 : printf("_");</span>
|
||||
<span class="lineNum"> 447 </span> : else
|
||||
<span class="lineNum"> 448 </span><span class="lineCov"> 8658 : printf(" ");</span>
|
||||
<span class="lineNum"> 448 </span><span class="lineCov"> 8661 : printf(" ");</span>
|
||||
<span class="lineNum"> 449 </span> : }
|
||||
<span class="lineNum"> 450 </span> : }
|
||||
<span class="lineNum"> 451 </span><span class="lineCov"> 135 : printf("\n");</span>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">27</td>
|
||||
|
|
@ -61,23 +61,23 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#633">swrite</a></td>
|
||||
<td class="coverFnHi">20725404</td>
|
||||
<td class="coverFnHi">20725318</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#525">sgetb32</a></td>
|
||||
<td class="coverFnHi">18667305</td>
|
||||
<td class="coverFnHi">18667259</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#384">sread</a></td>
|
||||
<td class="coverFnHi">12810007</td>
|
||||
<td class="coverFnHi">12810019</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#561">sgetb64</a></td>
|
||||
<td class="coverFnHi">10849138</td>
|
||||
<td class="coverFnHi">10849144</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#670">sputb32</a></td>
|
||||
<td class="coverFnHi">9127777</td>
|
||||
<td class="coverFnHi">9127691</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#691">sputb64</a></td>
|
||||
|
|
@ -85,7 +85,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#612">sgetbs</a></td>
|
||||
<td class="coverFnHi">3877064</td>
|
||||
<td class="coverFnHi">3877077</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#724">sputbs</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">27</td>
|
||||
|
|
@ -85,11 +85,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#525">sgetb32</a></td>
|
||||
<td class="coverFnHi">18667305</td>
|
||||
<td class="coverFnHi">18667259</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#561">sgetb64</a></td>
|
||||
<td class="coverFnHi">10849138</td>
|
||||
<td class="coverFnHi">10849144</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#597">sgetble32</a></td>
|
||||
|
|
@ -97,7 +97,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#612">sgetbs</a></td>
|
||||
<td class="coverFnHi">3877064</td>
|
||||
<td class="coverFnHi">3877077</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#339">sgetc_uncached</a></td>
|
||||
|
|
@ -141,7 +141,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#670">sputb32</a></td>
|
||||
<td class="coverFnHi">9127777</td>
|
||||
<td class="coverFnHi">9127691</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#691">sputb64</a></td>
|
||||
|
|
@ -157,7 +157,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#384">sread</a></td>
|
||||
<td class="coverFnHi">12810007</td>
|
||||
<td class="coverFnHi">12810019</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#738">ssync</a></td>
|
||||
|
|
@ -169,7 +169,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.c.gcov.html#633">swrite</a></td>
|
||||
<td class="coverFnHi">20725404</td>
|
||||
<td class="coverFnHi">20725318</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">27</td>
|
||||
|
|
@ -275,29 +275,29 @@
|
|||
<span class="lineNum"> 213 </span> :
|
||||
<span class="lineNum"> 214 </span><span class="lineCov"> 606069 : ret = read(s->handle[0].f, s->buffer, STREAM_SIZE);</span>
|
||||
<span class="lineNum"> 215 </span> :
|
||||
<span class="lineNum"> 216 </span><span class="lineCov"> 606069 : if (ret < 0) {</span>
|
||||
<span class="lineNum"> 216 </span><span class="lineCov"> 606067 : if (ret < 0) {</span>
|
||||
<span class="lineNum"> 217 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 218 </span> : s->state = STREAM_STATE_ERROR;
|
||||
<span class="lineNum"> 219 </span> : return EOF;
|
||||
<span class="lineNum"> 220 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 221 </span> : }
|
||||
<span class="lineNum"> 222 </span><span class="lineCov"> 606069 : if (ret == 0) {</span>
|
||||
<span class="lineNum"> 222 </span><span class="lineCov"> 606067 : if (ret == 0) {</span>
|
||||
<span class="lineNum"> 223 </span><span class="lineCov"> 1659 : s->state = STREAM_STATE_EOF;</span>
|
||||
<span class="lineNum"> 224 </span><span class="lineCov"> 1659 : return EOF;</span>
|
||||
<span class="lineNum"> 225 </span> : }
|
||||
<span class="lineNum"> 226 </span> :
|
||||
<span class="lineNum"> 227 </span> : /* update the crc */
|
||||
<span class="lineNum"> 228 </span><span class="lineCov"> 604410 : s->crc_uncached = s->crc;</span>
|
||||
<span class="lineNum"> 229 </span><span class="lineCov"> 604410 : s->crc = crc32c(s->crc, s->buffer, ret);</span>
|
||||
<span class="lineNum"> 228 </span><span class="lineCov"> 604408 : s->crc_uncached = s->crc;</span>
|
||||
<span class="lineNum"> 229 </span><span class="lineCov"> 604408 : s->crc = crc32c(s->crc, s->buffer, ret);</span>
|
||||
<span class="lineNum"> 230 </span> :
|
||||
<span class="lineNum"> 231 </span> : /* update the offset */
|
||||
<span class="lineNum"> 232 </span><span class="lineCov"> 604409 : s->offset_uncached = s->offset;</span>
|
||||
<span class="lineNum"> 233 </span><span class="lineCov"> 604409 : s->offset += ret;</span>
|
||||
<span class="lineNum"> 232 </span><span class="lineCov"> 604410 : s->offset_uncached = s->offset;</span>
|
||||
<span class="lineNum"> 233 </span><span class="lineCov"> 604410 : s->offset += ret;</span>
|
||||
<span class="lineNum"> 234 </span> :
|
||||
<span class="lineNum"> 235 </span><span class="lineCov"> 604409 : s->pos = s->buffer;</span>
|
||||
<span class="lineNum"> 236 </span><span class="lineCov"> 604409 : s->end = s->buffer + ret;</span>
|
||||
<span class="lineNum"> 235 </span><span class="lineCov"> 604410 : s->pos = s->buffer;</span>
|
||||
<span class="lineNum"> 236 </span><span class="lineCov"> 604410 : s->end = s->buffer + ret;</span>
|
||||
<span class="lineNum"> 237 </span> :
|
||||
<span class="lineNum"> 238 </span><span class="lineCov"> 604409 : return 0;</span>
|
||||
<span class="lineNum"> 238 </span><span class="lineCov"> 604410 : return 0;</span>
|
||||
<a name="239"><span class="lineNum"> 239 </span> : }</a>
|
||||
<span class="lineNum"> 240 </span> :
|
||||
<span class="lineNum"> 241 </span><span class="lineCov"> 1142 : int sdeplete(STREAM* s, unsigned char* last)</span>
|
||||
|
|
@ -314,11 +314,11 @@
|
|||
<span class="lineNum"> 252 </span><span class="lineCov"> 148389 : s->pos = s->end - 4;</span>
|
||||
<span class="lineNum"> 253 </span> :
|
||||
<span class="lineNum"> 254 </span> : /* insert the last 4 bytes */
|
||||
<span class="lineNum"> 255 </span><span class="lineCov"> 1469855 : while (s->pos < s->end) {</span>
|
||||
<span class="lineNum"> 256 </span><span class="lineCov"> 853323 : last[0] = last[1];</span>
|
||||
<span class="lineNum"> 257 </span><span class="lineCov"> 853323 : last[1] = last[2];</span>
|
||||
<span class="lineNum"> 258 </span><span class="lineCov"> 853323 : last[2] = last[3];</span>
|
||||
<span class="lineNum"> 259 </span><span class="lineCov"> 853323 : last[3] = *s->pos++;</span>
|
||||
<span class="lineNum"> 255 </span><span class="lineCov"> 1469857 : while (s->pos < s->end) {</span>
|
||||
<span class="lineNum"> 256 </span><span class="lineCov"> 853325 : last[0] = last[1];</span>
|
||||
<span class="lineNum"> 257 </span><span class="lineCov"> 853325 : last[1] = last[2];</span>
|
||||
<span class="lineNum"> 258 </span><span class="lineCov"> 853325 : last[2] = last[3];</span>
|
||||
<span class="lineNum"> 259 </span><span class="lineCov"> 853325 : last[3] = *s->pos++;</span>
|
||||
<span class="lineNum"> 260 </span> : }
|
||||
<span class="lineNum"> 261 </span> :
|
||||
<span class="lineNum"> 262 </span> : /* fill again the buffer until the end of the file */
|
||||
|
|
@ -445,35 +445,35 @@
|
|||
<span class="lineNum"> 383 </span><span class="lineCov"> 8196 : return i - str;</span>
|
||||
<a name="384"><span class="lineNum"> 384 </span> : }</a>
|
||||
<span class="lineNum"> 385 </span> :
|
||||
<span class="lineNum"> 386 </span><span class="lineCov"> 12810007 : int sread(STREAM* f, void* void_data, unsigned size)</span>
|
||||
<span class="lineNum"> 386 </span><span class="lineCov"> 12810019 : int sread(STREAM* f, void* void_data, unsigned size)</span>
|
||||
<span class="lineNum"> 387 </span> : {
|
||||
<span class="lineNum"> 388 </span><span class="lineCov"> 12810007 : unsigned char* data = void_data;</span>
|
||||
<span class="lineNum"> 388 </span><span class="lineCov"> 12810019 : unsigned char* data = void_data;</span>
|
||||
<span class="lineNum"> 389 </span> :
|
||||
<span class="lineNum"> 390 </span> : /* if there is enough space in memory */
|
||||
<span class="lineNum"> 391 </span><span class="lineCov"> 12810007 : if (sptrlookup(f, size)) {</span>
|
||||
<span class="lineNum"> 391 </span><span class="lineCov"> 12810019 : if (sptrlookup(f, size)) {</span>
|
||||
<span class="lineNum"> 392 </span> : /* optimized version with all the data in memory */
|
||||
<span class="lineNum"> 393 </span><span class="lineCov"> 12783678 : unsigned char* pos = sptrget(f);</span>
|
||||
<span class="lineNum"> 393 </span><span class="lineCov"> 12783673 : unsigned char* pos = sptrget(f);</span>
|
||||
<span class="lineNum"> 394 </span> :
|
||||
<span class="lineNum"> 395 </span> : /* copy it */
|
||||
<span class="lineNum"> 396 </span><span class="lineCov"> 217717015 : while (size--)</span>
|
||||
<span class="lineNum"> 397 </span><span class="lineCov"> 192149659 : *data++ = *pos++;</span>
|
||||
<span class="lineNum"> 396 </span><span class="lineCov"> 217716910 : while (size--)</span>
|
||||
<span class="lineNum"> 397 </span><span class="lineCov"> 192149564 : *data++ = *pos++;</span>
|
||||
<span class="lineNum"> 398 </span> :
|
||||
<span class="lineNum"> 399 </span><span class="lineCov"> 12783678 : sptrset(f, pos);</span>
|
||||
<span class="lineNum"> 399 </span><span class="lineCov"> 12783673 : sptrset(f, pos);</span>
|
||||
<span class="lineNum"> 400 </span> : } else {
|
||||
<span class="lineNum"> 401 </span> : /* standard version using sgetc() */
|
||||
<span class="lineNum"> 402 </span><span class="lineCov"> 1378240 : while (size--) {</span>
|
||||
<span class="lineNum"> 403 </span><span class="lineCov"> 1325582 : int c = sgetc(f);</span>
|
||||
<span class="lineNum"> 404 </span><span class="lineCov"> 1325582 : if (c == EOF) {</span>
|
||||
<span class="lineNum"> 402 </span><span class="lineCov"> 1378641 : while (size--) {</span>
|
||||
<span class="lineNum"> 403 </span><span class="lineCov"> 1325949 : int c = sgetc(f);</span>
|
||||
<span class="lineNum"> 404 </span><span class="lineCov"> 1325949 : if (c == EOF) {</span>
|
||||
<span class="lineNum"> 405 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 406 </span> : return -1;
|
||||
<span class="lineNum"> 407 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 408 </span> : }
|
||||
<span class="lineNum"> 409 </span> :
|
||||
<span class="lineNum"> 410 </span><span class="lineCov"> 1325582 : *data++ = c;</span>
|
||||
<span class="lineNum"> 410 </span><span class="lineCov"> 1325949 : *data++ = c;</span>
|
||||
<span class="lineNum"> 411 </span> : }
|
||||
<span class="lineNum"> 412 </span> : }
|
||||
<span class="lineNum"> 413 </span> :
|
||||
<span class="lineNum"> 414 </span><span class="lineCov"> 12810007 : return 0;</span>
|
||||
<span class="lineNum"> 414 </span><span class="lineCov"> 12810019 : return 0;</span>
|
||||
<a name="415"><span class="lineNum"> 415 </span> : }</a>
|
||||
<span class="lineNum"> 416 </span> :
|
||||
<span class="lineNum"> 417 </span><span class="lineCov"> 5448 : int sgetline(STREAM* f, char* str, int size)</span>
|
||||
|
|
@ -586,76 +586,76 @@
|
|||
<span class="lineNum"> 524 </span> : }
|
||||
<a name="525"><span class="lineNum"> 525 </span> : }</a>
|
||||
<span class="lineNum"> 526 </span> :
|
||||
<span class="lineNum"> 527 </span><span class="lineCov"> 18667305 : int sgetb32(STREAM* f, uint32_t* value)</span>
|
||||
<span class="lineNum"> 527 </span><span class="lineCov"> 18667259 : int sgetb32(STREAM* f, uint32_t* value)</span>
|
||||
<span class="lineNum"> 528 </span> : {
|
||||
<span class="lineNum"> 529 </span> : uint32_t v;
|
||||
<span class="lineNum"> 530 </span> : unsigned char b;
|
||||
<span class="lineNum"> 531 </span> : unsigned char s;
|
||||
<span class="lineNum"> 532 </span> : int c;
|
||||
<span class="lineNum"> 533 </span> :
|
||||
<span class="lineNum"> 534 </span><span class="lineCov"> 18667305 : v = 0;</span>
|
||||
<span class="lineNum"> 535 </span><span class="lineCov"> 18667305 : s = 0;</span>
|
||||
<span class="lineNum"> 534 </span><span class="lineCov"> 18667259 : v = 0;</span>
|
||||
<span class="lineNum"> 535 </span><span class="lineCov"> 18667259 : s = 0;</span>
|
||||
<span class="lineNum"> 536 </span> : loop:
|
||||
<span class="lineNum"> 537 </span><span class="lineCov"> 36513909 : c = sgetc(f);</span>
|
||||
<span class="lineNum"> 538 </span><span class="lineCov"> 36513909 : if (c == EOF) {</span>
|
||||
<span class="lineNum"> 537 </span><span class="lineCov"> 35261143 : c = sgetc(f);</span>
|
||||
<span class="lineNum"> 538 </span><span class="lineCov"> 35261143 : if (c == EOF) {</span>
|
||||
<span class="lineNum"> 539 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 540 </span> : return -1;
|
||||
<span class="lineNum"> 541 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 542 </span> : }
|
||||
<span class="lineNum"> 543 </span> :
|
||||
<span class="lineNum"> 544 </span><span class="lineCov"> 36513909 : b = (unsigned char)c;</span>
|
||||
<span class="lineNum"> 545 </span><span class="lineCov"> 36513909 : if ((b & 0x80) == 0) {</span>
|
||||
<span class="lineNum"> 546 </span><span class="lineCov"> 17846604 : v |= (uint32_t)b << s;</span>
|
||||
<span class="lineNum"> 547 </span><span class="lineCov"> 17846604 : s += 7;</span>
|
||||
<span class="lineNum"> 548 </span><span class="lineCov"> 17846604 : if (s >= 32) {</span>
|
||||
<span class="lineNum"> 544 </span><span class="lineCov"> 35261143 : b = (unsigned char)c;</span>
|
||||
<span class="lineNum"> 545 </span><span class="lineCov"> 35261143 : if ((b & 0x80) == 0) {</span>
|
||||
<span class="lineNum"> 546 </span><span class="lineCov"> 16593884 : v |= (uint32_t)b << s;</span>
|
||||
<span class="lineNum"> 547 </span><span class="lineCov"> 16593884 : s += 7;</span>
|
||||
<span class="lineNum"> 548 </span><span class="lineCov"> 16593884 : if (s >= 32) {</span>
|
||||
<span class="lineNum"> 549 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 550 </span> : return -1;
|
||||
<span class="lineNum"> 551 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 552 </span> : }
|
||||
<span class="lineNum"> 553 </span><span class="lineCov"> 17846604 : goto loop;</span>
|
||||
<span class="lineNum"> 553 </span><span class="lineCov"> 16593884 : goto loop;</span>
|
||||
<span class="lineNum"> 554 </span> : }
|
||||
<span class="lineNum"> 555 </span> :
|
||||
<span class="lineNum"> 556 </span><span class="lineCov"> 18667305 : v |= (uint32_t)(b & 0x7f) << s;</span>
|
||||
<span class="lineNum"> 556 </span><span class="lineCov"> 18667259 : v |= (uint32_t)(b & 0x7f) << s;</span>
|
||||
<span class="lineNum"> 557 </span> :
|
||||
<span class="lineNum"> 558 </span><span class="lineCov"> 18667305 : *value = v;</span>
|
||||
<span class="lineNum"> 558 </span><span class="lineCov"> 18667259 : *value = v;</span>
|
||||
<span class="lineNum"> 559 </span> :
|
||||
<span class="lineNum"> 560 </span><span class="lineCov"> 18667305 : return 0;</span>
|
||||
<span class="lineNum"> 560 </span><span class="lineCov"> 18667259 : return 0;</span>
|
||||
<a name="561"><span class="lineNum"> 561 </span> : }</a>
|
||||
<span class="lineNum"> 562 </span> :
|
||||
<span class="lineNum"> 563 </span><span class="lineCov"> 10849138 : int sgetb64(STREAM* f, uint64_t* value)</span>
|
||||
<span class="lineNum"> 563 </span><span class="lineCov"> 10849144 : int sgetb64(STREAM* f, uint64_t* value)</span>
|
||||
<span class="lineNum"> 564 </span> : {
|
||||
<span class="lineNum"> 565 </span> : uint64_t v;
|
||||
<span class="lineNum"> 566 </span> : unsigned char b;
|
||||
<span class="lineNum"> 567 </span> : unsigned char s;
|
||||
<span class="lineNum"> 568 </span> : int c;
|
||||
<span class="lineNum"> 569 </span> :
|
||||
<span class="lineNum"> 570 </span><span class="lineCov"> 10849138 : v = 0;</span>
|
||||
<span class="lineNum"> 571 </span><span class="lineCov"> 10849138 : s = 0;</span>
|
||||
<span class="lineNum"> 570 </span><span class="lineCov"> 10849144 : v = 0;</span>
|
||||
<span class="lineNum"> 571 </span><span class="lineCov"> 10849144 : s = 0;</span>
|
||||
<span class="lineNum"> 572 </span> : loop:
|
||||
<span class="lineNum"> 573 </span><span class="lineCov"> 39665269 : c = sgetc(f);</span>
|
||||
<span class="lineNum"> 574 </span><span class="lineCov"> 39665269 : if (c == EOF) {</span>
|
||||
<span class="lineNum"> 573 </span><span class="lineCov"> 39665284 : c = sgetc(f);</span>
|
||||
<span class="lineNum"> 574 </span><span class="lineCov"> 39665284 : if (c == EOF) {</span>
|
||||
<span class="lineNum"> 575 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 576 </span> : return -1;
|
||||
<span class="lineNum"> 577 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 578 </span> : }
|
||||
<span class="lineNum"> 579 </span> :
|
||||
<span class="lineNum"> 580 </span><span class="lineCov"> 39665269 : b = (unsigned char)c;</span>
|
||||
<span class="lineNum"> 581 </span><span class="lineCov"> 39665269 : if ((b & 0x80) == 0) {</span>
|
||||
<span class="lineNum"> 582 </span><span class="lineCov"> 28816131 : v |= (uint64_t)b << s;</span>
|
||||
<span class="lineNum"> 583 </span><span class="lineCov"> 28816131 : s += 7;</span>
|
||||
<span class="lineNum"> 584 </span><span class="lineCov"> 28816131 : if (s >= 64) {</span>
|
||||
<span class="lineNum"> 580 </span><span class="lineCov"> 39665284 : b = (unsigned char)c;</span>
|
||||
<span class="lineNum"> 581 </span><span class="lineCov"> 39665284 : if ((b & 0x80) == 0) {</span>
|
||||
<span class="lineNum"> 582 </span><span class="lineCov"> 28816140 : v |= (uint64_t)b << s;</span>
|
||||
<span class="lineNum"> 583 </span><span class="lineCov"> 28816140 : s += 7;</span>
|
||||
<span class="lineNum"> 584 </span><span class="lineCov"> 28816140 : if (s >= 64) {</span>
|
||||
<span class="lineNum"> 585 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 586 </span> : return -1;
|
||||
<span class="lineNum"> 587 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 588 </span> : }
|
||||
<span class="lineNum"> 589 </span><span class="lineCov"> 28816131 : goto loop;</span>
|
||||
<span class="lineNum"> 589 </span><span class="lineCov"> 28816140 : goto loop;</span>
|
||||
<span class="lineNum"> 590 </span> : }
|
||||
<span class="lineNum"> 591 </span> :
|
||||
<span class="lineNum"> 592 </span><span class="lineCov"> 10849138 : v |= (uint64_t)(b & 0x7f) << s;</span>
|
||||
<span class="lineNum"> 592 </span><span class="lineCov"> 10849144 : v |= (uint64_t)(b & 0x7f) << s;</span>
|
||||
<span class="lineNum"> 593 </span> :
|
||||
<span class="lineNum"> 594 </span><span class="lineCov"> 10849138 : *value = v;</span>
|
||||
<span class="lineNum"> 594 </span><span class="lineCov"> 10849144 : *value = v;</span>
|
||||
<span class="lineNum"> 595 </span> :
|
||||
<span class="lineNum"> 596 </span><span class="lineCov"> 10849138 : return 0;</span>
|
||||
<span class="lineNum"> 596 </span><span class="lineCov"> 10849144 : return 0;</span>
|
||||
<a name="597"><span class="lineNum"> 597 </span> : }</a>
|
||||
<span class="lineNum"> 598 </span> :
|
||||
<span class="lineNum"> 599 </span><span class="lineCov"> 381 : int sgetble32(STREAM* f, uint32_t* value)</span>
|
||||
|
|
@ -673,35 +673,35 @@
|
|||
<span class="lineNum"> 611 </span><span class="lineCov"> 381 : return 0;</span>
|
||||
<a name="612"><span class="lineNum"> 612 </span> : }</a>
|
||||
<span class="lineNum"> 613 </span> :
|
||||
<span class="lineNum"> 614 </span><span class="lineCov"> 3877064 : int sgetbs(STREAM* f, char* str, int size)</span>
|
||||
<span class="lineNum"> 614 </span><span class="lineCov"> 3877077 : int sgetbs(STREAM* f, char* str, int size)</span>
|
||||
<span class="lineNum"> 615 </span> : {
|
||||
<span class="lineNum"> 616 </span> : uint32_t len;
|
||||
<span class="lineNum"> 617 </span> :
|
||||
<span class="lineNum"> 618 </span><span class="lineCov"> 3877064 : if (sgetb32(f, &len) < 0) {</span>
|
||||
<span class="lineNum"> 618 </span><span class="lineCov"> 3877077 : if (sgetb32(f, &len) < 0) {</span>
|
||||
<span class="lineNum"> 619 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 620 </span> : return -1;
|
||||
<span class="lineNum"> 621 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 622 </span> : }
|
||||
<span class="lineNum"> 623 </span> :
|
||||
<span class="lineNum"> 624 </span><span class="lineCov"> 3877064 : if (len + 1 > (uint32_t)size) {</span>
|
||||
<span class="lineNum"> 624 </span><span class="lineCov"> 3877077 : if (len + 1 > (uint32_t)size) {</span>
|
||||
<span class="lineNum"> 625 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 626 </span> : return -1;
|
||||
<span class="lineNum"> 627 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 628 </span> : }
|
||||
<span class="lineNum"> 629 </span> :
|
||||
<span class="lineNum"> 630 </span><span class="lineCov"> 3877064 : str[len] = 0;</span>
|
||||
<span class="lineNum"> 630 </span><span class="lineCov"> 3877076 : str[len] = 0;</span>
|
||||
<span class="lineNum"> 631 </span> :
|
||||
<span class="lineNum"> 632 </span><span class="lineCov"> 3877064 : return sread(f, str, (int)len);</span>
|
||||
<span class="lineNum"> 632 </span><span class="lineCov"> 3877076 : return sread(f, str, (int)len);</span>
|
||||
<a name="633"><span class="lineNum"> 633 </span> : }</a>
|
||||
<span class="lineNum"> 634 </span> :
|
||||
<span class="lineNum"> 635 </span><span class="lineCov"> 20725404 : int swrite(const void* void_data, unsigned size, STREAM* f)</span>
|
||||
<span class="lineNum"> 635 </span><span class="lineCov"> 20725318 : int swrite(const void* void_data, unsigned size, STREAM* f)</span>
|
||||
<span class="lineNum"> 636 </span> : {
|
||||
<span class="lineNum"> 637 </span><span class="lineCov"> 20725404 : const unsigned char* data = void_data;</span>
|
||||
<span class="lineNum"> 637 </span><span class="lineCov"> 20725318 : const unsigned char* data = void_data;</span>
|
||||
<span class="lineNum"> 638 </span> :
|
||||
<span class="lineNum"> 639 </span> : /* if there is enough space in memory */
|
||||
<span class="lineNum"> 640 </span><span class="lineCov"> 20725404 : if (sptrlookup(f, size)) {</span>
|
||||
<span class="lineNum"> 640 </span><span class="lineCov"> 20725318 : if (sptrlookup(f, size)) {</span>
|
||||
<span class="lineNum"> 641 </span> : /* optimized version with all the data in memory */
|
||||
<span class="lineNum"> 642 </span><span class="lineCov"> 20719227 : unsigned char* pos = sptrget(f);</span>
|
||||
<span class="lineNum"> 642 </span><span class="lineCov"> 20719138 : unsigned char* pos = sptrget(f);</span>
|
||||
<span class="lineNum"> 643 </span> :
|
||||
<span class="lineNum"> 644 </span> : /**
|
||||
<span class="lineNum"> 645 </span> : * Update the crc *before* writing the data in the buffer
|
||||
|
|
@ -710,17 +710,17 @@
|
|||
<span class="lineNum"> 648 </span> : * to be able to detect memory errors on the buffer,
|
||||
<span class="lineNum"> 649 </span> : * happening before we write it on the file.
|
||||
<span class="lineNum"> 650 </span> : */
|
||||
<span class="lineNum"> 651 </span><span class="lineCov"> 20719227 : f->crc_stream = crc32c_plain(f->crc_stream, data, size);</span>
|
||||
<span class="lineNum"> 651 </span><span class="lineCov"> 20719138 : f->crc_stream = crc32c_plain(f->crc_stream, data, size);</span>
|
||||
<span class="lineNum"> 652 </span> :
|
||||
<span class="lineNum"> 653 </span> : /* copy it */
|
||||
<span class="lineNum"> 654 </span><span class="lineCov"> 173052917 : while (size--)</span>
|
||||
<span class="lineNum"> 655 </span><span class="lineCov"> 131614463 : *pos++ = *data++;</span>
|
||||
<span class="lineNum"> 654 </span><span class="lineCov"> 172416299 : while (size--)</span>
|
||||
<span class="lineNum"> 655 </span><span class="lineCov"> 130978023 : *pos++ = *data++;</span>
|
||||
<span class="lineNum"> 656 </span> :
|
||||
<span class="lineNum"> 657 </span><span class="lineCov"> 20719227 : sptrset(f, pos);</span>
|
||||
<span class="lineNum"> 657 </span><span class="lineCov"> 20719138 : sptrset(f, pos);</span>
|
||||
<span class="lineNum"> 658 </span> : } else {
|
||||
<span class="lineNum"> 659 </span> : /* standard version using sputc() */
|
||||
<span class="lineNum"> 660 </span><span class="lineCov"> 201663 : while (size--) {</span>
|
||||
<span class="lineNum"> 661 </span><span class="lineCov"> 189309 : if (sputc(*data++, f) != 0) {</span>
|
||||
<span class="lineNum"> 660 </span><span class="lineCov"> 201861 : while (size--) {</span>
|
||||
<span class="lineNum"> 661 </span><span class="lineCov"> 189501 : if (sputc(*data++, f) != 0) {</span>
|
||||
<span class="lineNum"> 662 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 663 </span> : return -1;
|
||||
<span class="lineNum"> 664 </span> : /* LCOV_EXCL_STOP */
|
||||
|
|
@ -728,28 +728,28 @@
|
|||
<span class="lineNum"> 666 </span> : }
|
||||
<span class="lineNum"> 667 </span> : }
|
||||
<span class="lineNum"> 668 </span> :
|
||||
<span class="lineNum"> 669 </span><span class="lineCov"> 20725404 : return 0;</span>
|
||||
<span class="lineNum"> 669 </span><span class="lineCov"> 20725318 : return 0;</span>
|
||||
<a name="670"><span class="lineNum"> 670 </span> : }</a>
|
||||
<span class="lineNum"> 671 </span> :
|
||||
<span class="lineNum"> 672 </span><span class="lineCov"> 9127777 : int sputb32(uint32_t value, STREAM* s)</span>
|
||||
<span class="lineNum"> 672 </span><span class="lineCov"> 9127691 : int sputb32(uint32_t value, STREAM* s)</span>
|
||||
<span class="lineNum"> 673 </span> : {
|
||||
<span class="lineNum"> 674 </span> : unsigned char b;
|
||||
<span class="lineNum"> 675 </span> : unsigned char buf[16];
|
||||
<span class="lineNum"> 676 </span> : unsigned i;
|
||||
<span class="lineNum"> 677 </span> :
|
||||
<span class="lineNum"> 678 </span><span class="lineCov"> 9127777 : i = 0;</span>
|
||||
<span class="lineNum"> 678 </span><span class="lineCov"> 9127691 : i = 0;</span>
|
||||
<span class="lineNum"> 679 </span> : loop:
|
||||
<span class="lineNum"> 680 </span><span class="lineCov"> 17895036 : b = value & 0x7f;</span>
|
||||
<span class="lineNum"> 681 </span><span class="lineCov"> 17895036 : value >>= 7;</span>
|
||||
<span class="lineNum"> 680 </span><span class="lineCov"> 17258788 : b = value & 0x7f;</span>
|
||||
<span class="lineNum"> 681 </span><span class="lineCov"> 17258788 : value >>= 7;</span>
|
||||
<span class="lineNum"> 682 </span> :
|
||||
<span class="lineNum"> 683 </span><span class="lineCov"> 17895036 : if (value) {</span>
|
||||
<span class="lineNum"> 684 </span><span class="lineCov"> 8767259 : buf[i++] = b;</span>
|
||||
<span class="lineNum"> 685 </span><span class="lineCov"> 8767259 : goto loop;</span>
|
||||
<span class="lineNum"> 683 </span><span class="lineCov"> 17258788 : if (value) {</span>
|
||||
<span class="lineNum"> 684 </span><span class="lineCov"> 8131097 : buf[i++] = b;</span>
|
||||
<span class="lineNum"> 685 </span><span class="lineCov"> 8131097 : goto loop;</span>
|
||||
<span class="lineNum"> 686 </span> : }
|
||||
<span class="lineNum"> 687 </span> :
|
||||
<span class="lineNum"> 688 </span><span class="lineCov"> 9127777 : buf[i++] = b | 0x80;</span>
|
||||
<span class="lineNum"> 688 </span><span class="lineCov"> 9127691 : buf[i++] = b | 0x80;</span>
|
||||
<span class="lineNum"> 689 </span> :
|
||||
<span class="lineNum"> 690 </span><span class="lineCov"> 9127777 : return swrite(buf, i, s);</span>
|
||||
<span class="lineNum"> 690 </span><span class="lineCov"> 9127691 : return swrite(buf, i, s);</span>
|
||||
<a name="691"><span class="lineNum"> 691 </span> : }</a>
|
||||
<span class="lineNum"> 692 </span> :
|
||||
<span class="lineNum"> 693 </span><span class="lineCov"> 5317120 : int sputb64(uint64_t value, STREAM* s)</span>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">10</td>
|
||||
|
|
@ -61,27 +61,27 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#230">sgetc</a></td>
|
||||
<td class="coverFnHi">85137242</td>
|
||||
<td class="coverFnHi">83884881</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#160">sptrlookup</a></td>
|
||||
<td class="coverFnHi">33540859</td>
|
||||
<td class="coverFnHi">33540785</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#176">sptrset</a></td>
|
||||
<td class="coverFnHi">33502905</td>
|
||||
<td class="coverFnHi">33502811</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#168">sptrget</a></td>
|
||||
<td class="coverFnHi">33502905</td>
|
||||
<td class="coverFnHi">33502811</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#346">sputc</a></td>
|
||||
<td class="coverFnHi">3808426</td>
|
||||
<td class="coverFnHi">3808662</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#184">serror</a></td>
|
||||
<td class="coverFnHi">3635550</td>
|
||||
<td class="coverFnHi">3635536</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#241">sungetc</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">10</td>
|
||||
|
|
@ -65,7 +65,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#184">serror</a></td>
|
||||
<td class="coverFnHi">3635550</td>
|
||||
<td class="coverFnHi">3635536</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#208">serrorfile</a></td>
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#230">sgetc</a></td>
|
||||
<td class="coverFnHi">85137242</td>
|
||||
<td class="coverFnHi">83884881</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#256">sgeteol</a></td>
|
||||
|
|
@ -85,19 +85,19 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#168">sptrget</a></td>
|
||||
<td class="coverFnHi">33502905</td>
|
||||
<td class="coverFnHi">33502811</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#160">sptrlookup</a></td>
|
||||
<td class="coverFnHi">33540859</td>
|
||||
<td class="coverFnHi">33540785</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#176">sptrset</a></td>
|
||||
<td class="coverFnHi">33502905</td>
|
||||
<td class="coverFnHi">33502811</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#346">sputc</a></td>
|
||||
<td class="coverFnHi">3808426</td>
|
||||
<td class="coverFnHi">3808662</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="stream.h.gcov.html#241">sungetc</a></td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">10</td>
|
||||
|
|
@ -221,33 +221,33 @@
|
|||
<span class="lineNum"> 159 </span> : /**
|
||||
<a name="160"><span class="lineNum"> 160 </span> : * Check if the buffer has enough data loaded.</a>
|
||||
<span class="lineNum"> 161 </span> : */
|
||||
<span class="lineNum"> 162 </span><span class="lineCov"> 33540859 : static inline int sptrlookup(STREAM* s, int size)</span>
|
||||
<span class="lineNum"> 162 </span><span class="lineCov"> 33540785 : static inline int sptrlookup(STREAM* s, int size)</span>
|
||||
<span class="lineNum"> 163 </span> : {
|
||||
<span class="lineNum"> 164 </span><span class="lineCov"> 33540859 : return s->pos + size <= s->end;</span>
|
||||
<span class="lineNum"> 164 </span><span class="lineCov"> 33540785 : return s->pos + size <= s->end;</span>
|
||||
<span class="lineNum"> 165 </span> : }
|
||||
<span class="lineNum"> 166 </span> :
|
||||
<span class="lineNum"> 167 </span> : /**
|
||||
<a name="168"><span class="lineNum"> 168 </span> : * Get the current stream ptr.</a>
|
||||
<span class="lineNum"> 169 </span> : */
|
||||
<span class="lineNum"> 170 </span><span class="lineCov"> 33502905 : static inline unsigned char* sptrget(STREAM* s)</span>
|
||||
<span class="lineNum"> 170 </span><span class="lineCov"> 33502811 : static inline unsigned char* sptrget(STREAM* s)</span>
|
||||
<span class="lineNum"> 171 </span> : {
|
||||
<span class="lineNum"> 172 </span><span class="lineCov"> 33502905 : return s->pos;</span>
|
||||
<span class="lineNum"> 172 </span><span class="lineCov"> 33502811 : return s->pos;</span>
|
||||
<span class="lineNum"> 173 </span> : }
|
||||
<span class="lineNum"> 174 </span> :
|
||||
<span class="lineNum"> 175 </span> : /**
|
||||
<a name="176"><span class="lineNum"> 176 </span> : * Set the current stream ptr.</a>
|
||||
<span class="lineNum"> 177 </span> : */
|
||||
<span class="lineNum"> 178 </span><span class="lineCov"> 33502905 : static inline void sptrset(STREAM* s, unsigned char* ptr)</span>
|
||||
<span class="lineNum"> 178 </span><span class="lineCov"> 33502811 : static inline void sptrset(STREAM* s, unsigned char* ptr)</span>
|
||||
<span class="lineNum"> 179 </span> : {
|
||||
<span class="lineNum"> 180 </span><span class="lineCov"> 33502905 : s->pos = ptr;</span>
|
||||
<span class="lineNum"> 181 </span><span class="lineCov"> 33502905 : }</span>
|
||||
<span class="lineNum"> 180 </span><span class="lineCov"> 33502811 : s->pos = ptr;</span>
|
||||
<span class="lineNum"> 181 </span><span class="lineCov"> 33502811 : }</span>
|
||||
<span class="lineNum"> 182 </span> :
|
||||
<span class="lineNum"> 183 </span> : /**
|
||||
<a name="184"><span class="lineNum"> 184 </span> : * Check the error status. Like ferror().</a>
|
||||
<span class="lineNum"> 185 </span> : */
|
||||
<span class="lineNum"> 186 </span><span class="lineCov"> 3635550 : static inline int serror(STREAM* s)</span>
|
||||
<span class="lineNum"> 186 </span><span class="lineCov"> 3635536 : static inline int serror(STREAM* s)</span>
|
||||
<span class="lineNum"> 187 </span> : {
|
||||
<span class="lineNum"> 188 </span><span class="lineCov"> 3635550 : return s->state == STREAM_STATE_ERROR;</span>
|
||||
<span class="lineNum"> 188 </span><span class="lineCov"> 3635536 : return s->state == STREAM_STATE_ERROR;</span>
|
||||
<span class="lineNum"> 189 </span> : }
|
||||
<span class="lineNum"> 190 </span> :
|
||||
<span class="lineNum"> 191 </span> : /**
|
||||
|
|
@ -291,11 +291,11 @@
|
|||
<span class="lineNum"> 229 </span> : /**
|
||||
<a name="230"><span class="lineNum"> 230 </span> : * Read a char. Like fgetc().</a>
|
||||
<span class="lineNum"> 231 </span> : */
|
||||
<span class="lineNum"> 232 </span><span class="lineCov"> 85137242 : static inline int sgetc(STREAM* s)</span>
|
||||
<span class="lineNum"> 232 </span><span class="lineCov"> 83884881 : static inline int sgetc(STREAM* s)</span>
|
||||
<span class="lineNum"> 233 </span> : {
|
||||
<span class="lineNum"> 234 </span><span class="lineCov"> 85137242 : if (tommy_unlikely(s->pos == s->end))</span>
|
||||
<span class="lineNum"> 234 </span><span class="lineCov"> 83884881 : if (tommy_unlikely(s->pos == s->end))</span>
|
||||
<span class="lineNum"> 235 </span><span class="lineCov"> 298863 : return sgetc_uncached(s);</span>
|
||||
<span class="lineNum"> 236 </span><span class="lineCov"> 84838379 : return *s->pos++;</span>
|
||||
<span class="lineNum"> 236 </span><span class="lineCov"> 83586018 : return *s->pos++;</span>
|
||||
<span class="lineNum"> 237 </span> : }
|
||||
<span class="lineNum"> 238 </span> :
|
||||
<span class="lineNum"> 239 </span> : /**
|
||||
|
|
@ -407,9 +407,9 @@
|
|||
<span class="lineNum"> 345 </span> : * Write a char. Like fputc().
|
||||
<a name="346"><span class="lineNum"> 346 </span> : * Return 0 on success or -1 on error.</a>
|
||||
<span class="lineNum"> 347 </span> : */
|
||||
<span class="lineNum"> 348 </span><span class="lineCov"> 3808426 : static inline int sputc(int c, STREAM* s)</span>
|
||||
<span class="lineNum"> 348 </span><span class="lineCov"> 3808662 : static inline int sputc(int c, STREAM* s)</span>
|
||||
<span class="lineNum"> 349 </span> : {
|
||||
<span class="lineNum"> 350 </span><span class="lineCov"> 3808426 : if (s->pos == s->end) {</span>
|
||||
<span class="lineNum"> 350 </span><span class="lineCov"> 3808662 : if (s->pos == s->end) {</span>
|
||||
<span class="lineNum"> 351 </span><span class="lineCov"> 38580 : if (sflush(s) != 0)</span>
|
||||
<span class="lineNum"> 352 </span><span class="lineNoCov"> 0 : return -1;</span>
|
||||
<span class="lineNum"> 353 </span> : }
|
||||
|
|
@ -421,11 +421,11 @@
|
|||
<span class="lineNum"> 359 </span> : * to be able to detect memory errors on the buffer,
|
||||
<span class="lineNum"> 360 </span> : * happening before we write it on the file.
|
||||
<span class="lineNum"> 361 </span> : */
|
||||
<span class="lineNum"> 362 </span><span class="lineCov"> 3808426 : s->crc_stream = crc32c_plain_char(s->crc_stream, c);</span>
|
||||
<span class="lineNum"> 362 </span><span class="lineCov"> 3808662 : s->crc_stream = crc32c_plain_char(s->crc_stream, c);</span>
|
||||
<span class="lineNum"> 363 </span> :
|
||||
<span class="lineNum"> 364 </span><span class="lineCov"> 3808426 : *s->pos++ = c;</span>
|
||||
<span class="lineNum"> 364 </span><span class="lineCov"> 3808662 : *s->pos++ = c;</span>
|
||||
<span class="lineNum"> 365 </span> :
|
||||
<span class="lineNum"> 366 </span><span class="lineCov"> 3808426 : return 0;</span>
|
||||
<span class="lineNum"> 366 </span><span class="lineCov"> 3808662 : return 0;</span>
|
||||
<span class="lineNum"> 367 </span> : }
|
||||
<span class="lineNum"> 368 </span> :
|
||||
<span class="lineNum"> 369 </span> : /**
|
||||
|
|
|
|||
|
|
@ -31,17 +31,17 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">441</td>
|
||||
<td class="headerCovTableEntry">550</td>
|
||||
<td class="headerCovTableEntryMed">80.2 %</td>
|
||||
<td class="headerCovTableEntry">449</td>
|
||||
<td class="headerCovTableEntry">559</td>
|
||||
<td class="headerCovTableEntryMed">80.3 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">60</td>
|
||||
<td class="headerCovTableEntry">62</td>
|
||||
<td class="headerCovTableEntry">61</td>
|
||||
<td class="headerCovTableEntry">63</td>
|
||||
<td class="headerCovTableEntryHi">96.8 %</td>
|
||||
</tr>
|
||||
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
|
||||
|
|
@ -60,131 +60,135 @@
|
|||
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1521">thread_mutex_unlock</a></td>
|
||||
<td class="coverFnHi">80858701</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1570">thread_mutex_unlock</a></td>
|
||||
<td class="coverFnHi">80868352</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1511">thread_mutex_lock</a></td>
|
||||
<td class="coverFnHi">80857668</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1560">thread_mutex_lock</a></td>
|
||||
<td class="coverFnHi">80853862</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#765">pathcmp</a></td>
|
||||
<td class="coverFnHi">51890261</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#768">pathcmp</a></td>
|
||||
<td class="coverFnHi">51889301</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#716">pathprint</a></td>
|
||||
<td class="coverFnHi">51564160</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#719">pathprint</a></td>
|
||||
<td class="coverFnHi">51562646</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#52">unlock_memory</a></td>
|
||||
<td class="coverFnHi">20173887</td>
|
||||
<td class="coverFnHi">20173439</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#45">lock_memory</a></td>
|
||||
<td class="coverFnHi">20173887</td>
|
||||
<td class="coverFnHi">20173439</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1221">malloc_counter_inc</a></td>
|
||||
<td class="coverFnHi">20173411</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1270">malloc_counter_inc</a></td>
|
||||
<td class="coverFnHi">20172963</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1280">malloc_nofail</a></td>
|
||||
<td class="coverFnHi">14363921</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1329">malloc_nofail</a></td>
|
||||
<td class="coverFnHi">14363716</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1134">advise_read</a></td>
|
||||
<td class="coverFnHi">8903631</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1183">advise_read</a></td>
|
||||
<td class="coverFnHi">8897480</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#631">pathcpy</a></td>
|
||||
<td class="coverFnHi">7892123</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#634">pathcpy</a></td>
|
||||
<td class="coverFnHi">7884434</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1329">strdup_nofail</a></td>
|
||||
<td class="coverFnHi">5799401</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#31">lock_msg</a></td>
|
||||
<td class="coverFnHi">3887334</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1378">strdup_nofail</a></td>
|
||||
<td class="coverFnHi">5799158</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#38">unlock_msg</a></td>
|
||||
<td class="coverFnHi">3887334</td>
|
||||
<td class="coverFnHi">3895151</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#31">lock_msg</a></td>
|
||||
<td class="coverFnHi">3895147</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#154">log_tag</a></td>
|
||||
<td class="coverFnHi">2907727</td>
|
||||
<td class="coverFnHi">2915010</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#905">advise_flags</a></td>
|
||||
<td class="coverFnHi">2494965</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#954">advise_flags</a></td>
|
||||
<td class="coverFnHi">2494636</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#898">advise_init</a></td>
|
||||
<td class="coverFnHi">2494910</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#947">advise_init</a></td>
|
||||
<td class="coverFnHi">2494292</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#390">esc_tag</a></td>
|
||||
<td class="coverFnHi">2428312</td>
|
||||
<td class="coverFnHi">2435456</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#925">advise_open</a></td>
|
||||
<td class="coverFnHi">2416366</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#974">advise_open</a></td>
|
||||
<td class="coverFnHi">2412565</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1571">thread_cond_wait</a></td>
|
||||
<td class="coverFnHi">1037153</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1620">thread_cond_wait</a></td>
|
||||
<td class="coverFnHi">1125039</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#957">advise_write</a></td>
|
||||
<td class="coverFnHi">900358</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1006">advise_write</a></td>
|
||||
<td class="coverFnHi">900744</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#785">mkancestor</a></td>
|
||||
<td class="coverFnHi">793073</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#788">mkancestor</a></td>
|
||||
<td class="coverFnHi">793100</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#115">log_error</a></td>
|
||||
<td class="coverFnHi">536048</td>
|
||||
<td class="coverFnHi">536168</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#431">esc_shell_multi</a></td>
|
||||
<td class="coverFnHi">355914</td>
|
||||
<td class="coverFnHi">356152</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#207">msg_info</a></td>
|
||||
<td class="coverFnHi">295689</td>
|
||||
<td class="coverFnHi">295927</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1561">thread_cond_broadcast</a></td>
|
||||
<td class="coverFnHi">255503</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1610">thread_cond_broadcast</a></td>
|
||||
<td class="coverFnHi">255615</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1627">thread_cond_broadcast_and_unlock</a></td>
|
||||
<td class="coverFnHi">255313</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1676">thread_cond_broadcast_and_unlock</a></td>
|
||||
<td class="coverFnHi">255425</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#269">msg_verbose</a></td>
|
||||
<td class="coverFnHi">126943</td>
|
||||
<td class="coverFnHi">127041</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#849">fmtime</a></td>
|
||||
<td class="coverFnHi">119580</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#852">fmtime</a></td>
|
||||
<td class="coverFnHi">119636</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1551">thread_cond_signal</a></td>
|
||||
<td class="coverFnHi">85887</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1600">thread_cond_signal</a></td>
|
||||
<td class="coverFnHi">87081</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1610">thread_cond_signal_and_unlock</a></td>
|
||||
<td class="coverFnHi">85887</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1659">thread_cond_signal_and_unlock</a></td>
|
||||
<td class="coverFnHi">87081</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#696">pathexport</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#699">pathexport</a></td>
|
||||
<td class="coverFnHi">17589</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#675">pathimport</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#898">lmtime</a></td>
|
||||
<td class="coverFnHi">17000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#678">pathimport</a></td>
|
||||
<td class="coverFnHi">16572</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -192,11 +196,11 @@
|
|||
<td class="coverFnHi">11259</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1306">calloc_nofail</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1355">calloc_nofail</a></td>
|
||||
<td class="coverFnHi">10089</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#738">pathslash</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#741">pathslash</a></td>
|
||||
<td class="coverFnHi">7705</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -204,27 +208,27 @@
|
|||
<td class="coverFnHi">4449</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1491">thread_mutex_init</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1540">thread_mutex_init</a></td>
|
||||
<td class="coverFnHi">2284</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1644">thread_create</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1693">thread_create</a></td>
|
||||
<td class="coverFnHi">2200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1654">thread_join</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1703">thread_join</a></td>
|
||||
<td class="coverFnHi">2200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1501">thread_mutex_destroy</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1550">thread_mutex_destroy</a></td>
|
||||
<td class="coverFnHi">2082</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#250">msg_bar</a></td>
|
||||
<td class="coverFnHi">1958</td>
|
||||
<td class="coverFnHi">2082</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#602">strsplit</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#605">strsplit</a></td>
|
||||
<td class="coverFnHi">1472</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -236,27 +240,27 @@
|
|||
<td class="coverFnHi">809</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#660">pathcatc</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#663">pathcatc</a></td>
|
||||
<td class="coverFnHi">788</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#293">msg_flush</a></td>
|
||||
<td class="coverFnHi">627</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#183">msg_status</a></td>
|
||||
<td class="coverFnHi">625</td>
|
||||
<td class="coverFnHi">622</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1208">malloc_counter_get</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#293">msg_flush</a></td>
|
||||
<td class="coverFnHi">573</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1257">malloc_counter_get</a></td>
|
||||
<td class="coverFnHi">476</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1531">thread_cond_init</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1580">thread_cond_init</a></td>
|
||||
<td class="coverFnHi">380</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1541">thread_cond_destroy</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1590">thread_cond_destroy</a></td>
|
||||
<td class="coverFnHi">380</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -264,7 +268,7 @@
|
|||
<td class="coverFnHi">299</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#645">pathcat</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#648">pathcat</a></td>
|
||||
<td class="coverFnHi">267</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -272,39 +276,39 @@
|
|||
<td class="coverFnHi">264</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#303">printc</a></td>
|
||||
<td class="coverFnHi">106</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#758">pathcut</a></td>
|
||||
<td class="coverFnHi">100</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#755">pathcut</a></td>
|
||||
<td class="coverFnHi">100</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#303">printc</a></td>
|
||||
<td class="coverFnHi">64</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#334">printl</a></td>
|
||||
<td class="coverFnHi">52</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1377">smartctl_attribute</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1426">smartctl_attribute</a></td>
|
||||
<td class="coverFnHi">43</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#322">printr</a></td>
|
||||
<td class="coverFnHi">34</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#346">printp</a></td>
|
||||
<td class="coverFnHi">18</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1467">smartctl_flush</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#322">printr</a></td>
|
||||
<td class="coverFnHi">16</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1516">smartctl_flush</a></td>
|
||||
<td class="coverFnHi">5</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#589">strpolish</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#592">strpolish</a></td>
|
||||
<td class="coverFnLo">0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1360">smatch</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1409">smatch</a></td>
|
||||
<td class="coverFnLo">0</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -31,17 +31,17 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">441</td>
|
||||
<td class="headerCovTableEntry">550</td>
|
||||
<td class="headerCovTableEntryMed">80.2 %</td>
|
||||
<td class="headerCovTableEntry">449</td>
|
||||
<td class="headerCovTableEntry">559</td>
|
||||
<td class="headerCovTableEntryMed">80.3 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">60</td>
|
||||
<td class="headerCovTableEntry">62</td>
|
||||
<td class="headerCovTableEntry">61</td>
|
||||
<td class="headerCovTableEntry">63</td>
|
||||
<td class="headerCovTableEntryHi">96.8 %</td>
|
||||
</tr>
|
||||
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
|
||||
|
|
@ -60,40 +60,44 @@
|
|||
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="support.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#905">advise_flags</a></td>
|
||||
<td class="coverFnHi">2494965</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#954">advise_flags</a></td>
|
||||
<td class="coverFnHi">2494636</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#898">advise_init</a></td>
|
||||
<td class="coverFnHi">2494910</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#947">advise_init</a></td>
|
||||
<td class="coverFnHi">2494292</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#925">advise_open</a></td>
|
||||
<td class="coverFnHi">2416366</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#974">advise_open</a></td>
|
||||
<td class="coverFnHi">2412565</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1134">advise_read</a></td>
|
||||
<td class="coverFnHi">8903631</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1183">advise_read</a></td>
|
||||
<td class="coverFnHi">8897480</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#957">advise_write</a></td>
|
||||
<td class="coverFnHi">900358</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1006">advise_write</a></td>
|
||||
<td class="coverFnHi">900744</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1306">calloc_nofail</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1355">calloc_nofail</a></td>
|
||||
<td class="coverFnHi">10089</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#431">esc_shell_multi</a></td>
|
||||
<td class="coverFnHi">355914</td>
|
||||
<td class="coverFnHi">356152</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#390">esc_tag</a></td>
|
||||
<td class="coverFnHi">2428312</td>
|
||||
<td class="coverFnHi">2435456</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#849">fmtime</a></td>
|
||||
<td class="coverFnHi">119580</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#852">fmtime</a></td>
|
||||
<td class="coverFnHi">119636</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#898">lmtime</a></td>
|
||||
<td class="coverFnHi">17000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#68">lock_done</a></td>
|
||||
|
|
@ -105,15 +109,15 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#45">lock_memory</a></td>
|
||||
<td class="coverFnHi">20173887</td>
|
||||
<td class="coverFnHi">20173439</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#31">lock_msg</a></td>
|
||||
<td class="coverFnHi">3887334</td>
|
||||
<td class="coverFnHi">3895147</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#115">log_error</a></td>
|
||||
<td class="coverFnHi">536048</td>
|
||||
<td class="coverFnHi">536168</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#137">log_expected</a></td>
|
||||
|
|
@ -129,35 +133,35 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#154">log_tag</a></td>
|
||||
<td class="coverFnHi">2907727</td>
|
||||
<td class="coverFnHi">2915010</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1208">malloc_counter_get</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1257">malloc_counter_get</a></td>
|
||||
<td class="coverFnHi">476</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1221">malloc_counter_inc</a></td>
|
||||
<td class="coverFnHi">20173411</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1270">malloc_counter_inc</a></td>
|
||||
<td class="coverFnHi">20172963</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1280">malloc_nofail</a></td>
|
||||
<td class="coverFnHi">14363921</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1329">malloc_nofail</a></td>
|
||||
<td class="coverFnHi">14363716</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#785">mkancestor</a></td>
|
||||
<td class="coverFnHi">793073</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#788">mkancestor</a></td>
|
||||
<td class="coverFnHi">793100</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#250">msg_bar</a></td>
|
||||
<td class="coverFnHi">1958</td>
|
||||
<td class="coverFnHi">2082</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#293">msg_flush</a></td>
|
||||
<td class="coverFnHi">627</td>
|
||||
<td class="coverFnHi">573</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#207">msg_info</a></td>
|
||||
<td class="coverFnHi">295689</td>
|
||||
<td class="coverFnHi">295927</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#226">msg_progress</a></td>
|
||||
|
|
@ -165,51 +169,51 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#183">msg_status</a></td>
|
||||
<td class="coverFnHi">625</td>
|
||||
<td class="coverFnHi">622</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#269">msg_verbose</a></td>
|
||||
<td class="coverFnHi">126943</td>
|
||||
<td class="coverFnHi">127041</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#645">pathcat</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#648">pathcat</a></td>
|
||||
<td class="coverFnHi">267</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#660">pathcatc</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#663">pathcatc</a></td>
|
||||
<td class="coverFnHi">788</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#765">pathcmp</a></td>
|
||||
<td class="coverFnHi">51890261</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#768">pathcmp</a></td>
|
||||
<td class="coverFnHi">51889301</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#631">pathcpy</a></td>
|
||||
<td class="coverFnHi">7892123</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#634">pathcpy</a></td>
|
||||
<td class="coverFnHi">7884434</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#755">pathcut</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#758">pathcut</a></td>
|
||||
<td class="coverFnHi">100</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#696">pathexport</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#699">pathexport</a></td>
|
||||
<td class="coverFnHi">17589</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#675">pathimport</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#678">pathimport</a></td>
|
||||
<td class="coverFnHi">16572</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#716">pathprint</a></td>
|
||||
<td class="coverFnHi">51564160</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#719">pathprint</a></td>
|
||||
<td class="coverFnHi">51562646</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#738">pathslash</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#741">pathslash</a></td>
|
||||
<td class="coverFnHi">7705</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#303">printc</a></td>
|
||||
<td class="coverFnHi">106</td>
|
||||
<td class="coverFnHi">64</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#334">printl</a></td>
|
||||
|
|
@ -221,91 +225,91 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#322">printr</a></td>
|
||||
<td class="coverFnHi">34</td>
|
||||
<td class="coverFnHi">16</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1377">smartctl_attribute</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1426">smartctl_attribute</a></td>
|
||||
<td class="coverFnHi">43</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1467">smartctl_flush</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1516">smartctl_flush</a></td>
|
||||
<td class="coverFnHi">5</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1360">smatch</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1409">smatch</a></td>
|
||||
<td class="coverFnLo">0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1329">strdup_nofail</a></td>
|
||||
<td class="coverFnHi">5799401</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1378">strdup_nofail</a></td>
|
||||
<td class="coverFnHi">5799158</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#589">strpolish</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#592">strpolish</a></td>
|
||||
<td class="coverFnLo">0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#602">strsplit</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#605">strsplit</a></td>
|
||||
<td class="coverFnHi">1472</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1561">thread_cond_broadcast</a></td>
|
||||
<td class="coverFnHi">255503</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1610">thread_cond_broadcast</a></td>
|
||||
<td class="coverFnHi">255615</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1627">thread_cond_broadcast_and_unlock</a></td>
|
||||
<td class="coverFnHi">255313</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1676">thread_cond_broadcast_and_unlock</a></td>
|
||||
<td class="coverFnHi">255425</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1541">thread_cond_destroy</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1590">thread_cond_destroy</a></td>
|
||||
<td class="coverFnHi">380</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1531">thread_cond_init</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1580">thread_cond_init</a></td>
|
||||
<td class="coverFnHi">380</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1551">thread_cond_signal</a></td>
|
||||
<td class="coverFnHi">85887</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1600">thread_cond_signal</a></td>
|
||||
<td class="coverFnHi">87081</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1610">thread_cond_signal_and_unlock</a></td>
|
||||
<td class="coverFnHi">85887</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1659">thread_cond_signal_and_unlock</a></td>
|
||||
<td class="coverFnHi">87081</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1571">thread_cond_wait</a></td>
|
||||
<td class="coverFnHi">1037153</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1620">thread_cond_wait</a></td>
|
||||
<td class="coverFnHi">1125039</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1644">thread_create</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1693">thread_create</a></td>
|
||||
<td class="coverFnHi">2200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1654">thread_join</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1703">thread_join</a></td>
|
||||
<td class="coverFnHi">2200</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1501">thread_mutex_destroy</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1550">thread_mutex_destroy</a></td>
|
||||
<td class="coverFnHi">2082</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1491">thread_mutex_init</a></td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1540">thread_mutex_init</a></td>
|
||||
<td class="coverFnHi">2284</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1511">thread_mutex_lock</a></td>
|
||||
<td class="coverFnHi">80857668</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1560">thread_mutex_lock</a></td>
|
||||
<td class="coverFnHi">80853862</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1521">thread_mutex_unlock</a></td>
|
||||
<td class="coverFnHi">80858701</td>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#1570">thread_mutex_unlock</a></td>
|
||||
<td class="coverFnHi">80868352</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#52">unlock_memory</a></td>
|
||||
<td class="coverFnHi">20173887</td>
|
||||
<td class="coverFnHi">20173439</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.c.gcov.html#38">unlock_msg</a></td>
|
||||
<td class="coverFnHi">3887334</td>
|
||||
<td class="coverFnHi">3895151</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.h.gcov.html#230">esc_shell</a></td>
|
||||
<td class="coverFnHi">331854</td>
|
||||
<td class="coverFnHi">332092</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="support.h.gcov.html#230">esc_shell</a></td>
|
||||
<td class="coverFnHi">331854</td>
|
||||
<td class="coverFnHi">332092</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
@ -291,9 +291,9 @@
|
|||
<span class="lineNum"> 229 </span> : * \param buffer Preallocated buffer of ESC_MAX size.
|
||||
<a name="230"><span class="lineNum"> 230 </span> : */</a>
|
||||
<span class="lineNum"> 231 </span> : const char* esc_shell_multi(const char** str_map, unsigned str_max, char* buffer);
|
||||
<span class="lineNum"> 232 </span><span class="lineCov"> 331854 : static inline const char* esc_shell(const char* str, char* buffer)</span>
|
||||
<span class="lineNum"> 232 </span><span class="lineCov"> 332092 : static inline const char* esc_shell(const char* str, char* buffer)</span>
|
||||
<span class="lineNum"> 233 </span> : {
|
||||
<span class="lineNum"> 234 </span><span class="lineCov"> 331854 : return esc_shell_multi(&str, 1, buffer);</span>
|
||||
<span class="lineNum"> 234 </span><span class="lineCov"> 332092 : return esc_shell_multi(&str, 1, buffer);</span>
|
||||
<span class="lineNum"> 235 </span> : }
|
||||
<span class="lineNum"> 236 </span> :
|
||||
<span class="lineNum"> 237 </span> : /**
|
||||
|
|
@ -384,113 +384,119 @@
|
|||
<span class="lineNum"> 322 </span> : */
|
||||
<span class="lineNum"> 323 </span> : int fmtime(int f, int64_t mtime_sec, int mtime_nsec);
|
||||
<span class="lineNum"> 324 </span> :
|
||||
<span class="lineNum"> 325 </span> : /****************************************************************************/
|
||||
<span class="lineNum"> 326 </span> : /* advise */
|
||||
<span class="lineNum"> 327 </span> :
|
||||
<span class="lineNum"> 328 </span> : /**
|
||||
<span class="lineNum"> 329 </span> : * Advise modes.
|
||||
<span class="lineNum"> 330 </span> : */
|
||||
<span class="lineNum"> 331 </span> : #define ADVISE_DEFAULT 0 /**< Default mode. */
|
||||
<span class="lineNum"> 332 </span> : #define ADVISE_NONE 1 /**< Bare read/write mode. */
|
||||
<span class="lineNum"> 333 </span> : #define ADVISE_SEQUENTIAL 2 /**< Sequential mode. */
|
||||
<span class="lineNum"> 334 </span> : #define ADVISE_FLUSH 3 /**< Flush mode. */
|
||||
<span class="lineNum"> 335 </span> : #define ADVISE_FLUSH_WINDOW 4 /**< Flush mode with a window of 8MB. */
|
||||
<span class="lineNum"> 336 </span> : #define ADVISE_DISCARD 5 /**< Discard the cache after every operation. */
|
||||
<span class="lineNum"> 337 </span> : #define ADVISE_DISCARD_WINDOW 6 /**< Discard the cache with a window of 8MB. */
|
||||
<span class="lineNum"> 338 </span> : #define ADVISE_DIRECT 7 /**< Direct mode. */
|
||||
<span class="lineNum"> 339 </span> :
|
||||
<span class="lineNum"> 340 </span> : #define ADVISE_WINDOW_SIZE (8 * 1024 * 1024) /**< Window size. */
|
||||
<span class="lineNum"> 341 </span> :
|
||||
<span class="lineNum"> 342 </span> : struct advise_struct {
|
||||
<span class="lineNum"> 343 </span> : int mode;
|
||||
<span class="lineNum"> 344 </span> : data_off_t dirty_begin;
|
||||
<span class="lineNum"> 345 </span> : data_off_t dirty_end;
|
||||
<span class="lineNum"> 346 </span> : };
|
||||
<span class="lineNum"> 325 </span> : /**
|
||||
<span class="lineNum"> 326 </span> : * Change the modification time of a file or link.
|
||||
<span class="lineNum"> 327 </span> : * Note that links are NOT deferenced.
|
||||
<span class="lineNum"> 328 </span> : */
|
||||
<span class="lineNum"> 329 </span> : int lmtime(const char* path, int64_t mtime_sec, int mtime_nsec);
|
||||
<span class="lineNum"> 330 </span> :
|
||||
<span class="lineNum"> 331 </span> : /****************************************************************************/
|
||||
<span class="lineNum"> 332 </span> : /* advise */
|
||||
<span class="lineNum"> 333 </span> :
|
||||
<span class="lineNum"> 334 </span> : /**
|
||||
<span class="lineNum"> 335 </span> : * Advise modes.
|
||||
<span class="lineNum"> 336 </span> : */
|
||||
<span class="lineNum"> 337 </span> : #define ADVISE_DEFAULT 0 /**< Default mode. */
|
||||
<span class="lineNum"> 338 </span> : #define ADVISE_NONE 1 /**< Bare read/write mode. */
|
||||
<span class="lineNum"> 339 </span> : #define ADVISE_SEQUENTIAL 2 /**< Sequential mode. */
|
||||
<span class="lineNum"> 340 </span> : #define ADVISE_FLUSH 3 /**< Flush mode. */
|
||||
<span class="lineNum"> 341 </span> : #define ADVISE_FLUSH_WINDOW 4 /**< Flush mode with a window of 8MB. */
|
||||
<span class="lineNum"> 342 </span> : #define ADVISE_DISCARD 5 /**< Discard the cache after every operation. */
|
||||
<span class="lineNum"> 343 </span> : #define ADVISE_DISCARD_WINDOW 6 /**< Discard the cache with a window of 8MB. */
|
||||
<span class="lineNum"> 344 </span> : #define ADVISE_DIRECT 7 /**< Direct mode. */
|
||||
<span class="lineNum"> 345 </span> :
|
||||
<span class="lineNum"> 346 </span> : #define ADVISE_WINDOW_SIZE (8 * 1024 * 1024) /**< Window size. */
|
||||
<span class="lineNum"> 347 </span> :
|
||||
<span class="lineNum"> 348 </span> : void advise_init(struct advise_struct* advise, int mode);
|
||||
<span class="lineNum"> 349 </span> : int advise_flags(struct advise_struct* advise);
|
||||
<span class="lineNum"> 350 </span> : int advise_open(struct advise_struct* advise, int f);
|
||||
<span class="lineNum"> 351 </span> : int advise_write(struct advise_struct* advise, int f, data_off_t offset, data_off_t size);
|
||||
<span class="lineNum"> 352 </span> : int advise_read(struct advise_struct* advise, int f, data_off_t offset, data_off_t size);
|
||||
<span class="lineNum"> 348 </span> : struct advise_struct {
|
||||
<span class="lineNum"> 349 </span> : int mode;
|
||||
<span class="lineNum"> 350 </span> : data_off_t dirty_begin;
|
||||
<span class="lineNum"> 351 </span> : data_off_t dirty_end;
|
||||
<span class="lineNum"> 352 </span> : };
|
||||
<span class="lineNum"> 353 </span> :
|
||||
<span class="lineNum"> 354 </span> : /****************************************************************************/
|
||||
<span class="lineNum"> 355 </span> : /* memory */
|
||||
<span class="lineNum"> 356 </span> :
|
||||
<span class="lineNum"> 357 </span> : /**
|
||||
<span class="lineNum"> 358 </span> : * Return the size of the allocated memory.
|
||||
<span class="lineNum"> 359 </span> : */
|
||||
<span class="lineNum"> 360 </span> : size_t malloc_counter_get(void);
|
||||
<span class="lineNum"> 361 </span> :
|
||||
<span class="lineNum"> 362 </span> : /**
|
||||
<span class="lineNum"> 363 </span> : * Safe malloc.
|
||||
<span class="lineNum"> 364 </span> : * If no memory is available, it aborts.
|
||||
<span class="lineNum"> 354 </span> : void advise_init(struct advise_struct* advise, int mode);
|
||||
<span class="lineNum"> 355 </span> : int advise_flags(struct advise_struct* advise);
|
||||
<span class="lineNum"> 356 </span> : int advise_open(struct advise_struct* advise, int f);
|
||||
<span class="lineNum"> 357 </span> : int advise_write(struct advise_struct* advise, int f, data_off_t offset, data_off_t size);
|
||||
<span class="lineNum"> 358 </span> : int advise_read(struct advise_struct* advise, int f, data_off_t offset, data_off_t size);
|
||||
<span class="lineNum"> 359 </span> :
|
||||
<span class="lineNum"> 360 </span> : /****************************************************************************/
|
||||
<span class="lineNum"> 361 </span> : /* memory */
|
||||
<span class="lineNum"> 362 </span> :
|
||||
<span class="lineNum"> 363 </span> : /**
|
||||
<span class="lineNum"> 364 </span> : * Return the size of the allocated memory.
|
||||
<span class="lineNum"> 365 </span> : */
|
||||
<span class="lineNum"> 366 </span> : void* malloc_nofail(size_t size);
|
||||
<span class="lineNum"> 366 </span> : size_t malloc_counter_get(void);
|
||||
<span class="lineNum"> 367 </span> :
|
||||
<span class="lineNum"> 368 </span> : /**
|
||||
<span class="lineNum"> 369 </span> : * Safe cmalloc.
|
||||
<span class="lineNum"> 369 </span> : * Safe malloc.
|
||||
<span class="lineNum"> 370 </span> : * If no memory is available, it aborts.
|
||||
<span class="lineNum"> 371 </span> : */
|
||||
<span class="lineNum"> 372 </span> : void* calloc_nofail(size_t count, size_t size);
|
||||
<span class="lineNum"> 372 </span> : void* malloc_nofail(size_t size);
|
||||
<span class="lineNum"> 373 </span> :
|
||||
<span class="lineNum"> 374 </span> : /**
|
||||
<span class="lineNum"> 375 </span> : * Safe strdup.
|
||||
<span class="lineNum"> 375 </span> : * Safe cmalloc.
|
||||
<span class="lineNum"> 376 </span> : * If no memory is available, it aborts.
|
||||
<span class="lineNum"> 377 </span> : */
|
||||
<span class="lineNum"> 378 </span> : char* strdup_nofail(const char* str);
|
||||
<span class="lineNum"> 378 </span> : void* calloc_nofail(size_t count, size_t size);
|
||||
<span class="lineNum"> 379 </span> :
|
||||
<span class="lineNum"> 380 </span> : /**
|
||||
<span class="lineNum"> 381 </span> : * Helper for printing an error about a failed allocation.
|
||||
<span class="lineNum"> 382 </span> : */
|
||||
<span class="lineNum"> 383 </span> : void malloc_fail(size_t size);
|
||||
<span class="lineNum"> 384 </span> :
|
||||
<span class="lineNum"> 385 </span> : /****************************************************************************/
|
||||
<span class="lineNum"> 386 </span> : /* smartctl */
|
||||
<span class="lineNum"> 387 </span> :
|
||||
<span class="lineNum"> 388 </span> : /**
|
||||
<span class="lineNum"> 389 </span> : * Read smartctl attributes from a stream.
|
||||
<span class="lineNum"> 390 </span> : * Return 0 on success.
|
||||
<span class="lineNum"> 391 </span> : */
|
||||
<span class="lineNum"> 392 </span> : int smartctl_attribute(FILE* f, const char* file, const char* name, uint64_t* smart, char* serial, char* vendor, char* model);
|
||||
<span class="lineNum"> 381 </span> : * Safe strdup.
|
||||
<span class="lineNum"> 382 </span> : * If no memory is available, it aborts.
|
||||
<span class="lineNum"> 383 </span> : */
|
||||
<span class="lineNum"> 384 </span> : char* strdup_nofail(const char* str);
|
||||
<span class="lineNum"> 385 </span> :
|
||||
<span class="lineNum"> 386 </span> : /**
|
||||
<span class="lineNum"> 387 </span> : * Helper for printing an error about a failed allocation.
|
||||
<span class="lineNum"> 388 </span> : */
|
||||
<span class="lineNum"> 389 </span> : void malloc_fail(size_t size);
|
||||
<span class="lineNum"> 390 </span> :
|
||||
<span class="lineNum"> 391 </span> : /****************************************************************************/
|
||||
<span class="lineNum"> 392 </span> : /* smartctl */
|
||||
<span class="lineNum"> 393 </span> :
|
||||
<span class="lineNum"> 394 </span> : /**
|
||||
<span class="lineNum"> 395 </span> : * Flush smartctl output from a stream.
|
||||
<span class="lineNum"> 396 </span> : */
|
||||
<span class="lineNum"> 397 </span> : int smartctl_flush(FILE* f, const char* file, const char* name);
|
||||
<span class="lineNum"> 398 </span> :
|
||||
<span class="lineNum"> 399 </span> : /****************************************************************************/
|
||||
<span class="lineNum"> 400 </span> : /* thread */
|
||||
<span class="lineNum"> 401 </span> :
|
||||
<span class="lineNum"> 402 </span> : #if HAVE_PTHREAD
|
||||
<span class="lineNum"> 403 </span> : /**
|
||||
<span class="lineNum"> 404 </span> : * Control when to signal the condition variables.
|
||||
<span class="lineNum"> 405 </span> : *
|
||||
<span class="lineNum"> 406 </span> : * Default is inside the mutex.
|
||||
<span class="lineNum"> 407 </span> : *
|
||||
<span class="lineNum"> 408 </span> : * Ensure to change that before starting any thread.
|
||||
<span class="lineNum"> 409 </span> : */
|
||||
<span class="lineNum"> 410 </span> : int thread_cond_signal_outside;
|
||||
<span class="lineNum"> 411 </span> :
|
||||
<span class="lineNum"> 412 </span> : /**
|
||||
<span class="lineNum"> 413 </span> : * Thread wrappers to handle error conditions.
|
||||
<span class="lineNum"> 414 </span> : */
|
||||
<span class="lineNum"> 415 </span> : void thread_mutex_init(pthread_mutex_t* mutex, pthread_mutexattr_t* attr);
|
||||
<span class="lineNum"> 416 </span> : void thread_mutex_destroy(pthread_mutex_t* mutex);
|
||||
<span class="lineNum"> 417 </span> : void thread_mutex_lock(pthread_mutex_t* mutex);
|
||||
<span class="lineNum"> 418 </span> : void thread_mutex_unlock(pthread_mutex_t* mutex);
|
||||
<span class="lineNum"> 419 </span> : void thread_cond_init(pthread_cond_t* cond, pthread_condattr_t* attr);
|
||||
<span class="lineNum"> 420 </span> : void thread_cond_destroy(pthread_cond_t* cond);
|
||||
<span class="lineNum"> 421 </span> : void thread_cond_signal(pthread_cond_t* cond);
|
||||
<span class="lineNum"> 422 </span> : void thread_cond_broadcast(pthread_cond_t* cond);
|
||||
<span class="lineNum"> 423 </span> : void thread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex);
|
||||
<span class="lineNum"> 424 </span> : void thread_cond_signal_and_unlock(pthread_cond_t* cond, pthread_mutex_t* mutex);
|
||||
<span class="lineNum"> 425 </span> : void thread_cond_broadcast_and_unlock(pthread_cond_t* cond, pthread_mutex_t* mutex);
|
||||
<span class="lineNum"> 426 </span> : void thread_create(pthread_t* thread, pthread_attr_t* attr, void *(* func)(void *), void *arg);
|
||||
<span class="lineNum"> 427 </span> : void thread_join(pthread_t thread, void** retval);
|
||||
<span class="lineNum"> 428 </span> : #endif
|
||||
<span class="lineNum"> 429 </span> :
|
||||
<span class="lineNum"> 430 </span> : #endif
|
||||
<span class="lineNum"> 431 </span> :
|
||||
<span class="lineNum"> 395 </span> : * Read smartctl attributes from a stream.
|
||||
<span class="lineNum"> 396 </span> : * Return 0 on success.
|
||||
<span class="lineNum"> 397 </span> : */
|
||||
<span class="lineNum"> 398 </span> : int smartctl_attribute(FILE* f, const char* file, const char* name, uint64_t* smart, char* serial, char* vendor, char* model);
|
||||
<span class="lineNum"> 399 </span> :
|
||||
<span class="lineNum"> 400 </span> : /**
|
||||
<span class="lineNum"> 401 </span> : * Flush smartctl output from a stream.
|
||||
<span class="lineNum"> 402 </span> : */
|
||||
<span class="lineNum"> 403 </span> : int smartctl_flush(FILE* f, const char* file, const char* name);
|
||||
<span class="lineNum"> 404 </span> :
|
||||
<span class="lineNum"> 405 </span> : /****************************************************************************/
|
||||
<span class="lineNum"> 406 </span> : /* thread */
|
||||
<span class="lineNum"> 407 </span> :
|
||||
<span class="lineNum"> 408 </span> : #if HAVE_PTHREAD
|
||||
<span class="lineNum"> 409 </span> : /**
|
||||
<span class="lineNum"> 410 </span> : * Control when to signal the condition variables.
|
||||
<span class="lineNum"> 411 </span> : *
|
||||
<span class="lineNum"> 412 </span> : * Default is inside the mutex.
|
||||
<span class="lineNum"> 413 </span> : *
|
||||
<span class="lineNum"> 414 </span> : * Ensure to change that before starting any thread.
|
||||
<span class="lineNum"> 415 </span> : */
|
||||
<span class="lineNum"> 416 </span> : int thread_cond_signal_outside;
|
||||
<span class="lineNum"> 417 </span> :
|
||||
<span class="lineNum"> 418 </span> : /**
|
||||
<span class="lineNum"> 419 </span> : * Thread wrappers to handle error conditions.
|
||||
<span class="lineNum"> 420 </span> : */
|
||||
<span class="lineNum"> 421 </span> : void thread_mutex_init(pthread_mutex_t* mutex, pthread_mutexattr_t* attr);
|
||||
<span class="lineNum"> 422 </span> : void thread_mutex_destroy(pthread_mutex_t* mutex);
|
||||
<span class="lineNum"> 423 </span> : void thread_mutex_lock(pthread_mutex_t* mutex);
|
||||
<span class="lineNum"> 424 </span> : void thread_mutex_unlock(pthread_mutex_t* mutex);
|
||||
<span class="lineNum"> 425 </span> : void thread_cond_init(pthread_cond_t* cond, pthread_condattr_t* attr);
|
||||
<span class="lineNum"> 426 </span> : void thread_cond_destroy(pthread_cond_t* cond);
|
||||
<span class="lineNum"> 427 </span> : void thread_cond_signal(pthread_cond_t* cond);
|
||||
<span class="lineNum"> 428 </span> : void thread_cond_broadcast(pthread_cond_t* cond);
|
||||
<span class="lineNum"> 429 </span> : void thread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex);
|
||||
<span class="lineNum"> 430 </span> : void thread_cond_signal_and_unlock(pthread_cond_t* cond, pthread_mutex_t* mutex);
|
||||
<span class="lineNum"> 431 </span> : void thread_cond_broadcast_and_unlock(pthread_cond_t* cond, pthread_mutex_t* mutex);
|
||||
<span class="lineNum"> 432 </span> : void thread_create(pthread_t* thread, pthread_attr_t* attr, void *(* func)(void *), void *arg);
|
||||
<span class="lineNum"> 433 </span> : void thread_join(pthread_t thread, void** retval);
|
||||
<span class="lineNum"> 434 </span> : #endif
|
||||
<span class="lineNum"> 435 </span> :
|
||||
<span class="lineNum"> 436 </span> : #endif
|
||||
<span class="lineNum"> 437 </span> :
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">501</td>
|
||||
<td class="headerCovTableEntry">499</td>
|
||||
<td class="headerCovTableEntry">546</td>
|
||||
<td class="headerCovTableEntryHi">91.8 %</td>
|
||||
<td class="headerCovTableEntryHi">91.4 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">7</td>
|
||||
|
|
@ -65,11 +65,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="sync.c.gcov.html#473">sync_data_reader</a></td>
|
||||
<td class="coverFnHi">688232</td>
|
||||
<td class="coverFnHi">688270</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="sync.c.gcov.html#627">sync_parity_writer</a></td>
|
||||
<td class="coverFnHi">544522</td>
|
||||
<td class="coverFnHi">544910</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="sync.c.gcov.html#416">failed_compare_by_index</a></td>
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">501</td>
|
||||
<td class="headerCovTableEntry">499</td>
|
||||
<td class="headerCovTableEntry">546</td>
|
||||
<td class="headerCovTableEntryHi">91.8 %</td>
|
||||
<td class="headerCovTableEntryHi">91.4 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">7</td>
|
||||
|
|
@ -81,11 +81,11 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="sync.c.gcov.html#473">sync_data_reader</a></td>
|
||||
<td class="coverFnHi">688232</td>
|
||||
<td class="coverFnHi">688270</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="sync.c.gcov.html#627">sync_parity_writer</a></td>
|
||||
<td class="coverFnHi">544522</td>
|
||||
<td class="coverFnHi">544910</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">501</td>
|
||||
<td class="headerCovTableEntry">499</td>
|
||||
<td class="headerCovTableEntry">546</td>
|
||||
<td class="headerCovTableEntryHi">91.8 %</td>
|
||||
<td class="headerCovTableEntryHi">91.4 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">7</td>
|
||||
|
|
@ -483,9 +483,9 @@
|
|||
<span class="lineNum"> 421 </span><span class="lineCov"> 852 : const struct failed_struct* b = void_b;</span>
|
||||
<span class="lineNum"> 422 </span> :
|
||||
<span class="lineNum"> 423 </span><span class="lineCov"> 852 : if (a->index < b->index)</span>
|
||||
<span class="lineNum"> 424 </span><span class="lineCov"> 850 : return -1;</span>
|
||||
<span class="lineNum"> 425 </span><span class="lineCov"> 2 : if (a->index > b->index)</span>
|
||||
<span class="lineNum"> 426 </span><span class="lineCov"> 2 : return 1;</span>
|
||||
<span class="lineNum"> 424 </span><span class="lineCov"> 852 : return -1;</span>
|
||||
<span class="lineNum"> 425 </span><span class="lineNoCov"> 0 : if (a->index > b->index)</span>
|
||||
<span class="lineNum"> 426 </span><span class="lineNoCov"> 0 : return 1;</span>
|
||||
<span class="lineNum"> 427 </span><span class="lineNoCov"> 0 : return 0;</span>
|
||||
<span class="lineNum"> 428 </span> : }
|
||||
<span class="lineNum"> 429 </span> :
|
||||
|
|
@ -524,56 +524,56 @@
|
|||
<span class="lineNum"> 462 </span><span class="lineCov"> 4688742 : one_valid = 1;</span>
|
||||
<span class="lineNum"> 463 </span> :
|
||||
<span class="lineNum"> 464 </span><span class="lineCov"> 4911646 : if (block_has_invalid_parity(block) || plan->force_full)</span>
|
||||
<span class="lineNum"> 465 </span><span class="lineCov"> 753240 : one_invalid = 1;</span>
|
||||
<span class="lineNum"> 465 </span><span class="lineCov"> 753392 : one_invalid = 1;</span>
|
||||
<span class="lineNum"> 466 </span> : }
|
||||
<span class="lineNum"> 467 </span> :
|
||||
<span class="lineNum"> 468 </span> : /* if none valid or none invalid, we don't need to update */
|
||||
<span class="lineNum"> 469 </span><span class="lineCov"> 820170 : if (!one_invalid || !one_valid)</span>
|
||||
<span class="lineNum"> 470 </span><span class="lineCov"> 590712 : return 0;</span>
|
||||
<span class="lineNum"> 470 </span><span class="lineCov"> 590600 : return 0;</span>
|
||||
<span class="lineNum"> 471 </span> :
|
||||
<span class="lineNum"> 472 </span><span class="lineCov"> 229458 : return 1;</span>
|
||||
<span class="lineNum"> 472 </span><span class="lineCov"> 229570 : return 1;</span>
|
||||
<a name="473"><span class="lineNum"> 473 </span> : }</a>
|
||||
<span class="lineNum"> 474 </span> :
|
||||
<span class="lineNum"> 475 </span><span class="lineCov"> 688232 : static void sync_data_reader(struct snapraid_worker* worker, struct snapraid_task* task)</span>
|
||||
<span class="lineNum"> 475 </span><span class="lineCov"> 688270 : static void sync_data_reader(struct snapraid_worker* worker, struct snapraid_task* task)</span>
|
||||
<span class="lineNum"> 476 </span> : {
|
||||
<span class="lineNum"> 477 </span><span class="lineCov"> 688232 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 478 </span><span class="lineCov"> 688232 : struct snapraid_state* state = io->state;</span>
|
||||
<span class="lineNum"> 479 </span><span class="lineCov"> 688232 : struct snapraid_handle* handle = worker->handle;</span>
|
||||
<span class="lineNum"> 480 </span><span class="lineCov"> 688232 : struct snapraid_disk* disk = handle->disk;</span>
|
||||
<span class="lineNum"> 481 </span><span class="lineCov"> 688232 : block_off_t blockcur = task->position;</span>
|
||||
<span class="lineNum"> 482 </span><span class="lineCov"> 688232 : unsigned char* buffer = task->buffer;</span>
|
||||
<span class="lineNum"> 477 </span><span class="lineCov"> 688270 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 478 </span><span class="lineCov"> 688270 : struct snapraid_state* state = io->state;</span>
|
||||
<span class="lineNum"> 479 </span><span class="lineCov"> 688270 : struct snapraid_handle* handle = worker->handle;</span>
|
||||
<span class="lineNum"> 480 </span><span class="lineCov"> 688270 : struct snapraid_disk* disk = handle->disk;</span>
|
||||
<span class="lineNum"> 481 </span><span class="lineCov"> 688270 : block_off_t blockcur = task->position;</span>
|
||||
<span class="lineNum"> 482 </span><span class="lineCov"> 688270 : unsigned char* buffer = task->buffer;</span>
|
||||
<span class="lineNum"> 483 </span> : int ret;
|
||||
<span class="lineNum"> 484 </span> : char esc_buffer[ESC_MAX];
|
||||
<span class="lineNum"> 485 </span> :
|
||||
<span class="lineNum"> 486 </span> : /* if the disk position is not used */
|
||||
<span class="lineNum"> 487 </span><span class="lineCov"> 688232 : if (!disk) {</span>
|
||||
<span class="lineNum"> 487 </span><span class="lineCov"> 688270 : if (!disk) {</span>
|
||||
<span class="lineNum"> 488 </span> : /* use an empty block */
|
||||
<span class="lineNum"> 489 </span><span class="lineNoCov"> 0 : memset(buffer, 0, state->block_size);</span>
|
||||
<span class="lineNum"> 490 </span><span class="lineNoCov"> 0 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 491 </span><span class="lineCov"> 92183 : return;</span>
|
||||
<span class="lineNum"> 491 </span><span class="lineCov"> 92084 : return;</span>
|
||||
<span class="lineNum"> 492 </span> : }
|
||||
<span class="lineNum"> 493 </span> :
|
||||
<span class="lineNum"> 494 </span> : /* get the block */
|
||||
<span class="lineNum"> 495 </span><span class="lineCov"> 688237 : task->block = fs_par2block_find(disk, blockcur);</span>
|
||||
<span class="lineNum"> 495 </span><span class="lineCov"> 688275 : task->block = fs_par2block_find(disk, blockcur);</span>
|
||||
<span class="lineNum"> 496 </span> :
|
||||
<span class="lineNum"> 497 </span> : /* if the block has no file, meaning that it's EMPTY or DELETED, */
|
||||
<span class="lineNum"> 498 </span> : /* it doesn't participate in the new parity computation */
|
||||
<span class="lineNum"> 499 </span><span class="lineCov"> 688177 : if (!block_has_file(task->block)) {</span>
|
||||
<span class="lineNum"> 499 </span><span class="lineCov"> 688010 : if (!block_has_file(task->block)) {</span>
|
||||
<span class="lineNum"> 500 </span> : /* use an empty block */
|
||||
<span class="lineNum"> 501 </span><span class="lineCov"> 92175 : memset(buffer, 0, state->block_size);</span>
|
||||
<span class="lineNum"> 502 </span><span class="lineCov"> 92175 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 503 </span><span class="lineCov"> 92175 : return;</span>
|
||||
<span class="lineNum"> 501 </span><span class="lineCov"> 92076 : memset(buffer, 0, state->block_size);</span>
|
||||
<span class="lineNum"> 502 </span><span class="lineCov"> 92076 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 503 </span><span class="lineCov"> 92076 : return;</span>
|
||||
<span class="lineNum"> 504 </span> : }
|
||||
<span class="lineNum"> 505 </span> :
|
||||
<span class="lineNum"> 506 </span> : /* get the file of this block */
|
||||
<span class="lineNum"> 507 </span><span class="lineCov"> 595953 : task->file = fs_par2file_get(disk, blockcur, &task->file_pos);</span>
|
||||
<span class="lineNum"> 507 </span><span class="lineCov"> 595621 : task->file = fs_par2file_get(disk, blockcur, &task->file_pos);</span>
|
||||
<span class="lineNum"> 508 </span> :
|
||||
<span class="lineNum"> 509 </span> : /* if the file is different than the current one, close it */
|
||||
<span class="lineNum"> 510 </span><span class="lineCov"> 596099 : if (handle->file != 0 && handle->file != task->file) {</span>
|
||||
<span class="lineNum"> 510 </span><span class="lineCov"> 596270 : if (handle->file != 0 && handle->file != task->file) {</span>
|
||||
<span class="lineNum"> 511 </span> : /* keep a pointer at the file we are going to close for error reporting */
|
||||
<span class="lineNum"> 512 </span><span class="lineCov"> 246100 : struct snapraid_file* report = handle->file;</span>
|
||||
<span class="lineNum"> 513 </span><span class="lineCov"> 246100 : ret = handle_close(handle);</span>
|
||||
<span class="lineNum"> 514 </span><span class="lineCov"> 246014 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 512 </span><span class="lineCov"> 246082 : struct snapraid_file* report = handle->file;</span>
|
||||
<span class="lineNum"> 513 </span><span class="lineCov"> 246082 : ret = handle_close(handle);</span>
|
||||
<span class="lineNum"> 514 </span><span class="lineCov"> 245642 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 515 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 516 </span> : /* This one is really an unexpected error, because we are only reading */
|
||||
<span class="lineNum"> 517 </span> : /* and closing a descriptor should never fail */
|
||||
|
|
@ -596,8 +596,8 @@
|
|||
<span class="lineNum"> 534 </span> : }
|
||||
<span class="lineNum"> 535 </span> : }
|
||||
<span class="lineNum"> 536 </span> :
|
||||
<span class="lineNum"> 537 </span><span class="lineCov"> 596013 : ret = handle_open(handle, task->file, state->file_mode, log_error, 0);</span>
|
||||
<span class="lineNum"> 538 </span><span class="lineCov"> 596027 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 537 </span><span class="lineCov"> 595830 : ret = handle_open(handle, task->file, state->file_mode, log_error, 0);</span>
|
||||
<span class="lineNum"> 538 </span><span class="lineCov"> 591402 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 539 </span><span class="lineCov"> 12 : if (errno == EIO) {</span>
|
||||
<span class="lineNum"> 540 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 541 </span> : log_tag("error:%u:%s:%s: Open EIO error. %s\n", blockcur, disk->name, esc_tag(task->file->sub, esc_buffer), strerror(errno));
|
||||
|
|
@ -641,10 +641,10 @@
|
|||
<span class="lineNum"> 579 </span> : }
|
||||
<span class="lineNum"> 580 </span> :
|
||||
<span class="lineNum"> 581 </span> : /* check if the file is changed */
|
||||
<span class="lineNum"> 582 </span><span class="lineCov"> 596015 : if (handle->st.st_size != task->file->size</span>
|
||||
<span class="lineNum"> 583 </span><span class="lineCov"> 596023 : || handle->st.st_mtime != task->file->mtime_sec</span>
|
||||
<span class="lineNum"> 584 </span><span class="lineCov"> 596052 : || STAT_NSEC(&handle->st) != task->file->mtime_nsec</span>
|
||||
<span class="lineNum"> 585 </span><span class="lineCov"> 596047 : || handle->st.st_ino != task->file->inode</span>
|
||||
<span class="lineNum"> 582 </span><span class="lineCov"> 591390 : if (handle->st.st_size != task->file->size</span>
|
||||
<span class="lineNum"> 583 </span><span class="lineCov"> 592816 : || handle->st.st_mtime != task->file->mtime_sec</span>
|
||||
<span class="lineNum"> 584 </span><span class="lineCov"> 594857 : || STAT_NSEC(&handle->st) != task->file->mtime_nsec</span>
|
||||
<span class="lineNum"> 585 </span><span class="lineCov"> 595324 : || handle->st.st_ino != task->file->inode</span>
|
||||
<span class="lineNum"> 586 </span> : ) {
|
||||
<span class="lineNum"> 587 </span><span class="lineNoCov"> 0 : log_tag("error:%u:%s:%s: Unexpected attribute change\n", blockcur, disk->name, esc_tag(task->file->sub, esc_buffer));</span>
|
||||
<span class="lineNum"> 588 </span><span class="lineCov"> 6 : if (handle->st.st_size != task->file->size) {</span>
|
||||
|
|
@ -663,8 +663,8 @@
|
|||
<span class="lineNum"> 601 </span><span class="lineCov"> 6 : return;</span>
|
||||
<span class="lineNum"> 602 </span> : }
|
||||
<span class="lineNum"> 603 </span> :
|
||||
<span class="lineNum"> 604 </span><span class="lineCov"> 596041 : task->read_size = handle_read(handle, task->file_pos, buffer, state->block_size, log_error, 0);</span>
|
||||
<span class="lineNum"> 605 </span><span class="lineCov"> 595681 : if (task->read_size == -1) {</span>
|
||||
<span class="lineNum"> 604 </span><span class="lineCov"> 594859 : task->read_size = handle_read(handle, task->file_pos, buffer, state->block_size, log_error, 0);</span>
|
||||
<span class="lineNum"> 605 </span><span class="lineCov"> 592671 : if (task->read_size == -1) {</span>
|
||||
<span class="lineNum"> 606 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 607 </span> : if (errno == EIO) {
|
||||
<span class="lineNum"> 608 </span> : log_tag("error:%u:%s:%s: Read EIO error at position %u. %s\n", blockcur, disk->name, esc_tag(task->file->sub, esc_buffer), task->file_pos, strerror(errno));
|
||||
|
|
@ -683,24 +683,24 @@
|
|||
<span class="lineNum"> 621 </span> : }
|
||||
<span class="lineNum"> 622 </span> :
|
||||
<span class="lineNum"> 623 </span> : /* store the path of the opened file */
|
||||
<span class="lineNum"> 624 </span><span class="lineCov"> 595681 : pathcpy(task->path, sizeof(task->path), handle->path);</span>
|
||||
<span class="lineNum"> 624 </span><span class="lineCov"> 592671 : pathcpy(task->path, sizeof(task->path), handle->path);</span>
|
||||
<span class="lineNum"> 625 </span> :
|
||||
<span class="lineNum"> 626 </span><span class="lineCov"> 595979 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 626 </span><span class="lineCov"> 588699 : task->state = TASK_STATE_DONE;</span>
|
||||
<a name="627"><span class="lineNum"> 627 </span> : }</a>
|
||||
<span class="lineNum"> 628 </span> :
|
||||
<span class="lineNum"> 629 </span><span class="lineCov"> 544522 : static void sync_parity_writer(struct snapraid_worker* worker, struct snapraid_task* task)</span>
|
||||
<span class="lineNum"> 629 </span><span class="lineCov"> 544910 : static void sync_parity_writer(struct snapraid_worker* worker, struct snapraid_task* task)</span>
|
||||
<span class="lineNum"> 630 </span> : {
|
||||
<span class="lineNum"> 631 </span><span class="lineCov"> 544522 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 632 </span><span class="lineCov"> 544522 : struct snapraid_state* state = io->state;</span>
|
||||
<span class="lineNum"> 633 </span><span class="lineCov"> 544522 : struct snapraid_parity_handle* parity_handle = worker->parity_handle;</span>
|
||||
<span class="lineNum"> 634 </span><span class="lineCov"> 544522 : unsigned level = parity_handle->level;</span>
|
||||
<span class="lineNum"> 635 </span><span class="lineCov"> 544522 : block_off_t blockcur = task->position;</span>
|
||||
<span class="lineNum"> 636 </span><span class="lineCov"> 544522 : unsigned char* buffer = task->buffer;</span>
|
||||
<span class="lineNum"> 631 </span><span class="lineCov"> 544910 : struct snapraid_io* io = worker->io;</span>
|
||||
<span class="lineNum"> 632 </span><span class="lineCov"> 544910 : struct snapraid_state* state = io->state;</span>
|
||||
<span class="lineNum"> 633 </span><span class="lineCov"> 544910 : struct snapraid_parity_handle* parity_handle = worker->parity_handle;</span>
|
||||
<span class="lineNum"> 634 </span><span class="lineCov"> 544910 : unsigned level = parity_handle->level;</span>
|
||||
<span class="lineNum"> 635 </span><span class="lineCov"> 544910 : block_off_t blockcur = task->position;</span>
|
||||
<span class="lineNum"> 636 </span><span class="lineCov"> 544910 : unsigned char* buffer = task->buffer;</span>
|
||||
<span class="lineNum"> 637 </span> : int ret;
|
||||
<span class="lineNum"> 638 </span> :
|
||||
<span class="lineNum"> 639 </span> : /* write parity */
|
||||
<span class="lineNum"> 640 </span><span class="lineCov"> 544522 : ret = parity_write(parity_handle, blockcur, buffer, state->block_size);</span>
|
||||
<span class="lineNum"> 641 </span><span class="lineCov"> 544519 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 640 </span><span class="lineCov"> 544910 : ret = parity_write(parity_handle, blockcur, buffer, state->block_size);</span>
|
||||
<span class="lineNum"> 641 </span><span class="lineCov"> 544712 : if (ret == -1) {</span>
|
||||
<span class="lineNum"> 642 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 643 </span> : if (errno == EIO) {
|
||||
<span class="lineNum"> 644 </span> : log_tag("parity_error:%u:%s: Write EIO error. %s\n", blockcur, lev_config_name(level), strerror(errno));
|
||||
|
|
@ -718,7 +718,7 @@
|
|||
<span class="lineNum"> 656 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 657 </span> : }
|
||||
<span class="lineNum"> 658 </span> :
|
||||
<span class="lineNum"> 659 </span><span class="lineCov"> 544519 : task->state = TASK_STATE_DONE;</span>
|
||||
<span class="lineNum"> 659 </span><span class="lineCov"> 544712 : task->state = TASK_STATE_DONE;</span>
|
||||
<a name="660"><span class="lineNum"> 660 </span> : }</a>
|
||||
<span class="lineNum"> 661 </span> :
|
||||
<span class="lineNum"> 662 </span><span class="lineCov"> 83 : static int state_sync_process(struct snapraid_state* state, struct snapraid_parity_handle* parity_handle, block_off_t blockstart, block_off_t blockmax)</span>
|
||||
|
|
@ -799,8 +799,8 @@
|
|||
<span class="lineNum"> 737 </span><span class="lineCov"> 83 : plan.force_full = state->opt.force_full;</span>
|
||||
<span class="lineNum"> 738 </span><span class="lineCov"> 410168 : for (blockcur = blockstart; blockcur < blockmax; ++blockcur) {</span>
|
||||
<span class="lineNum"> 739 </span><span class="lineCov"> 410085 : if (!block_is_enabled(&plan, blockcur))</span>
|
||||
<span class="lineNum"> 740 </span><span class="lineCov"> 295356 : continue;</span>
|
||||
<span class="lineNum"> 741 </span><span class="lineCov"> 114729 : ++countmax;</span>
|
||||
<span class="lineNum"> 740 </span><span class="lineCov"> 295300 : continue;</span>
|
||||
<span class="lineNum"> 741 </span><span class="lineCov"> 114785 : ++countmax;</span>
|
||||
<span class="lineNum"> 742 </span> : }
|
||||
<span class="lineNum"> 743 </span> :
|
||||
<span class="lineNum"> 744 </span> : /* compute the autosave size for all disk, even if not read */
|
||||
|
|
@ -836,31 +836,31 @@
|
|||
<span class="lineNum"> 774 </span> : int writer_error[IO_WRITER_ERROR_MAX];
|
||||
<span class="lineNum"> 775 </span> :
|
||||
<span class="lineNum"> 776 </span> : /* go to the next block */
|
||||
<span class="lineNum"> 777 </span><span class="lineCov"> 114812 : blockcur = io_read_next(&io, &buffer);</span>
|
||||
<span class="lineNum"> 778 </span><span class="lineCov"> 114812 : if (blockcur >= blockmax)</span>
|
||||
<span class="lineNum"> 777 </span><span class="lineCov"> 114868 : blockcur = io_read_next(&io, &buffer);</span>
|
||||
<span class="lineNum"> 778 </span><span class="lineCov"> 114868 : if (blockcur >= blockmax)</span>
|
||||
<span class="lineNum"> 779 </span><span class="lineCov"> 166 : break;</span>
|
||||
<span class="lineNum"> 780 </span> :
|
||||
<span class="lineNum"> 781 </span> : /* until now is scheduling */
|
||||
<span class="lineNum"> 782 </span><span class="lineCov"> 114729 : state_usage_sched(state);</span>
|
||||
<span class="lineNum"> 782 </span><span class="lineCov"> 114785 : state_usage_sched(state);</span>
|
||||
<span class="lineNum"> 783 </span> :
|
||||
<span class="lineNum"> 784 </span> : /* one more block processed for autosave */
|
||||
<span class="lineNum"> 785 </span><span class="lineCov"> 114729 : ++autosavedone;</span>
|
||||
<span class="lineNum"> 786 </span><span class="lineCov"> 114729 : --autosavemissing;</span>
|
||||
<span class="lineNum"> 785 </span><span class="lineCov"> 114785 : ++autosavedone;</span>
|
||||
<span class="lineNum"> 786 </span><span class="lineCov"> 114785 : --autosavemissing;</span>
|
||||
<span class="lineNum"> 787 </span> :
|
||||
<span class="lineNum"> 788 </span> : /* by default process the block, and skip it if something goes wrong */
|
||||
<span class="lineNum"> 789 </span><span class="lineCov"> 114729 : error_on_this_block = 0;</span>
|
||||
<span class="lineNum"> 790 </span><span class="lineCov"> 114729 : silent_error_on_this_block = 0;</span>
|
||||
<span class="lineNum"> 791 </span><span class="lineCov"> 114729 : io_error_on_this_block = 0;</span>
|
||||
<span class="lineNum"> 792 </span><span class="lineCov"> 114729 : fixed_error_on_this_block = 0;</span>
|
||||
<span class="lineNum"> 789 </span><span class="lineCov"> 114785 : error_on_this_block = 0;</span>
|
||||
<span class="lineNum"> 790 </span><span class="lineCov"> 114785 : silent_error_on_this_block = 0;</span>
|
||||
<span class="lineNum"> 791 </span><span class="lineCov"> 114785 : io_error_on_this_block = 0;</span>
|
||||
<span class="lineNum"> 792 </span><span class="lineCov"> 114785 : fixed_error_on_this_block = 0;</span>
|
||||
<span class="lineNum"> 793 </span> :
|
||||
<span class="lineNum"> 794 </span> : /* keep track of the number of failed blocks */
|
||||
<span class="lineNum"> 795 </span><span class="lineCov"> 114729 : failed_count = 0;</span>
|
||||
<span class="lineNum"> 795 </span><span class="lineCov"> 114785 : failed_count = 0;</span>
|
||||
<span class="lineNum"> 796 </span> :
|
||||
<span class="lineNum"> 797 </span> : /* get block specific info */
|
||||
<span class="lineNum"> 798 </span><span class="lineCov"> 114729 : info = info_get(&state->infoarr, blockcur);</span>
|
||||
<span class="lineNum"> 798 </span><span class="lineCov"> 114785 : info = info_get(&state->infoarr, blockcur);</span>
|
||||
<span class="lineNum"> 799 </span> :
|
||||
<span class="lineNum"> 800 </span> : /* if we have to use the old hash */
|
||||
<span class="lineNum"> 801 </span><span class="lineCov"> 114729 : rehash = info_get_rehash(info);</span>
|
||||
<span class="lineNum"> 801 </span><span class="lineCov"> 114785 : rehash = info_get_rehash(info);</span>
|
||||
<span class="lineNum"> 802 </span> :
|
||||
<span class="lineNum"> 803 </span> : /* if the parity requires to be updated */
|
||||
<span class="lineNum"> 804 </span> : /* It could happens that all the blocks are EMPTY/BLK and CHG but with the hash */
|
||||
|
|
@ -869,18 +869,18 @@
|
|||
<span class="lineNum"> 807 </span> : /* Note that CHG/DELETED blocks already present in the content file loaded */
|
||||
<span class="lineNum"> 808 </span> : /* have the hash cleared (::clear_past_hash flag), and then they won't never match the hash. */
|
||||
<span class="lineNum"> 809 </span> : /* We are treating only CHG blocks created at runtime. */
|
||||
<span class="lineNum"> 810 </span><span class="lineCov"> 114729 : parity_needs_to_be_updated = state->opt.force_full || state->opt.force_parity_update;</span>
|
||||
<span class="lineNum"> 810 </span><span class="lineCov"> 114785 : parity_needs_to_be_updated = state->opt.force_full || state->opt.force_parity_update;</span>
|
||||
<span class="lineNum"> 811 </span> :
|
||||
<span class="lineNum"> 812 </span> : /* if the parity is going to be updated */
|
||||
<span class="lineNum"> 813 </span><span class="lineCov"> 114729 : parity_going_to_be_updated = 0;</span>
|
||||
<span class="lineNum"> 813 </span><span class="lineCov"> 114785 : parity_going_to_be_updated = 0;</span>
|
||||
<span class="lineNum"> 814 </span> :
|
||||
<span class="lineNum"> 815 </span> : /* if the block is marked as bad, we force the parity update */
|
||||
<span class="lineNum"> 816 </span> : /* because the bad block may be the result of a wrong parity */
|
||||
<span class="lineNum"> 817 </span><span class="lineCov"> 114729 : if (info_get_bad(info))</span>
|
||||
<span class="lineNum"> 817 </span><span class="lineCov"> 114785 : if (info_get_bad(info))</span>
|
||||
<span class="lineNum"> 818 </span><span class="lineNoCov"> 0 : parity_needs_to_be_updated = 1;</span>
|
||||
<span class="lineNum"> 819 </span> :
|
||||
<span class="lineNum"> 820 </span> : /* for each disk, process the block */
|
||||
<span class="lineNum"> 821 </span><span class="lineCov"> 803103 : for (j = 0; j < diskmax; ++j) {</span>
|
||||
<span class="lineNum"> 821 </span><span class="lineCov"> 803495 : for (j = 0; j < diskmax; ++j) {</span>
|
||||
<span class="lineNum"> 822 </span> : struct snapraid_task* task;
|
||||
<span class="lineNum"> 823 </span> : int read_size;
|
||||
<span class="lineNum"> 824 </span> : unsigned char hash[HASH_MAX];
|
||||
|
|
@ -892,45 +892,45 @@
|
|||
<span class="lineNum"> 830 </span> : unsigned diskcur;
|
||||
<span class="lineNum"> 831 </span> :
|
||||
<span class="lineNum"> 832 </span> : /* until now is misc */
|
||||
<span class="lineNum"> 833 </span><span class="lineCov"> 688374 : state_usage_misc(state);</span>
|
||||
<span class="lineNum"> 833 </span><span class="lineCov"> 688710 : state_usage_misc(state);</span>
|
||||
<span class="lineNum"> 834 </span> :
|
||||
<span class="lineNum"> 835 </span><span class="lineCov"> 688374 : task = io_data_read(&io, &diskcur, waiting_map, &waiting_mac);</span>
|
||||
<span class="lineNum"> 835 </span><span class="lineCov"> 688710 : task = io_data_read(&io, &diskcur, waiting_map, &waiting_mac);</span>
|
||||
<span class="lineNum"> 836 </span> :
|
||||
<span class="lineNum"> 837 </span> : /* until now is disk */
|
||||
<span class="lineNum"> 838 </span><span class="lineCov"> 688374 : state_usage_disk(state, handle, waiting_map, waiting_mac);</span>
|
||||
<span class="lineNum"> 838 </span><span class="lineCov"> 688710 : state_usage_disk(state, handle, waiting_map, waiting_mac);</span>
|
||||
<span class="lineNum"> 839 </span> :
|
||||
<span class="lineNum"> 840 </span> : /* get the results */
|
||||
<span class="lineNum"> 841 </span><span class="lineCov"> 688374 : disk = task->disk;</span>
|
||||
<span class="lineNum"> 842 </span><span class="lineCov"> 688374 : block = task->block;</span>
|
||||
<span class="lineNum"> 843 </span><span class="lineCov"> 688374 : file = task->file;</span>
|
||||
<span class="lineNum"> 844 </span><span class="lineCov"> 688374 : file_pos = task->file_pos;</span>
|
||||
<span class="lineNum"> 845 </span><span class="lineCov"> 688374 : read_size = task->read_size;</span>
|
||||
<span class="lineNum"> 841 </span><span class="lineCov"> 688710 : disk = task->disk;</span>
|
||||
<span class="lineNum"> 842 </span><span class="lineCov"> 688710 : block = task->block;</span>
|
||||
<span class="lineNum"> 843 </span><span class="lineCov"> 688710 : file = task->file;</span>
|
||||
<span class="lineNum"> 844 </span><span class="lineCov"> 688710 : file_pos = task->file_pos;</span>
|
||||
<span class="lineNum"> 845 </span><span class="lineCov"> 688710 : read_size = task->read_size;</span>
|
||||
<span class="lineNum"> 846 </span> :
|
||||
<span class="lineNum"> 847 </span> : /* by default no rehash in case of "continue" */
|
||||
<span class="lineNum"> 848 </span><span class="lineCov"> 688374 : rehandle[diskcur].block = 0;</span>
|
||||
<span class="lineNum"> 848 </span><span class="lineCov"> 688710 : rehandle[diskcur].block = 0;</span>
|
||||
<span class="lineNum"> 849 </span> :
|
||||
<span class="lineNum"> 850 </span> : /* if the disk position is not used */
|
||||
<span class="lineNum"> 851 </span><span class="lineCov"> 688374 : if (!disk)</span>
|
||||
<span class="lineNum"> 852 </span><span class="lineCov"> 93074 : continue;</span>
|
||||
<span class="lineNum"> 851 </span><span class="lineCov"> 688710 : if (!disk)</span>
|
||||
<span class="lineNum"> 852 </span><span class="lineCov"> 93042 : continue;</span>
|
||||
<span class="lineNum"> 853 </span> :
|
||||
<span class="lineNum"> 854 </span> : /* get the state of the block */
|
||||
<span class="lineNum"> 855 </span><span class="lineCov"> 688374 : block_state = block_state_get(block);</span>
|
||||
<span class="lineNum"> 855 </span><span class="lineCov"> 688710 : block_state = block_state_get(block);</span>
|
||||
<span class="lineNum"> 856 </span> :
|
||||
<span class="lineNum"> 857 </span> : /* if the block has invalid parity, */
|
||||
<span class="lineNum"> 858 </span> : /* we have to take care of it in case of recover */
|
||||
<span class="lineNum"> 859 </span><span class="lineCov"> 688374 : if (block_has_invalid_parity(block)) {</span>
|
||||
<span class="lineNum"> 859 </span><span class="lineCov"> 688710 : if (block_has_invalid_parity(block)) {</span>
|
||||
<span class="lineNum"> 860 </span> : /* store it in the failed set, because */
|
||||
<span class="lineNum"> 861 </span> : /* the parity may be still computed with the previous content */
|
||||
<span class="lineNum"> 862 </span><span class="lineCov"> 182822 : failed[failed_count].index = diskcur;</span>
|
||||
<span class="lineNum"> 863 </span><span class="lineCov"> 182822 : failed[failed_count].size = state->block_size;</span>
|
||||
<span class="lineNum"> 864 </span><span class="lineCov"> 182822 : failed[failed_count].block = block;</span>
|
||||
<span class="lineNum"> 865 </span><span class="lineCov"> 182822 : ++failed_count;</span>
|
||||
<span class="lineNum"> 862 </span><span class="lineCov"> 182898 : failed[failed_count].index = diskcur;</span>
|
||||
<span class="lineNum"> 863 </span><span class="lineCov"> 182898 : failed[failed_count].size = state->block_size;</span>
|
||||
<span class="lineNum"> 864 </span><span class="lineCov"> 182898 : failed[failed_count].block = block;</span>
|
||||
<span class="lineNum"> 865 </span><span class="lineCov"> 182898 : ++failed_count;</span>
|
||||
<span class="lineNum"> 866 </span> :
|
||||
<span class="lineNum"> 867 </span> : /* if the block has invalid parity, we have to update the parity */
|
||||
<span class="lineNum"> 868 </span> : /* to include this block change */
|
||||
<span class="lineNum"> 869 </span> : /* This also apply to CHG blocks, but we are going to handle */
|
||||
<span class="lineNum"> 870 </span> : /* later this case to do the updates only if really needed */
|
||||
<span class="lineNum"> 871 </span><span class="lineCov"> 182822 : if (block_state != BLOCK_STATE_CHG)</span>
|
||||
<span class="lineNum"> 871 </span><span class="lineCov"> 182898 : if (block_state != BLOCK_STATE_CHG)</span>
|
||||
<span class="lineNum"> 872 </span><span class="lineCov"> 88225 : parity_needs_to_be_updated = 1;</span>
|
||||
<span class="lineNum"> 873 </span> :
|
||||
<span class="lineNum"> 874 </span> : /* note that DELETE blocks are skipped in the next check */
|
||||
|
|
@ -941,28 +941,28 @@
|
|||
<span class="lineNum"> 879 </span> : }
|
||||
<span class="lineNum"> 880 </span> :
|
||||
<span class="lineNum"> 881 </span> : /* if the block is not used */
|
||||
<span class="lineNum"> 882 </span><span class="lineCov"> 688374 : if (!block_has_file(block))</span>
|
||||
<span class="lineNum"> 883 </span><span class="lineCov"> 92203 : continue;</span>
|
||||
<span class="lineNum"> 882 </span><span class="lineCov"> 688710 : if (!block_has_file(block))</span>
|
||||
<span class="lineNum"> 883 </span><span class="lineCov"> 92171 : continue;</span>
|
||||
<span class="lineNum"> 884 </span> :
|
||||
<span class="lineNum"> 885 </span> : /* handle error conditions */
|
||||
<span class="lineNum"> 886 </span><span class="lineCov"> 596171 : if (task->state == TASK_STATE_IOERROR) {</span>
|
||||
<span class="lineNum"> 886 </span><span class="lineCov"> 596539 : if (task->state == TASK_STATE_IOERROR) {</span>
|
||||
<span class="lineNum"> 887 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 888 </span> : ++io_error;
|
||||
<span class="lineNum"> 889 </span> : goto bail;
|
||||
<span class="lineNum"> 890 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 891 </span> : }
|
||||
<span class="lineNum"> 892 </span><span class="lineCov"> 596171 : if (task->state == TASK_STATE_ERROR) {</span>
|
||||
<span class="lineNum"> 892 </span><span class="lineCov"> 596539 : if (task->state == TASK_STATE_ERROR) {</span>
|
||||
<span class="lineNum"> 893 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 894 </span> : ++error;
|
||||
<span class="lineNum"> 895 </span> : goto bail;
|
||||
<span class="lineNum"> 896 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 897 </span> : }
|
||||
<span class="lineNum"> 898 </span><span class="lineCov"> 596171 : if (task->state == TASK_STATE_ERROR_CONTINUE) {</span>
|
||||
<span class="lineNum"> 898 </span><span class="lineCov"> 596539 : if (task->state == TASK_STATE_ERROR_CONTINUE) {</span>
|
||||
<span class="lineNum"> 899 </span><span class="lineCov"> 18 : ++error;</span>
|
||||
<span class="lineNum"> 900 </span><span class="lineCov"> 18 : error_on_this_block = 1;</span>
|
||||
<span class="lineNum"> 901 </span><span class="lineCov"> 18 : continue;</span>
|
||||
<span class="lineNum"> 902 </span> : }
|
||||
<span class="lineNum"> 903 </span><span class="lineCov"> 596153 : if (task->state == TASK_STATE_IOERROR_CONTINUE) {</span>
|
||||
<span class="lineNum"> 903 </span><span class="lineCov"> 596521 : if (task->state == TASK_STATE_IOERROR_CONTINUE) {</span>
|
||||
<span class="lineNum"> 904 </span><span class="lineNoCov"> 0 : ++io_error;</span>
|
||||
<span class="lineNum"> 905 </span><span class="lineNoCov"> 0 : if (io_error >= state->opt.io_error_limit) {</span>
|
||||
<span class="lineNum"> 906 </span> : /* LCOV_EXCL_START */
|
||||
|
|
@ -977,32 +977,32 @@
|
|||
<span class="lineNum"> 915 </span><span class="lineNoCov"> 0 : io_error_on_this_block = 1;</span>
|
||||
<span class="lineNum"> 916 </span><span class="lineNoCov"> 0 : continue;</span>
|
||||
<span class="lineNum"> 917 </span> : }
|
||||
<span class="lineNum"> 918 </span><span class="lineCov"> 596153 : if (task->state != TASK_STATE_DONE) {</span>
|
||||
<span class="lineNum"> 918 </span><span class="lineCov"> 596521 : if (task->state != TASK_STATE_DONE) {</span>
|
||||
<span class="lineNum"> 919 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 920 </span> : log_fatal("Internal inconsistency in task state\n");
|
||||
<span class="lineNum"> 921 </span> : os_abort();
|
||||
<span class="lineNum"> 922 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 923 </span> : }
|
||||
<span class="lineNum"> 924 </span> :
|
||||
<span class="lineNum"> 925 </span><span class="lineCov"> 596153 : countsize += read_size;</span>
|
||||
<span class="lineNum"> 925 </span><span class="lineCov"> 596521 : countsize += read_size;</span>
|
||||
<span class="lineNum"> 926 </span> :
|
||||
<span class="lineNum"> 927 </span> : /* now compute the hash */
|
||||
<span class="lineNum"> 928 </span><span class="lineCov"> 596153 : if (rehash) {</span>
|
||||
<span class="lineNum"> 928 </span><span class="lineCov"> 596521 : if (rehash) {</span>
|
||||
<span class="lineNum"> 929 </span><span class="lineCov"> 27243 : memhash(state->prevhash, state->prevhashseed, hash, buffer[diskcur], read_size);</span>
|
||||
<span class="lineNum"> 930 </span> :
|
||||
<span class="lineNum"> 931 </span> : /* compute the new hash, and store it */
|
||||
<span class="lineNum"> 932 </span><span class="lineCov"> 27243 : rehandle[diskcur].block = block;</span>
|
||||
<span class="lineNum"> 933 </span><span class="lineCov"> 27243 : memhash(state->hash, state->hashseed, rehandle[diskcur].hash, buffer[diskcur], read_size);</span>
|
||||
<span class="lineNum"> 934 </span> : } else {
|
||||
<span class="lineNum"> 935 </span><span class="lineCov"> 568910 : memhash(state->hash, state->hashseed, hash, buffer[diskcur], read_size);</span>
|
||||
<span class="lineNum"> 935 </span><span class="lineCov"> 569278 : memhash(state->hash, state->hashseed, hash, buffer[diskcur], read_size);</span>
|
||||
<span class="lineNum"> 936 </span> : }
|
||||
<span class="lineNum"> 937 </span> :
|
||||
<span class="lineNum"> 938 </span> : /* until now is hash */
|
||||
<span class="lineNum"> 939 </span><span class="lineCov"> 596153 : state_usage_hash(state);</span>
|
||||
<span class="lineNum"> 939 </span><span class="lineCov"> 596521 : state_usage_hash(state);</span>
|
||||
<span class="lineNum"> 940 </span> :
|
||||
<span class="lineNum"> 941 </span><span class="lineCov"> 596153 : if (block_has_updated_hash(block)) {</span>
|
||||
<span class="lineNum"> 941 </span><span class="lineCov"> 596521 : if (block_has_updated_hash(block)) {</span>
|
||||
<span class="lineNum"> 942 </span> : /* compare the hash */
|
||||
<span class="lineNum"> 943 </span><span class="lineCov"> 501574 : if (memcmp(hash, block->hash, BLOCK_HASH_SIZE) != 0) {</span>
|
||||
<span class="lineNum"> 943 </span><span class="lineCov"> 501866 : if (memcmp(hash, block->hash, BLOCK_HASH_SIZE) != 0) {</span>
|
||||
<span class="lineNum"> 944 </span> : /* if the file has invalid parity, it's a REP changed during the sync */
|
||||
<span class="lineNum"> 945 </span><span class="lineCov"> 853 : if (block_has_invalid_parity(block)) {</span>
|
||||
<span class="lineNum"> 946 </span><span class="lineCov"> 1 : log_tag("error:%u:%s:%s: Unexpected data change\n", blockcur, disk->name, esc_tag(file->sub, esc_buffer));</span>
|
||||
|
|
@ -1026,8 +1026,8 @@
|
|||
<span class="lineNum"> 964 </span><span class="lineCov"> 1 : continue;</span>
|
||||
<span class="lineNum"> 965 </span> : } else { /* otherwise it's a BLK with silent error */
|
||||
<span class="lineNum"> 966 </span><span class="lineCov"> 852 : unsigned diff = memdiff(hash, block->hash, BLOCK_HASH_SIZE);</span>
|
||||
<span class="lineNum"> 967 </span><span class="lineCov"> 852 : log_tag("error:%u:%s:%s: Data error at position %u, diff bits %u\n", blockcur, disk->name, esc_tag(file->sub, esc_buffer), file_pos, diff);</span>
|
||||
<span class="lineNum"> 968 </span><span class="lineCov"> 852 : log_error("Data error in file '%s' at position '%u', diff bits %u\n", task->path, file_pos, diff);</span>
|
||||
<span class="lineNum"> 967 </span><span class="lineCov"> 852 : log_tag("error:%u:%s:%s: Data error at position %u, diff bits %u/%u\n", blockcur, disk->name, esc_tag(file->sub, esc_buffer), file_pos, diff, BLOCK_HASH_SIZE*8);</span>
|
||||
<span class="lineNum"> 968 </span><span class="lineCov"> 852 : log_error("Data error in file '%s' at position '%u', diff bits %u/%u\n", task->path, file_pos, diff, BLOCK_HASH_SIZE*8);</span>
|
||||
<span class="lineNum"> 969 </span> :
|
||||
<span class="lineNum"> 970 </span> : /* save the failed block for the fix */
|
||||
<span class="lineNum"> 971 </span><span class="lineCov"> 852 : failed[failed_count].index = diskcur;</span>
|
||||
|
|
@ -1045,28 +1045,28 @@
|
|||
<span class="lineNum"> 983 </span> : }
|
||||
<span class="lineNum"> 984 </span> : } else {
|
||||
<span class="lineNum"> 985 </span> : /* if until now the parity doesn't need to be updated */
|
||||
<span class="lineNum"> 986 </span><span class="lineCov"> 94579 : if (!parity_needs_to_be_updated) {</span>
|
||||
<span class="lineNum"> 986 </span><span class="lineCov"> 94655 : if (!parity_needs_to_be_updated) {</span>
|
||||
<span class="lineNum"> 987 </span> : /* for sure it's a CHG block, because EMPTY are processed before with "continue" */
|
||||
<span class="lineNum"> 988 </span> : /* and BLK and REP have "block_has_updated_hash()" as 1, and all the others */
|
||||
<span class="lineNum"> 989 </span> : /* have "parity_needs_to_be_updated" already at 1 */
|
||||
<span class="lineNum"> 990 </span><span class="lineCov"> 35226 : assert(block_state_get(block) == BLOCK_STATE_CHG);</span>
|
||||
<span class="lineNum"> 990 </span><span class="lineCov"> 35282 : assert(block_state_get(block) == BLOCK_STATE_CHG);</span>
|
||||
<span class="lineNum"> 991 </span> :
|
||||
<span class="lineNum"> 992 </span> : /* if the hash represents the data unequivocally */
|
||||
<span class="lineNum"> 993 </span><span class="lineCov"> 35226 : if (hash_is_unique(block->hash)) {</span>
|
||||
<span class="lineNum"> 993 </span><span class="lineCov"> 35282 : if (hash_is_unique(block->hash)) {</span>
|
||||
<span class="lineNum"> 994 </span> : /* check if the hash is changed */
|
||||
<span class="lineNum"> 995 </span><span class="lineCov"> 8551 : if (memcmp(hash, block->hash, BLOCK_HASH_SIZE) != 0) {</span>
|
||||
<span class="lineNum"> 995 </span><span class="lineCov"> 8608 : if (memcmp(hash, block->hash, BLOCK_HASH_SIZE) != 0) {</span>
|
||||
<span class="lineNum"> 996 </span> : /* the block is different, and we must update parity */
|
||||
<span class="lineNum"> 997 </span><span class="lineCov"> 6039 : parity_needs_to_be_updated = 1;</span>
|
||||
<span class="lineNum"> 997 </span><span class="lineCov"> 6111 : parity_needs_to_be_updated = 1;</span>
|
||||
<span class="lineNum"> 998 </span> : }
|
||||
<span class="lineNum"> 999 </span> : } else {
|
||||
<span class="lineNum"> 1000 </span> : /* if the hash is already invalid, we update parity */
|
||||
<span class="lineNum"> 1001 </span><span class="lineCov"> 26675 : parity_needs_to_be_updated = 1;</span>
|
||||
<span class="lineNum"> 1001 </span><span class="lineCov"> 26674 : parity_needs_to_be_updated = 1;</span>
|
||||
<span class="lineNum"> 1002 </span> : }
|
||||
<span class="lineNum"> 1003 </span> : }
|
||||
<span class="lineNum"> 1004 </span> :
|
||||
<span class="lineNum"> 1005 </span> : /* copy the hash in the block, but doesn't mark the block as hashed */
|
||||
<span class="lineNum"> 1006 </span> : /* this allow in case of skipped block to do not save the failed computation */
|
||||
<span class="lineNum"> 1007 </span><span class="lineCov"> 94579 : memcpy(block->hash, hash, BLOCK_HASH_SIZE);</span>
|
||||
<span class="lineNum"> 1007 </span><span class="lineCov"> 94655 : memcpy(block->hash, hash, BLOCK_HASH_SIZE);</span>
|
||||
<span class="lineNum"> 1008 </span> :
|
||||
<span class="lineNum"> 1009 </span> : /* note that in case of rehash, this is the wrong hash, */
|
||||
<span class="lineNum"> 1010 </span> : /* but it will be overwritten later */
|
||||
|
|
@ -1076,7 +1076,7 @@
|
|||
<span class="lineNum"> 1014 </span> : /* if we have only silent errors we can try to fix them on-the-fly */
|
||||
<span class="lineNum"> 1015 </span> : /* note the the fix is not written to disk, but used only to */
|
||||
<span class="lineNum"> 1016 </span> : /* compute the new parity */
|
||||
<span class="lineNum"> 1017 </span><span class="lineCov"> 114729 : if (!error_on_this_block && !io_error_on_this_block && silent_error_on_this_block) {</span>
|
||||
<span class="lineNum"> 1017 </span><span class="lineCov"> 114785 : if (!error_on_this_block && !io_error_on_this_block && silent_error_on_this_block) {</span>
|
||||
<span class="lineNum"> 1018 </span> : unsigned failed_mac;
|
||||
<span class="lineNum"> 1019 </span><span class="lineCov"> 852 : int something_to_recover = 0;</span>
|
||||
<span class="lineNum"> 1020 </span> :
|
||||
|
|
@ -1213,44 +1213,44 @@
|
|||
<span class="lineNum"> 1151 </span> : }
|
||||
<span class="lineNum"> 1152 </span> :
|
||||
<span class="lineNum"> 1153 </span> : /* if we have read all the data required and it's correct, proceed with the parity */
|
||||
<span class="lineNum"> 1154 </span><span class="lineCov"> 114729 : if (!error_on_this_block && !io_error_on_this_block</span>
|
||||
<span class="lineNum"> 1155 </span><span class="lineCov"> 114710 : && (!silent_error_on_this_block || fixed_error_on_this_block)</span>
|
||||
<span class="lineNum"> 1154 </span><span class="lineCov"> 114785 : if (!error_on_this_block && !io_error_on_this_block</span>
|
||||
<span class="lineNum"> 1155 </span><span class="lineCov"> 114766 : && (!silent_error_on_this_block || fixed_error_on_this_block)</span>
|
||||
<span class="lineNum"> 1156 </span> : ) {
|
||||
<span class="lineNum"> 1157 </span> : /* update the parity only if really needed */
|
||||
<span class="lineNum"> 1158 </span><span class="lineCov"> 114710 : if (parity_needs_to_be_updated) {</span>
|
||||
<span class="lineNum"> 1158 </span><span class="lineCov"> 114766 : if (parity_needs_to_be_updated) {</span>
|
||||
<span class="lineNum"> 1159 </span> : /* compute the parity */
|
||||
<span class="lineNum"> 1160 </span><span class="lineCov"> 112438 : raid_gen(diskmax, state->level, state->block_size, buffer);</span>
|
||||
<span class="lineNum"> 1160 </span><span class="lineCov"> 112510 : raid_gen(diskmax, state->level, state->block_size, buffer);</span>
|
||||
<span class="lineNum"> 1161 </span> :
|
||||
<span class="lineNum"> 1162 </span> : /* until now is raid */
|
||||
<span class="lineNum"> 1163 </span><span class="lineCov"> 112438 : state_usage_raid(state);</span>
|
||||
<span class="lineNum"> 1163 </span><span class="lineCov"> 112510 : state_usage_raid(state);</span>
|
||||
<span class="lineNum"> 1164 </span> :
|
||||
<span class="lineNum"> 1165 </span> : /* mark that the parity is going to be written */
|
||||
<span class="lineNum"> 1166 </span><span class="lineCov"> 112438 : parity_going_to_be_updated = 1;</span>
|
||||
<span class="lineNum"> 1166 </span><span class="lineCov"> 112510 : parity_going_to_be_updated = 1;</span>
|
||||
<span class="lineNum"> 1167 </span> : }
|
||||
<span class="lineNum"> 1168 </span> :
|
||||
<span class="lineNum"> 1169 </span> : /* for each disk, mark the blocks as processed */
|
||||
<span class="lineNum"> 1170 </span><span class="lineCov"> 802970 : for (j = 0; j < diskmax; ++j) {</span>
|
||||
<span class="lineNum"> 1170 </span><span class="lineCov"> 803362 : for (j = 0; j < diskmax; ++j) {</span>
|
||||
<span class="lineNum"> 1171 </span> : struct snapraid_block* block;
|
||||
<span class="lineNum"> 1172 </span> :
|
||||
<span class="lineNum"> 1173 </span><span class="lineCov"> 688260 : if (!handle[j].disk)</span>
|
||||
<span class="lineNum"> 1173 </span><span class="lineCov"> 688596 : if (!handle[j].disk)</span>
|
||||
<span class="lineNum"> 1174 </span><span class="lineNoCov"> 0 : continue;</span>
|
||||
<span class="lineNum"> 1175 </span> :
|
||||
<span class="lineNum"> 1176 </span><span class="lineCov"> 688260 : block = fs_par2block_find(handle[j].disk, blockcur);</span>
|
||||
<span class="lineNum"> 1176 </span><span class="lineCov"> 688596 : block = fs_par2block_find(handle[j].disk, blockcur);</span>
|
||||
<span class="lineNum"> 1177 </span> :
|
||||
<span class="lineNum"> 1178 </span><span class="lineCov"> 688260 : if (block == BLOCK_NULL) {</span>
|
||||
<span class="lineNum"> 1178 </span><span class="lineCov"> 688596 : if (block == BLOCK_NULL) {</span>
|
||||
<span class="lineNum"> 1179 </span> : /* nothing to do */
|
||||
<span class="lineNum"> 1180 </span><span class="lineCov"> 81248 : continue;</span>
|
||||
<span class="lineNum"> 1180 </span><span class="lineCov"> 81216 : continue;</span>
|
||||
<span class="lineNum"> 1181 </span> : }
|
||||
<span class="lineNum"> 1182 </span> :
|
||||
<span class="lineNum"> 1183 </span> : /* if it's a deleted block */
|
||||
<span class="lineNum"> 1184 </span><span class="lineCov"> 607012 : if (block_state_get(block) == BLOCK_STATE_DELETED) {</span>
|
||||
<span class="lineNum"> 1184 </span><span class="lineCov"> 607380 : if (block_state_get(block) == BLOCK_STATE_DELETED) {</span>
|
||||
<span class="lineNum"> 1185 </span> : /* the parity is now updated without this block, so it's now empty */
|
||||
<span class="lineNum"> 1186 </span><span class="lineCov"> 10953 : fs_deallocate(handle[j].disk, blockcur);</span>
|
||||
<span class="lineNum"> 1187 </span><span class="lineCov"> 10953 : continue;</span>
|
||||
<span class="lineNum"> 1188 </span> : }
|
||||
<span class="lineNum"> 1189 </span> :
|
||||
<span class="lineNum"> 1190 </span> : /* now all the blocks have the hash and the parity computed */
|
||||
<span class="lineNum"> 1191 </span><span class="lineCov"> 596059 : block_state_set(block, BLOCK_STATE_BLK);</span>
|
||||
<span class="lineNum"> 1191 </span><span class="lineCov"> 596427 : block_state_set(block, BLOCK_STATE_BLK);</span>
|
||||
<span class="lineNum"> 1192 </span> : }
|
||||
<span class="lineNum"> 1193 </span> :
|
||||
<span class="lineNum"> 1194 </span> : /* we update the info block only if we really have updated the parity */
|
||||
|
|
@ -1258,11 +1258,11 @@
|
|||
<span class="lineNum"> 1196 </span> : /* wrote the parity at this time */
|
||||
<span class="lineNum"> 1197 </span> : /* we also update the info block only if no silent error was found */
|
||||
<span class="lineNum"> 1198 </span> : /* because has no sense to refresh the time for data that we know bad */
|
||||
<span class="lineNum"> 1199 </span><span class="lineCov"> 114710 : if (parity_needs_to_be_updated</span>
|
||||
<span class="lineNum"> 1200 </span><span class="lineCov"> 112438 : && !silent_error_on_this_block</span>
|
||||
<span class="lineNum"> 1199 </span><span class="lineCov"> 114766 : if (parity_needs_to_be_updated</span>
|
||||
<span class="lineNum"> 1200 </span><span class="lineCov"> 112510 : && !silent_error_on_this_block</span>
|
||||
<span class="lineNum"> 1201 </span> : ) {
|
||||
<span class="lineNum"> 1202 </span> : /* if rehash is needed */
|
||||
<span class="lineNum"> 1203 </span><span class="lineCov"> 112099 : if (rehash) {</span>
|
||||
<span class="lineNum"> 1203 </span><span class="lineCov"> 112174 : if (rehash) {</span>
|
||||
<span class="lineNum"> 1204 </span> : /* store all the new hash already computed */
|
||||
<span class="lineNum"> 1205 </span><span class="lineCov"> 32249 : for (j = 0; j < diskmax; ++j) {</span>
|
||||
<span class="lineNum"> 1206 </span><span class="lineCov"> 27642 : if (rehandle[j].block)</span>
|
||||
|
|
@ -1272,14 +1272,14 @@
|
|||
<span class="lineNum"> 1210 </span> :
|
||||
<span class="lineNum"> 1211 </span> : /* update the time info of the block */
|
||||
<span class="lineNum"> 1212 </span> : /* we are also clearing any previous bad and rehash flag */
|
||||
<span class="lineNum"> 1213 </span><span class="lineCov"> 112099 : info_set(&state->infoarr, blockcur, info_make(now, 0, 0, 1));</span>
|
||||
<span class="lineNum"> 1213 </span><span class="lineCov"> 112174 : info_set(&state->infoarr, blockcur, info_make(now, 0, 0, 1));</span>
|
||||
<span class="lineNum"> 1214 </span> : }
|
||||
<span class="lineNum"> 1215 </span> : }
|
||||
<span class="lineNum"> 1216 </span> :
|
||||
<span class="lineNum"> 1217 </span> : /* if a silent (even if corrected) or input/output error was found */
|
||||
<span class="lineNum"> 1218 </span> : /* mark the block as bad to have check/fix to handle it */
|
||||
<span class="lineNum"> 1219 </span> : /* because our correction is in memory only and not yet written */
|
||||
<span class="lineNum"> 1220 </span><span class="lineCov"> 114729 : if (silent_error_on_this_block || io_error_on_this_block) {</span>
|
||||
<span class="lineNum"> 1220 </span><span class="lineCov"> 114785 : if (silent_error_on_this_block || io_error_on_this_block) {</span>
|
||||
<span class="lineNum"> 1221 </span> : /* set the error status keeping the other info */
|
||||
<span class="lineNum"> 1222 </span><span class="lineCov"> 852 : info_set(&state->infoarr, blockcur, info_set_bad(info));</span>
|
||||
<span class="lineNum"> 1223 </span> : }
|
||||
|
|
@ -1288,27 +1288,27 @@
|
|||
<span class="lineNum"> 1226 </span> : /* Note that the calls to io_parity_write() are mandatory */
|
||||
<span class="lineNum"> 1227 </span> : /* even if the parity doesn't need to be updated */
|
||||
<span class="lineNum"> 1228 </span> : /* This because we want to keep track of the time usage */
|
||||
<span class="lineNum"> 1229 </span><span class="lineCov"> 114729 : state_usage_misc(state);</span>
|
||||
<span class="lineNum"> 1229 </span><span class="lineCov"> 114785 : state_usage_misc(state);</span>
|
||||
<span class="lineNum"> 1230 </span> :
|
||||
<span class="lineNum"> 1231 </span> : /* write start */
|
||||
<span class="lineNum"> 1232 </span><span class="lineCov"> 114729 : io_write_preset(&io, blockcur, !parity_going_to_be_updated);</span>
|
||||
<span class="lineNum"> 1232 </span><span class="lineCov"> 114785 : io_write_preset(&io, blockcur, !parity_going_to_be_updated);</span>
|
||||
<span class="lineNum"> 1233 </span> :
|
||||
<span class="lineNum"> 1234 </span> : /* write the parity */
|
||||
<span class="lineNum"> 1235 </span><span class="lineCov"> 672998 : for (l = 0; l < state->level; ++l) {</span>
|
||||
<span class="lineNum"> 1235 </span><span class="lineCov"> 673390 : for (l = 0; l < state->level; ++l) {</span>
|
||||
<span class="lineNum"> 1236 </span> : unsigned levcur;
|
||||
<span class="lineNum"> 1237 </span> :
|
||||
<span class="lineNum"> 1238 </span><span class="lineCov"> 558269 : io_parity_write(&io, &levcur, waiting_map, &waiting_mac);</span>
|
||||
<span class="lineNum"> 1238 </span><span class="lineCov"> 558605 : io_parity_write(&io, &levcur, waiting_map, &waiting_mac);</span>
|
||||
<span class="lineNum"> 1239 </span> :
|
||||
<span class="lineNum"> 1240 </span> : /* until now is parity */
|
||||
<span class="lineNum"> 1241 </span><span class="lineCov"> 558269 : state_usage_parity(state, waiting_map, waiting_mac);</span>
|
||||
<span class="lineNum"> 1241 </span><span class="lineCov"> 558605 : state_usage_parity(state, waiting_map, waiting_mac);</span>
|
||||
<span class="lineNum"> 1242 </span> : }
|
||||
<span class="lineNum"> 1243 </span> :
|
||||
<span class="lineNum"> 1244 </span> : /* write finished */
|
||||
<span class="lineNum"> 1245 </span><span class="lineCov"> 114729 : io_write_next(&io, blockcur, !parity_going_to_be_updated, writer_error);</span>
|
||||
<span class="lineNum"> 1245 </span><span class="lineCov"> 114785 : io_write_next(&io, blockcur, !parity_going_to_be_updated, writer_error);</span>
|
||||
<span class="lineNum"> 1246 </span> :
|
||||
<span class="lineNum"> 1247 </span> : /* handle errors reported */
|
||||
<span class="lineNum"> 1248 </span><span class="lineCov"> 573645 : for (j = 0; j < IO_WRITER_ERROR_MAX; ++j) {</span>
|
||||
<span class="lineNum"> 1249 </span><span class="lineCov"> 458916 : if (writer_error[j]) {</span>
|
||||
<span class="lineNum"> 1248 </span><span class="lineCov"> 573925 : for (j = 0; j < IO_WRITER_ERROR_MAX; ++j) {</span>
|
||||
<span class="lineNum"> 1249 </span><span class="lineCov"> 459140 : if (writer_error[j]) {</span>
|
||||
<span class="lineNum"> 1250 </span><span class="lineNoCov"> 0 : switch (j + IO_WRITER_ERROR_BASE) {</span>
|
||||
<span class="lineNum"> 1251 </span> : case TASK_STATE_IOERROR_CONTINUE :
|
||||
<span class="lineNum"> 1252 </span><span class="lineNoCov"> 0 : ++io_error;</span>
|
||||
|
|
@ -1338,24 +1338,24 @@
|
|||
<span class="lineNum"> 1276 </span> : }
|
||||
<span class="lineNum"> 1277 </span> :
|
||||
<span class="lineNum"> 1278 </span> : /* mark the state as needing write */
|
||||
<span class="lineNum"> 1279 </span><span class="lineCov"> 114729 : state->need_write = 1;</span>
|
||||
<span class="lineNum"> 1279 </span><span class="lineCov"> 114785 : state->need_write = 1;</span>
|
||||
<span class="lineNum"> 1280 </span> :
|
||||
<span class="lineNum"> 1281 </span> : /* count the number of processed block */
|
||||
<span class="lineNum"> 1282 </span><span class="lineCov"> 114729 : ++countpos;</span>
|
||||
<span class="lineNum"> 1282 </span><span class="lineCov"> 114785 : ++countpos;</span>
|
||||
<span class="lineNum"> 1283 </span> :
|
||||
<span class="lineNum"> 1284 </span> : /* progress */
|
||||
<span class="lineNum"> 1285 </span><span class="lineCov"> 114729 : if (state_progress(state, &io, blockcur, countpos, countmax, countsize)) {</span>
|
||||
<span class="lineNum"> 1285 </span><span class="lineCov"> 114785 : if (state_progress(state, &io, blockcur, countpos, countmax, countsize)) {</span>
|
||||
<span class="lineNum"> 1286 </span> : /* LCOV_EXCL_START */
|
||||
<span class="lineNum"> 1287 </span> : break;
|
||||
<span class="lineNum"> 1288 </span> : /* LCOV_EXCL_STOP */
|
||||
<span class="lineNum"> 1289 </span> : }
|
||||
<span class="lineNum"> 1290 </span> :
|
||||
<span class="lineNum"> 1291 </span> : /* autosave */
|
||||
<span class="lineNum"> 1292 </span><span class="lineCov"> 114729 : if ((state->autosave != 0</span>
|
||||
<span class="lineNum"> 1292 </span><span class="lineCov"> 114785 : if ((state->autosave != 0</span>
|
||||
<span class="lineNum"> 1293 </span><span class="lineCov"> 26021 : && autosavedone >= autosavelimit /* if we have reached the limit */</span>
|
||||
<span class="lineNum"> 1294 </span><span class="lineNoCov"> 0 : && autosavemissing >= autosavelimit) /* if we have at least a full step to do */</span>
|
||||
<span class="lineNum"> 1295 </span> : /* or if we have a forced autosave at the specified block */
|
||||
<span class="lineNum"> 1296 </span><span class="lineCov"> 114729 : || (state->opt.force_autosave_at != 0 && state->opt.force_autosave_at == blockcur)</span>
|
||||
<span class="lineNum"> 1296 </span><span class="lineCov"> 114785 : || (state->opt.force_autosave_at != 0 && state->opt.force_autosave_at == blockcur)</span>
|
||||
<span class="lineNum"> 1297 </span> : ) {
|
||||
<span class="lineNum"> 1298 </span><span class="lineCov"> 1 : autosavedone = 0; /* restart the counter */</span>
|
||||
<span class="lineNum"> 1299 </span> :
|
||||
|
|
@ -1390,7 +1390,7 @@
|
|||
<span class="lineNum"> 1328 </span> : /* drop until now */
|
||||
<span class="lineNum"> 1329 </span><span class="lineCov"> 1 : state_usage_waste(state);</span>
|
||||
<span class="lineNum"> 1330 </span> : }
|
||||
<span class="lineNum"> 1331 </span><span class="lineCov"> 114729 : }</span>
|
||||
<span class="lineNum"> 1331 </span><span class="lineCov"> 114785 : }</span>
|
||||
<span class="lineNum"> 1332 </span> :
|
||||
<span class="lineNum"> 1333 </span> : end:
|
||||
<span class="lineNum"> 1334 </span><span class="lineCov"> 83 : state_progress_end(state, countpos, countmax, countsize);</span>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">1</td>
|
||||
|
|
|
|||
|
|
@ -31,18 +31,18 @@
|
|||
<td class="headerValue">lcov.info</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Lines:</td>
|
||||
<td class="headerCovTableEntry">320</td>
|
||||
<td class="headerCovTableEntry">442</td>
|
||||
<td class="headerCovTableEntryLo">72.4 %</td>
|
||||
<td class="headerCovTableEntry">314</td>
|
||||
<td class="headerCovTableEntry">447</td>
|
||||
<td class="headerCovTableEntryLo">70.2 %</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="headerItem">Date:</td>
|
||||
<td class="headerValue">2016-11-21</td>
|
||||
<td class="headerValue">2017-05-13</td>
|
||||
<td></td>
|
||||
<td class="headerItem">Functions:</td>
|
||||
<td class="headerCovTableEntry">28</td>
|
||||
<td class="headerCovTableEntry">27</td>
|
||||
<td class="headerCovTableEntry">31</td>
|
||||
<td class="headerCovTableEntryHi">90.3 %</td>
|
||||
<td class="headerCovTableEntryMed">87.1 %</td>
|
||||
</tr>
|
||||
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
|
||||
</table>
|
||||
|
|
@ -60,91 +60,91 @@
|
|||
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#730">tick</a></td>
|
||||
<td class="coverFnHi">3817537</td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#749">tick</a></td>
|
||||
<td class="coverFnHi">3819097</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#29">open_noatime</a></td>
|
||||
<td class="coverFnHi">1719437</td>
|
||||
<td class="coverFnHi">1718110</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#532">filephy</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#551">filephy</a></td>
|
||||
<td class="coverFnHi">11432</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#494">devuuid</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#513">devuuid</a></td>
|
||||
<td class="coverFnHi">5630</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#395">devuuid_dev</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#414">devuuid_dev</a></td>
|
||||
<td class="coverFnHi">5626</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#626">fsinfo</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#645">fsinfo</a></td>
|
||||
<td class="coverFnHi">5483</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#772">randomize</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#791">randomize</a></td>
|
||||
<td class="coverFnHi">282</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1416">os_init</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1435">os_init</a></td>
|
||||
<td class="coverFnHi">271</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1431">os_done</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1450">os_done</a></td>
|
||||
<td class="coverFnHi">248</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#228">tagread</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#247">tagread</a></td>
|
||||
<td class="coverFnHi">191</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#372">devresolve</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#349">devresolve_sys</a></td>
|
||||
<td class="coverFnHi">191</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#330">devresolve_sys</a></td>
|
||||
<td class="coverFnHi">191</td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#391">devresolve</a></td>
|
||||
<td class="coverFnHi">190</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#798">devread</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#817">devread</a></td>
|
||||
<td class="coverFnHi">144</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#866">devtree</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#885">devtree</a></td>
|
||||
<td class="coverFnHi">130</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#762">tick_ms</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#781">tick_ms</a></td>
|
||||
<td class="coverFnHi">65</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1264">thread_smart</a></td>
|
||||
<td class="coverFnHi">43</td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1283">thread_smart</a></td>
|
||||
<td class="coverFnHi">42</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1034">devsmart</a></td>
|
||||
<td class="coverFnHi">43</td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1053">devsmart</a></td>
|
||||
<td class="coverFnHi">42</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1175">devup</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1194">devup</a></td>
|
||||
<td class="coverFnHi">30</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1205">thread_spinup</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1224">thread_spinup</a></td>
|
||||
<td class="coverFnHi">30</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1507">direct_size</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1526">direct_size</a></td>
|
||||
<td class="coverFnHi">7</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1238">thread_spindown</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1257">thread_spindown</a></td>
|
||||
<td class="coverFnHi">5</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1102">devdown</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1121">devdown</a></td>
|
||||
<td class="coverFnHi">5</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -152,33 +152,33 @@
|
|||
<td class="coverFnHi">4</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#190">devdereference</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#209">devdereference</a></td>
|
||||
<td class="coverFnHi">4</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1322">devquery</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1341">devquery</a></td>
|
||||
<td class="coverFnHi">4</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1282">device_thread</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1301">device_thread</a></td>
|
||||
<td class="coverFnHi">3</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#955">devscan</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#974">devscan</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1500">os_clear</a></td>
|
||||
<td class="coverFnHi">1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#464">devuuid_blkid</a></td>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#483">devuuid_blkid</a></td>
|
||||
<td class="coverFnLo">0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#43">dirent_hidden</a></td>
|
||||
<td class="coverFnLo">0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#1519">os_clear</a></td>
|
||||
<td class="coverFnLo">0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="coverFn"><a href="unix.c.gcov.html#48">stat_desc</a></td>
|
||||
<td class="coverFnLo">0</td>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue