Lines Matching defs:PRIV
70 #define PRIV(ump) ((struct strat_private *) (ump)->strategy_private)
154 struct strat_private *priv = PRIV(eccline->ump);
157 KASSERT(mutex_owned(&priv->discstrat_mutex));
159 waslocked = mutex_owned(&priv->discstrat_mutex);
161 mutex_enter(&priv->discstrat_mutex);
171 ret = cv_timedwait(&priv->discstrat_cv, &priv->discstrat_mutex,
185 mutex_exit(&priv->discstrat_mutex);
193 struct strat_private *priv = PRIV(eccline->ump);
196 KASSERT(mutex_owned(&priv->discstrat_mutex));
198 waslocked = mutex_owned(&priv->discstrat_mutex);
200 mutex_enter(&priv->discstrat_mutex);
203 cv_broadcast(&priv->discstrat_cv);
206 mutex_exit(&priv->discstrat_mutex);
214 struct strat_private *priv = PRIV(eccline->ump);
216 KASSERT(mutex_owned(&priv->discstrat_mutex));
229 priv->num_floating--;
232 pool_put(&priv->ecclineblob_pool, eccline->blob);
233 pool_put(&priv->eccline_pool, eccline);
241 struct strat_private *priv = PRIV(eccline->ump);
243 KASSERT(mutex_owned(&priv->discstrat_mutex));
255 vfs_timestamp(&priv->last_queued[newqueue]);
257 priv->num_floating--;
259 priv->num_queued[newqueue]++;
260 bufq_put(priv->queues[newqueue], eccline->buf);
266 cv_signal(&priv->discstrat_cv);
271 udf_peek_eccline(struct strat_private *priv, int queued_on)
276 KASSERT(mutex_owned(&priv->discstrat_mutex));
279 buf = bufq_peek(priv->queues[queued_on]);
305 udf_pop_eccline(struct strat_private *priv, int queued_on)
310 KASSERT(mutex_owned(&priv->discstrat_mutex));
313 buf = bufq_get(priv->queues[queued_on]);
315 // KASSERT(priv->num_queued[queued_on] == 0);
332 priv->num_queued[queued_on]--;
336 priv->num_floating++;
346 udf_unqueue_eccline(struct strat_private *priv, struct udf_eccline *eccline)
356 ret = bufq_cancel(priv->queues[eccline->queued_on], eccline->buf);
359 priv->num_queued[eccline->queued_on]--;
363 priv->num_floating++;
370 struct strat_private *priv = PRIV(ump);
377 mutex_enter(&priv->discstrat_mutex);
384 KASSERT(priv->thread_running);
388 LIST_FOREACH(eccline, &priv->eccline_hash[line], hashchain) {
392 udf_unqueue_eccline(priv, eccline);
394 mutex_exit(&priv->discstrat_mutex);
407 num_busy = (priv->num_queued[UDF_SHED_SEQWRITING] + priv->num_floating);
409 cv_timedwait(&priv->discstrat_cv,
410 &priv->discstrat_mutex, hz/8);
414 eccline_blob = pool_get(&priv->ecclineblob_pool, PR_NOWAIT);
415 eccline = pool_get(&priv->eccline_pool, PR_NOWAIT);
418 pool_put(&priv->ecclineblob_pool, eccline_blob);
420 pool_put(&priv->eccline_pool, eccline);
423 eccline = udf_pop_eccline(priv, UDF_SHED_FREE);
426 cv_timedwait(&priv->discstrat_cv,
427 &priv->discstrat_mutex, hz/8);
447 priv->num_floating++;
470 LIST_INSERT_HEAD(&priv->eccline_hash[line], eccline, hashchain);
480 mutex_exit(&priv->discstrat_mutex);
489 struct strat_private *priv = PRIV(eccline->ump);
494 mutex_enter(&priv->discstrat_mutex);
531 mutex_exit(&priv->discstrat_mutex);
613 struct strat_private *priv;
640 priv = PRIV(eccline->ump);
641 mutex_enter(&priv->discstrat_mutex);
643 error = cv_timedwait(&priv->discstrat_cv,
644 &priv->discstrat_mutex,
649 mutex_exit(&priv->discstrat_mutex);
774 struct strat_private *priv = PRIV(ump);
924 mutex_enter(&priv->seqwrite_mutex);
1003 mutex_exit(&priv->seqwrite_mutex);
1107 struct strat_private *priv = PRIV(ump);
1154 mutex_exit(&priv->discstrat_mutex);
1157 mutex_enter(&priv->discstrat_mutex);
1187 mutex_exit(&priv->discstrat_mutex);
1192 mutex_enter(&priv->discstrat_mutex);
1200 struct strat_private *priv = PRIV(ump);
1207 priv->thread_running = 1;
1208 cv_broadcast(&priv->discstrat_cv);
1210 mutex_enter(&priv->discstrat_mutex);
1211 priv->num_floating = 0;
1212 while (priv->run_thread || work || priv->num_floating) {
1219 eccline = udf_peek_eccline(priv, UDF_SHED_WAITING);
1224 if ((priv->cur_queue != UDF_SHED_READING) &&
1235 eccline = udf_pop_eccline(priv, UDF_SHED_WAITING);
1257 while (priv->num_queued[UDF_SHED_FREE] > UDF_ECCLINE_MAXFREE) {
1258 eccline = udf_pop_eccline(priv, UDF_SHED_FREE);
1274 last = &priv->last_queued[priv->cur_queue];
1277 eccline = udf_pop_eccline(priv, priv->cur_queue);
1280 new_queue = priv->cur_queue;
1283 udf_issue_eccline(eccline, priv->cur_queue);
1288 cv_timedwait(&priv->discstrat_cv,
1289 &priv->discstrat_mutex, hz);
1298 new_queue = priv->cur_queue;
1299 if (bufq_peek(priv->queues[UDF_SHED_READING]))
1301 if (bufq_peek(priv->queues[UDF_SHED_WRITING]))
1303 if (bufq_peek(priv->queues[UDF_SHED_SEQWRITING]))
1308 mutex_exit(&priv->discstrat_mutex);
1310 if (new_queue != priv->cur_queue) {
1313 priv->cur_queue, new_queue));
1314 priv->cur_queue = new_queue;
1316 mutex_enter(&priv->discstrat_mutex);
1320 cv_timedwait(&priv->discstrat_cv,
1321 &priv->discstrat_mutex, hz/4); /* /8 */
1323 work = (bufq_peek(priv->queues[UDF_SHED_WAITING]) != NULL);
1324 work |= (bufq_peek(priv->queues[UDF_SHED_READING]) != NULL);
1325 work |= (bufq_peek(priv->queues[UDF_SHED_WRITING]) != NULL);
1326 work |= (bufq_peek(priv->queues[UDF_SHED_SEQWRITING]) != NULL);
1329 (bufq_peek(priv->queues[UDF_SHED_READING]) != NULL),
1330 (bufq_peek(priv->queues[UDF_SHED_WRITING]) != NULL),
1331 (bufq_peek(priv->queues[UDF_SHED_SEQWRITING]) != NULL),
1332 work, priv->num_floating));
1335 mutex_exit(&priv->discstrat_mutex);
1338 mutex_enter(&priv->discstrat_mutex);
1339 KASSERT(bufq_peek(priv->queues[UDF_SHED_WAITING]) == NULL);
1340 KASSERT(bufq_peek(priv->queues[UDF_SHED_IDLE]) == NULL);
1341 KASSERT(bufq_peek(priv->queues[UDF_SHED_READING]) == NULL);
1342 KASSERT(bufq_peek(priv->queues[UDF_SHED_WRITING]) == NULL);
1343 KASSERT(bufq_peek(priv->queues[UDF_SHED_SEQWRITING]) == NULL);
1345 KASSERT(priv->num_queued[UDF_SHED_WAITING] == 0);
1346 KASSERT(priv->num_queued[UDF_SHED_IDLE] == 0);
1347 KASSERT(priv->num_queued[UDF_SHED_READING] == 0);
1348 KASSERT(priv->num_queued[UDF_SHED_WRITING] == 0);
1349 KASSERT(priv->num_queued[UDF_SHED_SEQWRITING] == 0);
1351 eccline = udf_pop_eccline(priv, UDF_SHED_FREE);
1354 eccline = udf_pop_eccline(priv, UDF_SHED_FREE);
1356 KASSERT(priv->num_queued[UDF_SHED_FREE] == 0);
1357 mutex_exit(&priv->discstrat_mutex);
1359 priv->thread_running = 0;
1360 priv->thread_finished = 1;
1361 cv_broadcast(&priv->discstrat_cv);
1399 struct strat_private *priv = PRIV(ump);
1405 KASSERT(priv == NULL);
1415 priv = ump->strategy_private;
1416 memset(priv, 0 , sizeof(struct strat_private));
1419 cv_init(&priv->discstrat_cv, "udfstrat");
1420 mutex_init(&priv->discstrat_mutex, MUTEX_DEFAULT, IPL_NONE);
1421 mutex_init(&priv->seqwrite_mutex, MUTEX_DEFAULT, IPL_NONE);
1424 pool_init(&priv->eccline_pool, sizeof(struct udf_eccline),
1429 pool_init(&priv->ecclineblob_pool, blobsize,
1434 priv->num_queued[i] = 0;
1435 vfs_timestamp(&priv->last_queued[i]);
1437 bufq_alloc(&priv->queues[UDF_SHED_WAITING], "fcfs",
1439 bufq_alloc(&priv->queues[UDF_SHED_READING], "disksort",
1441 bufq_alloc(&priv->queues[UDF_SHED_WRITING], "disksort",
1443 bufq_alloc(&priv->queues[UDF_SHED_SEQWRITING], "disksort", 0);
1446 bufq_alloc(&priv->queues[UDF_SHED_IDLE], "fcfs", 0);
1447 bufq_alloc(&priv->queues[UDF_SHED_FREE], "fcfs", 0);
1450 LIST_INIT(&priv->eccline_hash[hashline]);
1454 priv->cur_queue = UDF_SHED_READING;
1455 priv->thread_finished = 0;
1456 priv->thread_running = 0;
1457 priv->run_thread = 1;
1459 udf_discstrat_thread, ump, &priv->queue_lwp,
1465 mutex_enter(&priv->discstrat_mutex);
1466 while (!priv->thread_running) {
1467 cv_timedwait(&priv->discstrat_cv, &priv->discstrat_mutex, hz);
1469 mutex_exit(&priv->discstrat_mutex);
1477 struct strat_private *priv = PRIV(ump);
1483 KASSERT(priv->run_thread == 1);
1484 priv->run_thread = 0;
1486 mutex_enter(&priv->discstrat_mutex);
1487 while (!priv->thread_finished) {
1488 cv_broadcast(&priv->discstrat_cv);
1489 cv_timedwait(&priv->discstrat_cv, &priv->discstrat_mutex, hz);
1491 mutex_exit(&priv->discstrat_mutex);
1494 cv_destroy(&priv->discstrat_cv);
1495 mutex_destroy(&priv->discstrat_mutex);
1496 mutex_destroy(&priv->seqwrite_mutex);
1499 pool_destroy(&priv->eccline_pool);
1500 pool_destroy(&priv->ecclineblob_pool);