aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/kern/subr_disk.c43
-rw-r--r--sys/kern/vfs_bio.c25
-rw-r--r--sys/sys/bio.h21
3 files changed, 46 insertions, 43 deletions
diff --git a/sys/kern/subr_disk.c b/sys/kern/subr_disk.c
index 375f75105ab1..3e09ccabd4fc 100644
--- a/sys/kern/subr_disk.c
+++ b/sys/kern/subr_disk.c
@@ -62,6 +62,49 @@ disk_err(struct bio *bp, const char *what, int blkdone, int nl)
}
/*
+ * BIO queue implementation
+ */
+
+void
+bioq_init(struct bio_queue_head *head)
+{
+ TAILQ_INIT(&head->queue);
+ head->last_pblkno = 0;
+ head->insert_point = NULL;
+ head->switch_point = NULL;
+}
+
+void
+bioq_remove(struct bio_queue_head *head, struct bio *bp)
+{
+ if (bp == head->switch_point)
+ head->switch_point = TAILQ_NEXT(bp, bio_queue);
+ if (bp == head->insert_point) {
+ head->insert_point = TAILQ_PREV(bp, bio_queue, bio_queue);
+ if (head->insert_point == NULL)
+ head->last_pblkno = 0;
+ } else if (bp == TAILQ_FIRST(&head->queue))
+ head->last_pblkno = bp->bio_pblkno;
+ TAILQ_REMOVE(&head->queue, bp, bio_queue);
+ if (TAILQ_FIRST(&head->queue) == head->switch_point)
+ head->switch_point = NULL;
+}
+void
+bioq_insert_tail(struct bio_queue_head *head, struct bio *bp)
+{
+
+ TAILQ_INSERT_TAIL(&head->queue, bp, bio_queue);
+}
+
+struct bio *
+bioq_first(struct bio_queue_head *head)
+{
+
+ return (TAILQ_FIRST(&head->queue));
+}
+
+
+/*
* Seek sort for disks.
*
* The buf_queue keep two queues, sorted in ascending block order. The first
diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c
index 82db7f480ff6..489512cdf2f0 100644
--- a/sys/kern/vfs_bio.c
+++ b/sys/kern/vfs_bio.c
@@ -2986,31 +2986,6 @@ biofinish(struct bio *bp, struct devstat *stat, int error)
biodone(bp);
}
-void
-bioq_init(struct bio_queue_head *head)
-{
- TAILQ_INIT(&head->queue);
- head->last_pblkno = 0;
- head->insert_point = NULL;
- head->switch_point = NULL;
-}
-
-void
-bioq_remove(struct bio_queue_head *head, struct bio *bp)
-{
- if (bp == head->switch_point)
- head->switch_point = TAILQ_NEXT(bp, bio_queue);
- if (bp == head->insert_point) {
- head->insert_point = TAILQ_PREV(bp, bio_queue, bio_queue);
- if (head->insert_point == NULL)
- head->last_pblkno = 0;
- } else if (bp == TAILQ_FIRST(&head->queue))
- head->last_pblkno = bp->bio_pblkno;
- TAILQ_REMOVE(&head->queue, bp, bio_queue);
- if (TAILQ_FIRST(&head->queue) == head->switch_point)
- head->switch_point = NULL;
-}
-
/*
* bufwait:
*
diff --git a/sys/sys/bio.h b/sys/sys/bio.h
index a923a783845d..1628e61bae33 100644
--- a/sys/sys/bio.h
+++ b/sys/sys/bio.h
@@ -114,30 +114,15 @@ struct bio_queue_head {
int busy;
};
-static __inline void bioq_insert_tail(struct bio_queue_head *head,
- struct bio *bp);
-static __inline struct bio *bioq_first(struct bio_queue_head *head);
-
-static __inline void
-bioq_insert_tail(struct bio_queue_head *head, struct bio *bp)
-{
-
- TAILQ_INSERT_TAIL(&head->queue, bp, bio_queue);
-}
-
-static __inline struct bio *
-bioq_first(struct bio_queue_head *head)
-{
-
- return (TAILQ_FIRST(&head->queue));
-}
-
void biodone(struct bio *bp);
void biofinish(struct bio *bp, struct devstat *stat, int error);
int biowait(struct bio *bp, const char *wchan);
+
void bioq_disksort(struct bio_queue_head *ap, struct bio *bp);
#define bioqdisksort(foo, bar) bioq_disksort(foo, bar)
+struct bio *bioq_first(struct bio_queue_head *head);
void bioq_init(struct bio_queue_head *head);
+void bioq_insert_tail(struct bio_queue_head *head, struct bio *bp);
void bioq_remove(struct bio_queue_head *head, struct bio *bp);
void bio_taskqueue(struct bio *bp, bio_task_t *fund, void *arg);