summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2003-04-01 12:49:40 +0000
committerphk <phk@FreeBSD.org>2003-04-01 12:49:40 +0000
commit78929984b35f18549d709e695fda2db9701ed3dd (patch)
treeabbe0472832558e42a4cb01c0f351df073f9ce2f
parent6b0e3863fff577df842abcb6ada5392bb4c889a7 (diff)
downloadFreeBSD-src-78929984b35f18549d709e695fda2db9701ed3dd.zip
FreeBSD-src-78929984b35f18549d709e695fda2db9701ed3dd.tar.gz
Introduce bioq_flush() function.
-rw-r--r--sys/kern/subr_disk.c15
-rw-r--r--sys/sys/bio.h1
2 files changed, 16 insertions, 0 deletions
diff --git a/sys/kern/subr_disk.c b/sys/kern/subr_disk.c
index 35c2295..475b4d8 100644
--- a/sys/kern/subr_disk.c
+++ b/sys/kern/subr_disk.c
@@ -89,6 +89,21 @@ bioq_remove(struct bio_queue_head *head, struct bio *bp)
if (TAILQ_FIRST(&head->queue) == head->switch_point)
head->switch_point = NULL;
}
+
+void
+bioq_flush(struct bio_queue_head *head, struct devstat *stp, int error)
+{
+ struct bio *bp;
+
+ for (;;) {
+ bp = bioq_first(head);
+ if (bp == NULL)
+ break;
+ bioq_remove(head, bp);
+ biofinish(bp, stp, ENXIO);
+ }
+}
+
void
bioq_insert_tail(struct bio_queue_head *head, struct bio *bp)
{
diff --git a/sys/sys/bio.h b/sys/sys/bio.h
index c7e81ea..89b68f5 100644
--- a/sys/sys/bio.h
+++ b/sys/sys/bio.h
@@ -120,6 +120,7 @@ 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_flush(struct bio_queue_head *head, struct devstat *stp, int error);
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);
OpenPOWER on IntegriCloud