aboutsummaryrefslogtreecommitdiff
path: root/lib/sqfs/block_processor_parallel.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqfs/block_processor_parallel.c')
-rw-r--r--lib/sqfs/block_processor_parallel.c63
1 files changed, 33 insertions, 30 deletions
diff --git a/lib/sqfs/block_processor_parallel.c b/lib/sqfs/block_processor_parallel.c
index a4e0f6e..6fca018 100644
--- a/lib/sqfs/block_processor_parallel.c
+++ b/lib/sqfs/block_processor_parallel.c
@@ -17,22 +17,22 @@
#define MAX_BACKLOG_FACTOR (10)
typedef struct {
- block_processor_t *shared;
+ sqfs_block_processor_t *shared;
compressor_t *cmp;
pthread_t thread;
uint8_t scratch[];
} compress_worker_t;
-struct block_processor_t {
+struct sqfs_block_processor_t {
pthread_mutex_t mtx;
pthread_cond_t queue_cond;
pthread_cond_t done_cond;
/* needs rw access by worker and main thread */
- block_t *queue;
- block_t *queue_last;
+ sqfs_block_t *queue;
+ sqfs_block_t *queue_last;
- block_t *done;
+ sqfs_block_t *done;
bool terminate;
size_t backlog;
@@ -41,7 +41,7 @@ struct block_processor_t {
uint32_t dequeue_id;
unsigned int num_workers;
- block_cb cb;
+ sqfs_block_cb cb;
void *user;
int status;
@@ -51,9 +51,10 @@ struct block_processor_t {
compress_worker_t *workers[];
};
-static void store_completed_block(block_processor_t *shared, block_t *blk)
+static void store_completed_block(sqfs_block_processor_t *shared,
+ sqfs_block_t *blk)
{
- block_t *it = shared->done, *prev = NULL;
+ sqfs_block_t *it = shared->done, *prev = NULL;
while (it != NULL) {
if (it->sequence_number >= blk->sequence_number)
@@ -74,8 +75,8 @@ static void store_completed_block(block_processor_t *shared, block_t *blk)
static void *worker_proc(void *arg)
{
compress_worker_t *worker = arg;
- block_processor_t *shared = worker->shared;
- block_t *blk = NULL;
+ sqfs_block_processor_t *shared = worker->shared;
+ sqfs_block_t *blk = NULL;
for (;;) {
pthread_mutex_lock(&shared->mtx);
@@ -103,21 +104,21 @@ static void *worker_proc(void *arg)
shared->queue_last = NULL;
pthread_mutex_unlock(&shared->mtx);
- if (process_block(blk, worker->cmp, worker->scratch,
- shared->max_block_size)) {
- blk->flags |= BLK_COMPRESS_ERROR;
+ if (sqfs_block_process(blk, worker->cmp, worker->scratch,
+ shared->max_block_size)) {
+ blk->flags |= SQFS_BLK_COMPRESS_ERROR;
}
}
return NULL;
}
-block_processor_t *block_processor_create(size_t max_block_size,
- compressor_t *cmp,
- unsigned int num_workers,
- void *user,
- block_cb callback)
+sqfs_block_processor_t *sqfs_block_processor_create(size_t max_block_size,
+ compressor_t *cmp,
+ unsigned int num_workers,
+ void *user,
+ sqfs_block_cb callback)
{
- block_processor_t *proc;
+ sqfs_block_processor_t *proc;
unsigned int i;
int ret;
@@ -210,10 +211,10 @@ fail_free:
return NULL;
}
-void block_processor_destroy(block_processor_t *proc)
+void sqfs_block_processor_destroy(sqfs_block_processor_t *proc)
{
+ sqfs_block_t *blk;
unsigned int i;
- block_t *blk;
pthread_mutex_lock(&proc->mtx);
proc->terminate = true;
@@ -246,15 +247,16 @@ void block_processor_destroy(block_processor_t *proc)
free(proc);
}
-static int process_completed_blocks(block_processor_t *proc, block_t *queue)
+static int process_completed_blocks(sqfs_block_processor_t *proc,
+ sqfs_block_t *queue)
{
- block_t *it;
+ sqfs_block_t *it;
while (queue != NULL) {
it = queue;
queue = queue->next;
- if (it->flags & BLK_COMPRESS_ERROR) {
+ if (it->flags & SQFS_BLK_COMPRESS_ERROR) {
proc->status = -1;
} else {
if (proc->cb(proc->user, it))
@@ -267,16 +269,17 @@ static int process_completed_blocks(block_processor_t *proc, block_t *queue)
return proc->status;
}
-int block_processor_enqueue(block_processor_t *proc, block_t *block)
+int sqfs_block_processor_enqueue(sqfs_block_processor_t *proc,
+ sqfs_block_t *block)
{
- block_t *queue = NULL, *it, *prev;
+ sqfs_block_t *queue = NULL, *it, *prev;
block->sequence_number = proc->enqueue_id++;
block->next = NULL;
pthread_mutex_lock(&proc->mtx);
- if ((block->flags & BLK_DONT_COMPRESS) &&
- (block->flags & BLK_DONT_CHECKSUM)) {
+ if ((block->flags & SQFS_BLK_DONT_COMPRESS) &&
+ (block->flags & SQFS_BLK_DONT_CHECKSUM)) {
store_completed_block(proc, block);
} else {
while (proc->backlog > proc->num_workers * MAX_BACKLOG_FACTOR)
@@ -313,9 +316,9 @@ int block_processor_enqueue(block_processor_t *proc, block_t *block)
return process_completed_blocks(proc, queue);
}
-int block_processor_finish(block_processor_t *proc)
+int sqfs_block_processor_finish(sqfs_block_processor_t *proc)
{
- block_t *queue, *it;
+ sqfs_block_t *queue, *it;
pthread_mutex_lock(&proc->mtx);
while (proc->backlog > 0)