#       $NetBSD: bdump,v 1.2 1997/02/12 23:35:06 gwr Exp $

# Count the number of buffers in the buffer cache for which
# bp->b_flags & $bufcount_match is non-0.
#
#       @(#)bdump       8.1 (Berkeley) 6/10/93

set $bufcount_match=0x020000
define bufcount

       set $i = 0
       set $num = 0

       while ($i < 512)

               set $bp = bufhash[$i].b_forw
               while ($bp != bufhash[$i].b_back)
                       if ($bp->b_flags & $bufcount_match)
                               set $num++
                       end
                       set $bp = $bp->b_forw
               end
               # printf "bucket: %d cumulative %d\n", $i, $num
               set $i++
       end
       printf "Number of buffers with flags & %x in hash table: %d\n", $bufcount_match, $num
end

# Dump the entire buffer cache.

define bufdump

       set $i = 0
       set $num = 0

       while ($i < 512)

               set $bp = bufhash[$i].b_forw
               while ($bp != bufhash[$i].b_back)
                       printf "bp=0x%x flags=0x%x vp=0x%x lblkno=0x%x blkno=0x%x\n", $bp, $bp->b_flags, $bp->b_vp, $bp->b_lblkno, $bp->b_blkno
                       set $num++
                       set $bp = $bp->b_forw
               end
               set $i++
       end
       printf "Number of buffers in hash table: %d\n", $num
end

# Dump the buffers in a particular hashbucket.
# usage: dumpbucket bucketnumber
define dumpbucket

       set $num = 0
       set $bp = bufhash[$arg0].b_forw
       while ($bp != bufhash[$arg0].b_back)
               printf "bp=0x%x flags=0x%x vp=0x%x lblkno=0x%x blkno=0x%x\n", $bp, $bp->b_flags, $bp->b_vp, $bp->b_lblkno, $bp->b_blkno
               set $num++
               set $bp = $bp->b_forw
       end
       printf "Number of buffers in bucket %d: %d\n", $arg0, $num
end

# Dump the buffers on the empty and age queues

define bdumpnew

       set $i = 0
       set $num = 0

       while ($i < 4)

               printf "Queue %d\n", $i
               set $bp = (struct buf *)bufqueues[$i].qe_next
               while ($bp)
                       printf "bp=0x%x flags=0x%x vp=0x%x lbn=%d size=0x%x\n", $bp, $bp->b_flags, $bp->b_vp, $bp->b_lblkno, $bp->b_bufsize
                       set $num++
                       set $bp = (struct buf *)$bp->b_freelist.qe_next
               end
               set $i++
       end
       printf "Number of buffers in free lists: %d\n", $num
end

define dumpchain

       set $bp = (struct buf *)$arg0
       while ($bp)
               printf "bp=0x%x flags=0x%x bn=0x%x lbn=%d count=%d size=%d\n", $bp, $bp->b_flags, $bp->b_blkno, $bp->b_lblkno, $bp->b_bcount, $bp->b_bufsize
               set $bp = (struct buf *)$bp->b_vnbufs.qe_next
       end
end

define dumpq

       set $num = 0

       printf "Queue %d\n", $arg0
       set $bp = (struct buf *)bufqueues[$arg0].qe_next
       while ($bp)
               printf "bp=0x%x flags=0x%x vp=0x%x lbn=%d size=0x%x\n", $bp, $bp->b_flags, $bp->b_vp, $bp->b_lblkno, $bp->b_bufsize
               set $num++
               set $bp = (struct buf *)$bp->b_freelist.qe_next
       end
       printf "Number of buffers on queue %d: %d\n", $arg0, $num
end