MCPcopy Create free account
hub / github.com/F-Stack/f-stack / blist_stats

Function blist_stats

freebsd/kern/subr_blist.c:530–586  ·  view source on GitHub ↗

* blist_stats() - dump radix tree stats */

Source from the content-addressed store, hash-verified

528 * blist_stats() - dump radix tree stats
529 */
530void
531blist_stats(blist_t bl, struct sbuf *s)
532{
533 struct gap_stats gstats;
534 struct gap_stats *stats = &gstats;
535 daddr_t i, nodes, radix;
536 u_daddr_t diff, mask;
537 int digit;
538
539 init_gap_stats(stats);
540 nodes = 0;
541 radix = bl->bl_radix;
542 for (i = 0; i < bl->bl_blocks; ) {
543 /*
544 * Check for skippable subtrees starting at i.
545 */
546 while (radix != 1) {
547 if (bl->bl_root[nodes].bm_bitmap == 0) {
548 if (gap_stats_counting(stats))
549 update_gap_stats(stats, i);
550 break;
551 }
552
553 /*
554 * Skip subtree root.
555 */
556 nodes++;
557 radix /= BLIST_RADIX;
558 }
559 if (radix == 1) {
560 /*
561 * Scan leaf.
562 */
563 mask = bl->bl_root[nodes].bm_bitmap;
564 diff = mask ^ (mask << 1);
565 if (gap_stats_counting(stats))
566 diff ^= 1;
567 while (diff != 0) {
568 digit = bitpos(diff);
569 update_gap_stats(stats, i + digit);
570 diff ^= bitrange(digit, 1);
571 }
572 }
573 nodes += radix_to_skip(radix * BLIST_RADIX);
574 i += radix * BLIST_RADIX;
575
576 /*
577 * Find max size subtree starting at i.
578 */
579 for (radix = 1;
580 ((i / BLIST_RADIX / radix) & BLIST_MASK) == 0;
581 radix *= BLIST_RADIX)
582 ;
583 }
584 update_gap_stats(stats, i);
585 dump_gap_stats(stats, s);
586}
587

Callers 2

mainFunction · 0.85

Calls 7

init_gap_statsFunction · 0.85
gap_stats_countingFunction · 0.85
update_gap_statsFunction · 0.85
bitposFunction · 0.85
bitrangeFunction · 0.85
radix_to_skipFunction · 0.85
dump_gap_statsFunction · 0.85

Tested by

no test coverage detected