From 3a83fdc459a620d5ce0360bcf5fa071118d5430f Mon Sep 17 00:00:00 2001 From: Shehjar Tikoo Date: Mon, 16 Mar 2009 07:01:33 -0700 Subject: IO-threads Cleanup: Change request queue into a struct list_head This patch changes the per-thread request queue from a custom circular linked list, into the standard list.h list which is easier to understand and has a cleaner interface. Signed-off-by: Anand V. Avati --- xlators/performance/io-threads/src/io-threads.c | 31 ++++++++++--------------- xlators/performance/io-threads/src/io-threads.h | 13 +++++++---- 2 files changed, 20 insertions(+), 24 deletions(-) (limited to 'xlators/performance/io-threads') diff --git a/xlators/performance/io-threads/src/io-threads.c b/xlators/performance/io-threads/src/io-threads.c index 3d172f9b4..ce42a9834 100644 --- a/xlators/performance/io-threads/src/io-threads.c +++ b/xlators/performance/io-threads/src/io-threads.c @@ -1020,19 +1020,15 @@ static void iot_queue (iot_worker_t *worker, call_stub_t *stub) { - iot_queue_t *queue; + iot_request_t *req = NULL; - queue = CALLOC (1, sizeof (*queue)); - ERR_ABORT (queue); - queue->stub = stub; + req = CALLOC (1, sizeof (iot_request_t)); + ERR_ABORT (req); + req->stub = stub; pthread_mutex_lock (&worker->qlock); { - queue->next = &worker->queue; - queue->prev = worker->queue.prev; - - queue->next->prev = queue; - queue->prev->next = queue; + list_add_tail (&req->list, &worker->rqlist); /* dq_cond */ worker->queue_size++; @@ -1047,25 +1043,24 @@ static call_stub_t * iot_dequeue (iot_worker_t *worker) { call_stub_t *stub = NULL; - iot_queue_t *queue = NULL; + iot_request_t *req = NULL; pthread_mutex_lock (&worker->qlock); { while (!worker->queue_size) pthread_cond_wait (&worker->dq_cond, &worker->qlock); - queue = worker->queue.next; - queue->next->prev = queue->prev; - queue->prev->next = queue->next; - - stub = queue->stub; + list_for_each_entry (req, &worker->rqlist, list) + break; + list_del (&req->list); + stub = req->stub; worker->queue_size--; worker->dq++; } pthread_mutex_unlock (&worker->qlock); - FREE (queue); + FREE (req); return stub; } @@ -1101,9 +1096,7 @@ workers_init (iot_conf_t *conf) worker->next->prev = worker; worker->prev->next = worker; - worker->queue.next = &worker->queue; - worker->queue.prev = &worker->queue; - + INIT_LIST_HEAD (&worker->rqlist); pthread_mutex_init (&worker->qlock, NULL); pthread_cond_init (&worker->dq_cond, NULL); worker->conf = conf; diff --git a/xlators/performance/io-threads/src/io-threads.h b/xlators/performance/io-threads/src/io-threads.h index 7606d0625..73a76fa8f 100644 --- a/xlators/performance/io-threads/src/io-threads.h +++ b/xlators/performance/io-threads/src/io-threads.h @@ -32,13 +32,14 @@ #include "dict.h" #include "xlator.h" #include "common-utils.h" +#include "list.h" #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)>(b)?(a):(b)) struct iot_conf; struct iot_worker; -struct iot_queue; +struct iot_request; struct iot_local; struct iot_file; @@ -47,14 +48,16 @@ struct iot_local { size_t frame_size; }; -struct iot_queue { - struct iot_queue *next, *prev; +struct iot_request { + struct list_head list; /* Attaches this request to the list of + requests. + */ call_stub_t *stub; }; struct iot_worker { struct iot_worker *next, *prev; - struct iot_queue queue; + struct list_head rqlist; /* List of requests assigned to me. */ struct iot_conf *conf; int64_t q,dq; pthread_cond_t dq_cond; @@ -85,6 +88,6 @@ typedef struct iot_file iot_file_t; typedef struct iot_conf iot_conf_t; typedef struct iot_local iot_local_t; typedef struct iot_worker iot_worker_t; -typedef struct iot_queue iot_queue_t; +typedef struct iot_request iot_request_t; #endif /* __IOT_H */ -- cgit