version 1.5.4.3, 2009/06/01 17:11:35 |
version 1.5.4.4, 2009/07/09 19:44:34 |
Line 33 __KERNEL_RCSID(0, "$NetBSD$"); |
|
Line 33 __KERNEL_RCSID(0, "$NetBSD$"); |
|
|
|
|
|
#if defined(_KERNEL_OPT) |
#if defined(_KERNEL_OPT) |
#include "opt_quota.h" |
|
#include "opt_compat_netbsd.h" |
#include "opt_compat_netbsd.h" |
#endif |
#endif |
|
|
Line 286 udf_queuebuf_seq(struct udf_strat_args * |
|
Line 285 udf_queuebuf_seq(struct udf_strat_args * |
|
|
|
/* use our own sheduler lists for more complex sheduling */ |
/* use our own sheduler lists for more complex sheduling */ |
mutex_enter(&priv->discstrat_mutex); |
mutex_enter(&priv->discstrat_mutex); |
BUFQ_PUT(priv->queues[queue], nestbuf); |
bufq_put(priv->queues[queue], nestbuf); |
vfs_timestamp(&priv->last_queued[queue]); |
vfs_timestamp(&priv->last_queued[queue]); |
mutex_exit(&priv->discstrat_mutex); |
mutex_exit(&priv->discstrat_mutex); |
|
|
Line 472 udf_doshedule(struct udf_mount *ump) |
|
Line 471 udf_doshedule(struct udf_mount *ump) |
|
int new_queue; |
int new_queue; |
int error; |
int error; |
|
|
buf = BUFQ_GET(priv->queues[priv->cur_queue]); |
buf = bufq_get(priv->queues[priv->cur_queue]); |
if (buf) { |
if (buf) { |
/* transfer from the current queue to the device queue */ |
/* transfer from the current queue to the device queue */ |
mutex_exit(&priv->discstrat_mutex); |
mutex_exit(&priv->discstrat_mutex); |
Line 515 udf_doshedule(struct udf_mount *ump) |
|
Line 514 udf_doshedule(struct udf_mount *ump) |
|
/* check if we can/should switch */ |
/* check if we can/should switch */ |
new_queue = priv->cur_queue; |
new_queue = priv->cur_queue; |
|
|
if (BUFQ_PEEK(priv->queues[UDF_SHED_READING])) |
if (bufq_peek(priv->queues[UDF_SHED_READING])) |
new_queue = UDF_SHED_READING; |
new_queue = UDF_SHED_READING; |
if (BUFQ_PEEK(priv->queues[UDF_SHED_WRITING])) /* only for unmount */ |
if (bufq_peek(priv->queues[UDF_SHED_WRITING])) /* only for unmount */ |
new_queue = UDF_SHED_WRITING; |
new_queue = UDF_SHED_WRITING; |
if (BUFQ_PEEK(priv->queues[UDF_SHED_SEQWRITING])) |
if (bufq_peek(priv->queues[UDF_SHED_SEQWRITING])) |
new_queue = UDF_SHED_SEQWRITING; |
new_queue = UDF_SHED_SEQWRITING; |
if (priv->cur_queue == UDF_SHED_READING) { |
if (priv->cur_queue == UDF_SHED_READING) { |
if (new_queue == UDF_SHED_SEQWRITING) { |
if (new_queue == UDF_SHED_SEQWRITING) { |
Line 558 udf_discstrat_thread(void *arg) |
|
Line 557 udf_discstrat_thread(void *arg) |
|
while (priv->run_thread || !empty) { |
while (priv->run_thread || !empty) { |
/* process the current selected queue */ |
/* process the current selected queue */ |
udf_doshedule(ump); |
udf_doshedule(ump); |
empty = (BUFQ_PEEK(priv->queues[UDF_SHED_READING]) == NULL); |
empty = (bufq_peek(priv->queues[UDF_SHED_READING]) == NULL); |
empty &= (BUFQ_PEEK(priv->queues[UDF_SHED_WRITING]) == NULL); |
empty &= (bufq_peek(priv->queues[UDF_SHED_WRITING]) == NULL); |
empty &= (BUFQ_PEEK(priv->queues[UDF_SHED_SEQWRITING]) == NULL); |
empty &= (bufq_peek(priv->queues[UDF_SHED_SEQWRITING]) == NULL); |
|
|
/* wait for more if needed */ |
/* wait for more if needed */ |
if (empty) |
if (empty) |