Replace assertions with more informative messages

This commit is contained in:
Andrea Mazzoleni 2015-11-18 22:10:50 +01:00
parent c065ad22d5
commit 9bd0f18439
2 changed files with 26 additions and 8 deletions

View file

@ -607,8 +607,18 @@ struct snapraid_chunk* chunk_alloc(block_off_t parity_pos, struct snapraid_file*
{
struct snapraid_chunk* chunk;
assert(count != 0);
assert(file_pos + count <= file->blockmax);
if (count == 0) {
/* LCOV_EXCL_START */
log_fatal("Internal inconsistency when allocating empty chunk for file '%s' at position '%u/%u'\n", file->sub, file_pos, file->blockmax);
exit(EXIT_FAILURE);
/* LCOV_EXCL_STOP */
}
if (file_pos + count > file->blockmax) {
/* LCOV_EXCL_START */
log_fatal("Internal inconsistency when allocating overflowing chunk for file '%s' at position '%u:%u/%u'\n", file->sub, file_pos, count, file->blockmax);
exit(EXIT_FAILURE);
/* LCOV_EXCL_STOP */
}
chunk = malloc_nofail(sizeof(struct snapraid_chunk));
chunk->parity_pos = parity_pos;
@ -1272,6 +1282,19 @@ void fs_deallocate(struct snapraid_disk* disk, block_off_t parity_pos)
disk->fs_last = second_chunk;
}
struct snapraid_block* fs_file2block_get(struct snapraid_file* file, block_off_t file_pos)
{
if (file_pos >= file->blockmax) {
/* LCOV_EXCL_START */
log_fatal("Internal inconsistency when dereferencing file '%s' at position '%u/%u'\n", file->sub, file_pos, file->blockmax);
abort();
exit(EXIT_FAILURE);
/* LCOV_EXCL_STOP */
}
return &file->blockvec[file_pos];
}
struct snapraid_block* fs_par2block_get_ts(struct snapraid_disk* disk, struct snapraid_chunk** fs_last, block_off_t parity_pos)
{
struct snapraid_file* file;

View file

@ -915,12 +915,7 @@ void fs_deallocate(struct snapraid_disk* disk, block_off_t pos);
/**
* Get the block from the file position.
*/
static inline struct snapraid_block* fs_file2block_get(struct snapraid_file* file, block_off_t file_pos)
{
assert(file_pos < file->blockmax);
return &file->blockvec[file_pos];
}
struct snapraid_block* fs_file2block_get(struct snapraid_file* file, block_off_t file_pos);
/**
* Like fs_file2par_get() but thread-safe.