summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_bufq.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_bufq.c')
-rw-r--r--sys/kern/kern_bufq.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/kern/kern_bufq.c b/sys/kern/kern_bufq.c
index 402ca4ec473..ac41ca803a8 100644
--- a/sys/kern/kern_bufq.c
+++ b/sys/kern/kern_bufq.c
@@ -143,6 +143,7 @@ bufq_disksort_requeue(struct bufq *bq, struct buf *bp)
mtx_enter(&bq->bufq_mtx);
bp->b_actf = bufq->b_actf;
+ bufq->b_actf = bp;
if (bp->b_actf == NULL)
bufq->b_actb = &bp->b_actf;
mtx_leave(&bq->bufq_mtx);
@@ -156,12 +157,12 @@ bufq_disksort_dequeue(struct bufq *bq, int peeking)
mtx_enter(&bq->bufq_mtx);
bufq = (struct buf *)bq->bufq_data;
bp = bufq->b_actf;
- if (bp == NULL) {
- mtx_leave(&bq->bufq_mtx);
- return (NULL);
+ if (!peeking) {
+ if (bp != NULL)
+ bufq->b_actf = bp->b_actf;
+ if (bufq->b_actf == NULL)
+ bufq->b_actb = &bufq->b_actf;
}
- if (!peeking)
- bufq->b_actf = bp->b_actf;
mtx_leave(&bq->bufq_mtx);
DNPRINTF(BUFQDBG_DISKSORT, "%s: %s buf %p from bufq %p\n", __func__,