From d6804d3a6ac2b6bb750bb27c136a96eb6dfb3202 Mon Sep 17 00:00:00 2001
From: Christoph Hellwig <hch@cloudius-systems.com>
Date: Wed, 22 May 2013 17:06:56 +0200
Subject: [PATCH] convert bio list to <sys/queue.h>

---
 drivers/ramdisk.c    | 13 ++++++-------
 fs/vfs/kern_physio.c |  1 -
 include/osv/bio.h    |  4 ++--
 3 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/drivers/ramdisk.c b/drivers/ramdisk.c
index c6153d5f5..f3e64d390 100644
--- a/drivers/ramdisk.c
+++ b/drivers/ramdisk.c
@@ -39,7 +39,7 @@
 struct ramdisk_softc {
 	char		*addr;		/* base address of image */
 	size_t		size;		/* image size */
-	struct list_head bio_list;
+	TAILQ_HEAD(, bio) bio_list;
 	pthread_mutex_t	bio_mutex;
 	pthread_cond_t	bio_wait;
 };
@@ -94,7 +94,7 @@ ramdisk_strategy(struct bio *bio)
 	struct ramdisk_softc *sc = bio->bio_dev->private_data;
 
 	pthread_mutex_lock(&sc->bio_mutex);
-	list_insert(sc->bio_list.prev, &bio->bio_list);
+	TAILQ_INSERT_TAIL(&sc->bio_list, bio, bio_list);
 	pthread_cond_signal(&sc->bio_wait);
 	pthread_mutex_unlock(&sc->bio_mutex);
 }
@@ -121,11 +121,10 @@ static void *ramdisk_thread_fn(void *arg)
 
 	pthread_mutex_lock(&sc->bio_mutex);
 	for (;;) {
-		while (!list_empty(&sc->bio_list)) {
-			struct list_head *l = list_first(&sc->bio_list);
-			struct bio *bio = list_entry(l, struct bio, bio_list);
+		while (!TAILQ_EMPTY(&sc->bio_list)) {
+			struct bio *bio = TAILQ_FIRST(&sc->bio_list);
 
-			list_remove(&bio->bio_list);
+			TAILQ_REMOVE(&sc->bio_list, bio, bio_list);
 			ramdisk_io(sc, bio);
 		}
 		pthread_cond_wait(&sc->bio_wait, &sc->bio_mutex);
@@ -147,7 +146,7 @@ ramdisk_init(void)
 	sc->size = 4 * 1024 * 1024;
 	sc->addr = malloc(sc->size);
 
-	list_init(&sc->bio_list);
+	TAILQ_INIT(&sc->bio_list);
 	pthread_mutex_init(&sc->bio_mutex, NULL);
 	pthread_cond_init(&sc->bio_wait, NULL);
 
diff --git a/fs/vfs/kern_physio.c b/fs/vfs/kern_physio.c
index ad824d721..74e9bb886 100644
--- a/fs/vfs/kern_physio.c
+++ b/fs/vfs/kern_physio.c
@@ -14,7 +14,6 @@ alloc_bio(void)
 		return NULL;
 	memset(bio, 0, sizeof(*bio));
 
-	list_init(&bio->bio_list);
 	pthread_mutex_init(&bio->bio_mutex, NULL);
 	pthread_cond_init(&bio->bio_wait, NULL);
 	return bio;
diff --git a/include/osv/bio.h b/include/osv/bio.h
index 183746d6f..806f447db 100644
--- a/include/osv/bio.h
+++ b/include/osv/bio.h
@@ -42,7 +42,7 @@
 #include <stdint.h>
 #include <pthread.h>
 #include <stdbool.h>
-#include <osv/list.h>
+#include <bsd/sys/sys/queue.h>
 
 __BEGIN_DECLS
 
@@ -85,7 +85,7 @@ struct bio {
 	void	(*bio_done)(struct bio *);
 
 
-	struct list_head	bio_list;
+	TAILQ_ENTRY(bio) bio_list;
 
 	/*
 	 * I/O synchronization, probably should move out of the struct to
-- 
GitLab