195950Sphk#!/usr/local/bin/tclsh8.3 295935Sphk# $FreeBSD$ 330477Sphk 495950Sphkset fo [open _.html w] 595950Sphk 630477Sphkproc do_file {file} { 730477Sphk global names ops op 830477Sphk set f [open $file] 930477Sphk 1030477Sphk set s 0 1130477Sphk 1230477Sphk while {[gets $f a] >= 0} { 1330477Sphk if {$s == 0} { 1430477Sphk if {[regexp {struct[ ]*vnodeopv_entry_desc} "$a"]} { 1530477Sphk regsub {.*vnodeopv_entry_desc[ ]*} $a {} a 1630477Sphk regsub {\[.*} $a {} a 1730477Sphk regsub {_entries} $a {} a 1830477Sphk set name $a 1930477Sphk set names($a) 0 2030477Sphk set s 1 2130477Sphk } 2230477Sphk continue 2330477Sphk } 2430477Sphk if {$s == 1} { 2530477Sphk if {[regexp {NULL} "$a"]} { 2630477Sphk set s 0 2730477Sphk continue 2830477Sphk } 2930477Sphk if {![regexp {vop.*_desc} "$a"]} continue 3030477Sphk regsub -all {[,&]} $a " " a 3195935Sphk regsub -all {\(vop_t \*\)} $a " " a 3230477Sphk set b [lindex $a 0] 3395935Sphk if {"$b" == "/*"} { 3495935Sphk set s 0 3595935Sphk continue 3695935Sphk } 3730477Sphk #puts "$name>> [lindex $b 0] >> [lindex $b 3]" 3830477Sphk set o [lindex $b 0] 3930477Sphk regsub {_desc} $o "" o 4030477Sphk set ops($o) 0 4195935Sphk set op([list $name $o]) [lindex $b 1] 4230477Sphk continue 4330477Sphk } 4430477Sphk puts "$s>> $a" 4530477Sphk } 4630477Sphk close $f 4730477Sphk} 4830477Sphk 49109317Sphkset fi [open "|find /usr/src/sys -type f -name *.c -print | xargs grep VNODEOP_SET" ] 5030477Sphkwhile {[gets $fi a] >= 0} { 5130477Sphk puts stderr $a 5230477Sphk if {[regexp {#define} $a]} continue 5330477Sphk if {[regexp {mallocfs} $a]} continue 5430477Sphk do_file [lindex [split $a :] 0] 5530477Sphk} 5630477Sphkclose $fi 5730477Sphk 5895950Sphkputs $fo {<HTML> 5930477Sphk<HEAD></HEAD><BODY> 6030477Sphk<TABLE BORDER WIDTH="100%" NOSAVE> 6130477Sphk} 6230477Sphk 6330477Sphkset opn [lsort [array names ops]] 6430477Sphkset a [lsort [array names names]] 6530477Sphk 6630477Sphkset tbn default_vnodeop 6730477Sphkforeach i $a { 6830477Sphk if {$i == "default_vnodeop"} continue 6930477Sphk lappend tbn $i 7030477Sphk} 7130477Sphk 7230477Sphkforeach i $opn { 7330477Sphk if {$i == "vop_default"} continue 7430477Sphk regsub "vop_" $i "" i 7530477Sphk lappend fl [format "%12s" $i] 7630477Sphk} 7730477Sphk 7830477Sphklappend fl [format "%12s" default] 7930477Sphk 8095950Sphkputs $fo {<TR>} 8195950Sphkputs $fo {<TD>} 8295950Sphkputs $fo {</TD>} 8395950Sphkputs $fo "<TR>" 8495950Sphk puts $fo "<TD></TD>" 8530477Sphk foreach j $fl { 8695950Sphk puts $fo "<TD>" 8730477Sphk 8830477Sphk for {set i 0} {$i < 12} {incr i} { 8995950Sphk puts $fo "[string index $j $i]<BR>" 9030477Sphk } 9195950Sphk puts $fo "</TD>" 9230477Sphk } 9395950Sphkputs $fo "</TR>" 9430477Sphk 9530746Sphkset fnames(vop_defaultop) * 9695950Sphk 9795935Sphkset fnames(vop_null) - 9895950Sphkset fnames(vop_ebadf) b 9995950Sphkset fnames(vop_einval) i 10095950Sphkset fnames(vop_enotty) t 10195935Sphkset fnames(vop_panic) ! 10295935Sphkset fnames(vfs_cache_lookup) C 10395950Sphkset fnames(vop_eopnotsupp) * 10430746Sphk 10530477Sphkset fn 0 10630477Sphkset nop(aa) 0 10730477Sphkunset nop(aa) 10830477Sphkforeach i $tbn { 10995950Sphk puts $fo {<TR>} 11095950Sphk puts $fo "<TD>$i</TD>" 11195935Sphk set pfx [lindex [split $i _] 0] 11230477Sphk foreach j $opn { 11330477Sphk if {$j == "vop_default"} continue 11495935Sphk set sfx [lindex [split $j _] 1] 11530477Sphk if {![info exists op([list $i $j])]} { 11695950Sphk puts $fo "<TD BGCOLOR=\"#d0d0d0\"></TD>" 11730477Sphk continue 11830477Sphk } 11930477Sphk set t $op([list $i $j]) 12030477Sphk 12130746Sphk set c "#00ddd0" 12230746Sphk if {[info exists fnames($t)]} { 12330746Sphk set t $fnames($t) 12495935Sphk } elseif { $t == "${pfx}_${sfx}" } { 12595935Sphk set t "F" 12695935Sphk } elseif { $t == "vop_${sfx}" } { 12795935Sphk set t "V" 12895935Sphk } elseif { $t == "vop_no${sfx}" } { 12995935Sphk set t "N" 13095935Sphk } elseif { $t == "vop_std${sfx}" } { 13195935Sphk set t "S" 13295935Sphk } elseif { $sfx == "cachedlookup" && $t == "${pfx}_lookup" } { 13395935Sphk set t "L" 13430746Sphk } else { 13530746Sphk if {![info exists nop($t)]} { 13630746Sphk incr fn 13730746Sphk set nop($t) $fn 13830746Sphk set nfn($fn) $t 13930746Sphk set use($fn) 0 14030477Sphk } 14130746Sphk incr use($nop($t)) 14230746Sphk set t "<FONT SIZE=-1>$nop($t)</FONT>" 14395950Sphk set c "#ffff00" 14430477Sphk } 14595950Sphk puts $fo "<TD BGCOLOR=\"$c\">$t</TD>" 14630477Sphk } 14730477Sphk set j vop_default 14830477Sphk if {![info exists op([list $i $j])]} { 14995950Sphk puts $fo "<TD></TD>" 15030477Sphk continue 15130477Sphk } 15295950Sphk puts $fo "<TD>$op([list $i $j])</TD>" 15330477Sphk 15495950Sphk puts $fo "</TR>" 15530477Sphk} 15695950Sphkputs $fo "</TABLE>" 15795950Sphkputs $fo "<HR>" 15895950Sphkputs $fo {<PRE>} 15930746Sphkforeach i [lsort [array names fnames]] { 16095950Sphk puts $fo [format "%-2s %s" $fnames($i) $i] 16130746Sphk} 16295950Sphkputs $fo [format "%-2s %s" "F" "<fs>_<vop>"] 16395950Sphkputs $fo [format "%-2s %s" "V" "vop_<vop>"] 16495950Sphkputs $fo [format "%-2s %s" "N" "vop_no<vop>"] 16595950Sphkputs $fo [format "%-2s %s" "S" "vop_std<vop>"] 16695950Sphkputs $fo [format "%-2s %s" "L" "<fs>_lookup"] 16795950Sphkputs $fo { 16830477Sphk</PRE> 16930477Sphk} 17095950Sphkputs $fo "<HR>" 17195950Sphkputs $fo {<TABLE BORDER NOSAVE>} 17230746Sphkset m 8 17330477Sphkfor {set i 1} {$i <= $fn} {incr i $m} { 17495950Sphk puts $fo "<TR>" 17530477Sphk for {set j 0} {$j < $m} {incr j} { 17630477Sphk set k [expr $i + $j] 17730477Sphk if {$k <= $fn} { 17895950Sphk #puts $fo "<TD>$k</TD><TD><FONT SIZE=-1>$nfn($k)/$use($k)</FONT></TD>" 17995950Sphk puts $fo "<TD>$k</TD><TD><FONT SIZE=-1>$nfn($k)</FONT></TD>" 18030477Sphk } 18130477Sphk } 18295950Sphk puts $fo "</TR>" 18330477Sphk} 18495950Sphkputs $fo "</TABLE>" 18530477Sphk 18695950Sphkputs $fo "</TABLE>" 18795950Sphkputs $fo "</BODY>" 18895950Sphkputs $fo "</HTML>" 18995950Sphkforeach i $tbn { 19095950Sphk if {$i == "default_vnodeop"} { 19195950Sphk continue 19295950Sphk } 19395950Sphk foreach j $opn { 19495950Sphk set sfx [lindex [split $j _] 1] 19595950Sphk if {![info exists op([list $i $j])]} { 19695950Sphk continue 19795950Sphk } 19895950Sphk set v $op([list $i $j]) 19995950Sphk if {$v != "vop_std$sfx"} { 20095950Sphk continue 20195950Sphk } 20295950Sphk if {![info exists op([list default_vnodeop $j])]} { 20395950Sphk continue 20495950Sphk } 20595950Sphk if {$op([list default_vnodeop $j]) != $v} { 20695950Sphk continue 20795950Sphk } 20895950Sphk if {$op([list $i vop_default]) != "vop_defaultop"} { 20995950Sphk continue 21095950Sphk } 21195950Sphk puts "Suspect: uses explicit default, $i $j $v $op([list $i vop_default])" 21295950Sphk } 21395950Sphk} 214