diff options
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_bufq.c | 154 | ||||
-rw-r--r-- | sys/kern/subr_disk.c | 11 |
2 files changed, 2 insertions, 163 deletions
diff --git a/sys/kern/kern_bufq.c b/sys/kern/kern_bufq.c deleted file mode 100644 index 8af3a312f0f..00000000000 --- a/sys/kern/kern_bufq.c +++ /dev/null @@ -1,154 +0,0 @@ -/* $OpenBSD: kern_bufq.c,v 1.2 2009/06/04 19:16:13 thib Exp $ */ - -/* - * Copyright (c) 2008, 2009 Thordur I. Bjornsson <thib@openbsd.org> - * Copyright (c) 2004 Ted Unangst <tedu@openbsd.org> - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#include <sys/pool.h> -#include <sys/proc.h> -#include <sys/buf.h> -#include <sys/errno.h> - -#include <sys/disklabel.h> - -/* plain old disksort. */ -struct buf *bufq_disksort_get(struct bufq *, int); -void bufq_disksort_add(struct bufq *, struct buf *); -int bufq_disksort_init(struct bufq *); - -struct bufq * -bufq_init(int type) -{ - struct bufq *bq; - int error; - - KASSERT(type = BUFQ_DISKSORT); - - bq = malloc(sizeof(*bq), M_DEVBUF, M_NOWAIT|M_ZERO); - if (bq == NULL) - return (NULL); - - /* For now, only plain old disksort. */ - bq->bufq_type = type; - bq->bufq_get = bufq_disksort_get; - bq->bufq_add = bufq_disksort_add; - - error = bufq_disksort_init(bq); - if (error) { - free(bq, M_DEVBUF); - return (NULL); - } - - return (bq); -} - -void -bufq_destroy(struct bufq *bq) -{ - bufq_drain(bq); - - if (bq->bufq_data != NULL) - free(bq->bufq_data, M_DEVBUF); - - free(bq, M_DEVBUF); -} - -void -bufq_drain(struct bufq *bq) -{ - struct buf *bp; - int s; - - s = splbio(); - while ((bp = BUFQ_GET(bq)) != NULL) { - bp->b_error = ENXIO; - bp->b_flags |= B_ERROR; - biodone(bp); - } - splx(s); - -} - -void -bufq_disksort_add(struct bufq *bq, struct buf *bp) -{ - struct buf *bufq; - - splassert(IPL_BIO); - - bufq = (struct buf *)bq->bufq_data; - - disksort(bufq, bp); -} - -struct buf * -bufq_disksort_get(struct bufq *bq, int peeking) -{ - struct buf *bufq, *bp; - - splassert(IPL_BIO); - - bufq = (struct buf *)bq->bufq_data; - bp = bufq->b_actf; - if (bp == NULL) - return (NULL); - if (!peeking) - bufq->b_actf = bp->b_actf; - return (bp); -} - -int -bufq_disksort_init(struct bufq *bq) -{ - int error = 0; - - bq->bufq_data = malloc(sizeof(struct buf), M_DEVBUF, - M_WAITOK|M_ZERO); - - if (bq->bufq_data == NULL) - error = ENOMEM; - - return (error); -} - -#ifdef DDB -#include <machine/db_machdep.h> -#include <ddb/db_interface.h> -#include <ddb/db_output.h> - -void -db_bufq_print(struct bufq *bq, int full, int (*pr)(const char *, ...)) -{ - struct buf *bp, *dp; - - - (*pr)(" type %i\n bufq_add %p bufq_get %p bufq_data %p", - bq->bufq_type, bq->bufq_add, bq->bufq_get, bq->bufq_data); - - if (full) { - printf("bufs on queue:\n"); - bp = (struct buf *)bq->bufq_data; - while ((dp = bp->b_actf) != NULL) { - printf("%p\n", bp); - bp = dp; - } - } -} - -#endif diff --git a/sys/kern/subr_disk.c b/sys/kern/subr_disk.c index d33a152d299..e1dbaa310b6 100644 --- a/sys/kern/subr_disk.c +++ b/sys/kern/subr_disk.c @@ -1,4 +1,4 @@ -/* $OpenBSD: subr_disk.c,v 1.94 2009/06/14 00:09:40 deraadt Exp $ */ +/* $OpenBSD: subr_disk.c,v 1.95 2009/06/17 01:30:30 thib Exp $ */ /* $NetBSD: subr_disk.c,v 1.17 1996/03/16 23:17:08 christos Exp $ */ /* @@ -768,10 +768,6 @@ disk_construct(struct disk *diskp, char *lockname) rw_init(&diskp->dk_lock, "dklk"); mtx_init(&diskp->dk_mtx, IPL_BIO); - diskp->dk_bufq = bufq_init(BUFQ_DEFAULT); - if (diskp->dk_bufq == NULL) - return (1); - diskp->dk_flags |= DKF_CONSTRUCTED; return (0); @@ -785,8 +781,7 @@ disk_attach(struct disk *diskp) { if (!ISSET(diskp->dk_flags, DKF_CONSTRUCTED)) - if (disk_construct(diskp, diskp->dk_name)) - panic("disk_attach: can't construct disk"); + disk_construct(diskp, diskp->dk_name); /* * Allocate and initialize the disklabel structures. Note that @@ -829,8 +824,6 @@ disk_detach(struct disk *diskp) */ free(diskp->dk_label, M_DEVBUF); - bufq_destroy(diskp->dk_bufq); - /* * Remove from the disklist. */ |