Lines Matching defs:chmp

44 chfs_update_eb_dirty(struct chfs_mount *chmp,
47 KASSERT(mutex_owned(&chmp->chm_lock_mountfields));
48 KASSERT(!mutex_owned(&chmp->chm_lock_sizes));
58 mutex_enter(&chmp->chm_lock_sizes);
59 chfs_change_size_free(chmp, cheb, -size);
60 chfs_change_size_dirty(chmp, cheb, size);
61 mutex_exit(&chmp->chm_lock_sizes);
71 chfs_add_node_to_list(struct chfs_mount *chmp,
75 KASSERT(mutex_owned(&chmp->chm_lock_vnocache));
101 chfs_mark_node_obsolete(chmp, nextref);
120 chfs_remove_node_from_list(struct chfs_mount *chmp,
124 KASSERT(mutex_owned(&chmp->chm_lock_mountfields));
125 KASSERT(mutex_owned(&chmp->chm_lock_vnocache));
157 chfs_remove_and_obsolete(struct chfs_mount *chmp,
161 KASSERT(mutex_owned(&chmp->chm_lock_mountfields));
162 KASSERT(mutex_owned(&chmp->chm_lock_vnocache));
164 chfs_remove_node_from_list(chmp, vc, old_nref, list);
168 chfs_mark_node_obsolete(chmp, old_nref);
173 chfs_add_fd_to_inode(struct chfs_mount *chmp,
195 mutex_enter(&chmp->chm_lock_vnocache);
196 chfs_remove_and_obsolete(chmp, parent->chvc, fd->nref,
198 mutex_exit(&chmp->chm_lock_vnocache);
203 chfs_mark_node_obsolete(chmp, new->nref);
217 chfs_add_vnode_ref_to_vc(struct chfs_mount *chmp,
220 KASSERT(mutex_owned(&chmp->chm_lock_vnocache));
226 chfs_remove_and_obsolete(chmp, vc, nref, &vc->v);
255 chfs_nref_len(struct chfs_mount *chmp,
260 KASSERT(mutex_owned(&chmp->chm_lock_mountfields));
263 cheb = &chmp->chm_blocks[nref->nref_lnr];
268 return chmp->chm_ebh->eb_size - cheb->free_size -
277 chfs_mark_node_obsolete(struct chfs_mount *chmp,
283 KASSERT(mutex_owned(&chmp->chm_lock_mountfields));
287 KASSERT(nref->nref_lnr <= chmp->chm_ebh->peb_nr);
288 cheb = &chmp->chm_blocks[nref->nref_lnr];
292 cheb->unchecked_size + cheb->wasted_size != chmp->chm_ebh->eb_size) {
298 chmp->chm_ebh->eb_size);
302 len = chfs_nref_len(chmp, cheb, nref);
304 mutex_enter(&chmp->chm_lock_sizes);
307 chfs_change_size_unchecked(chmp, cheb, -len);
309 chfs_change_size_used(chmp, cheb, -len);
311 KASSERT(cheb->used_size <= chmp->chm_ebh->eb_size);
313 chfs_change_size_dirty(chmp, cheb, len);
317 cheb->unchecked_size + cheb->wasted_size != chmp->chm_ebh->eb_size) {
323 chmp->chm_ebh->eb_size);
329 if (chmp->chm_flags & CHFS_MP_FLAG_SCANNING) {
331 mutex_exit(&chmp->chm_lock_sizes);
335 if (cheb == chmp->chm_nextblock) {
338 if (cheb == chmp->chm_gcblock) {
340 chmp->chm_gcblock = NULL;
344 //TAILQ_REMOVE(&chmp->chm_dirty_queue, cheb, queue);
348 TAILQ_FOREACH_SAFE(eb, &chmp->chm_free_queue, queue, tmpeb) {
350 TAILQ_REMOVE(&chmp->chm_free_queue, cheb, queue);
356 TAILQ_FOREACH_SAFE(eb, &chmp->chm_dirty_queue, queue, tmpeb) {
358 TAILQ_REMOVE(&chmp->chm_dirty_queue, cheb, queue);
365 TAILQ_FOREACH_SAFE(eb, &chmp->chm_very_dirty_queue, queue, tmpeb) {
367 TAILQ_REMOVE(&chmp->chm_very_dirty_queue, cheb, queue);
374 TAILQ_FOREACH_SAFE(eb, &chmp->chm_clean_queue, queue, tmpeb) {
376 TAILQ_REMOVE(&chmp->chm_clean_queue, cheb, queue);
383 if (chmp->chm_wbuf_len) {
385 TAILQ_INSERT_TAIL(&chmp->chm_erasable_pending_wbuf_queue,
388 TAILQ_INSERT_TAIL(&chmp->chm_erase_pending_queue,
390 chmp->chm_nr_erasable_blocks++;
392 chfs_remap_leb(chmp);
393 } else if (cheb == chmp->chm_gcblock) {
399 TAILQ_REMOVE(&chmp->chm_clean_queue, cheb, queue);
400 TAILQ_INSERT_TAIL(&chmp->chm_dirty_queue, cheb, queue);
401 } else if (VERY_DIRTY(chmp, cheb->dirty_size) &&
402 !VERY_DIRTY(chmp, cheb->dirty_size - len)) {
405 TAILQ_REMOVE(&chmp->chm_dirty_queue, cheb, queue);
406 TAILQ_INSERT_TAIL(&chmp->chm_very_dirty_queue, cheb, queue);
410 mutex_exit(&chmp->chm_lock_sizes);
421 chfs_close_eraseblock(struct chfs_mount *chmp,
427 KASSERT(mutex_owned(&chmp->chm_lock_mountfields));
429 offset = chmp->chm_ebh->eb_size - cheb->free_size;
440 chfs_update_eb_dirty(chmp, cheb, cheb->free_size);
443 TAILQ_INSERT_TAIL(&chmp->chm_clean_queue, cheb, queue);
444 } else if (VERY_DIRTY(chmp, cheb->dirty_size)) {
445 TAILQ_INSERT_TAIL(&chmp->chm_very_dirty_queue, cheb, queue);
447 TAILQ_INSERT_TAIL(&chmp->chm_dirty_queue, cheb, queue);
458 chfs_reserve_space_normal(struct chfs_mount *chmp, uint32_t size, int prio)
462 KASSERT(mutex_owned(&chmp->chm_lock_mountfields));
464 mutex_enter(&chmp->chm_lock_sizes);
465 while (chmp->chm_nr_free_blocks + chmp->chm_nr_erasable_blocks < chmp->chm_resv_blocks_write) {
466 dbg("free: %d, erasable: %d, resv: %d\n", chmp->chm_nr_free_blocks, chmp->chm_nr_erasable_blocks, chmp->chm_resv_blocks_write);
468 if (prio == ALLOC_DELETION && chmp->chm_nr_free_blocks + chmp->chm_nr_erasable_blocks >= chmp->chm_resv_blocks_deletion)
471 dirty = chmp->chm_dirty_size - chmp->chm_nr_erasable_blocks * chmp->chm_ebh->eb_size + chmp->chm_unchecked_size;
472 if (dirty < chmp->chm_nospc_dirty) {
473 dbg("dirty: %u < nospc_dirty: %u\n", dirty, chmp->chm_nospc_dirty);
475 mutex_exit(&chmp->chm_lock_sizes);
479 avail = chmp->chm_free_size - (chmp->chm_resv_blocks_write * chmp->chm_ebh->eb_size);
483 mutex_exit(&chmp->chm_lock_sizes);
487 mutex_exit(&chmp->chm_lock_sizes);
488 ret = chfs_gcollect_pass(chmp);
489 mutex_enter(&chmp->chm_lock_sizes);
491 if (chmp->chm_nr_erasable_blocks ||
492 !TAILQ_EMPTY(&chmp->chm_erasable_pending_wbuf_queue) ||
494 ret = chfs_remap_leb(chmp);
498 mutex_exit(&chmp->chm_lock_sizes);
503 mutex_exit(&chmp->chm_lock_sizes);
504 ret = chfs_reserve_space(chmp, size);
512 chfs_reserve_space_gc(struct chfs_mount *chmp, uint32_t size)
516 KASSERT(mutex_owned(&chmp->chm_lock_mountfields));
518 mutex_enter(&chmp->chm_lock_sizes);
519 chfs_remap_leb(chmp);
521 if (size > chmp->chm_free_size) {
523 mutex_exit(&chmp->chm_lock_sizes);
527 mutex_exit(&chmp->chm_lock_sizes);
528 ret = chfs_reserve_space(chmp, size);
537 chfs_reserve_space(struct chfs_mount *chmp, uint32_t size)
546 KASSERT(mutex_owned(&chmp->chm_lock_mountfields));
547 KASSERT(!mutex_owned(&chmp->chm_lock_sizes));
549 cheb = chmp->chm_nextblock;
557 if (chmp->chm_wbuf_len) {
558 chfs_flush_pending_wbuf(chmp);
562 while (chmp->chm_wbuf_ofs < chmp->chm_ebh->eb_size) {
564 chmp->chm_wbuf_ofs, chmp->chm_ebh->eb_size);
565 chfs_flush_pending_wbuf(chmp);
568 if (!(chmp->chm_wbuf_ofs % chmp->chm_ebh->eb_size) && !chmp->chm_wbuf_len)
569 chmp->chm_wbuf_ofs = 0xffffffff;
571 err = chfs_close_eraseblock(chmp, cheb);
579 if (TAILQ_EMPTY(&chmp->chm_free_queue)) {
581 dbg("cheb remap (free: %d)\n", chmp->chm_nr_free_blocks);
582 err = chfs_remap_leb(chmp);
586 cheb = TAILQ_FIRST(&chmp->chm_free_queue);
587 TAILQ_REMOVE(&chmp->chm_free_queue, cheb, queue);
588 chmp->chm_nextblock = cheb;
589 chmp->chm_nr_free_blocks--;