1#!/bin/sh 2 3proc do_file {file} { 4 global names ops op 5 set f [open $file] 6 7 set s 0 8 9 while {[gets $f a] >= 0} { 10 if {$s == 0} { 11 if {[regexp {struct[ ]*vnodeopv_entry_desc} "$a"]} { 12 regsub {.*vnodeopv_entry_desc[ ]*} $a {} a 13 regsub {\[.*} $a {} a 14 regsub {_entries} $a {} a 15 set name $a 16 set names($a) 0 17 set s 1 18 } 19 continue 20 } 21 if {$s == 1} { 22 if {[regexp {NULL} "$a"]} { 23 set s 0 24 continue 25 } 26 if {![regexp {vop.*_desc} "$a"]} continue 27 regsub -all {[,&]} $a " " a 28 set b [lindex $a 0] 29 #puts "$name>> [lindex $b 0] >> [lindex $b 3]" 30 set o [lindex $b 0] 31 regsub {_desc} $o "" o 32 set ops($o) 0 33 set op([list $name $o]) [lindex $b 3] 34 continue 35 } 36 puts "$s>> $a" 37 } 38 close $f 39} 40 41set fi [open "|find [glob /usr/src/sys/*fs /usr/src/sys/gnu/*fs] /usr/src/sys/kern -type f -name *.c -print | xargs grep VNODEOP_SET" ] 42while {[gets $fi a] >= 0} { 43 puts stderr $a 44 if {[regexp {#define} $a]} continue 45 if {[regexp {mallocfs} $a]} continue 46 do_file [lindex [split $a :] 0] 47} 48close $fi 49 50puts {<HTML> 51<HEAD></HEAD><BODY> 52<TABLE BORDER WIDTH="100%" NOSAVE> 53} 54 55set opn [lsort [array names ops]] 56set a [lsort [array names names]] 57 58set tbn default_vnodeop 59foreach i $a { 60 if {$i == "default_vnodeop"} continue 61 lappend tbn $i 62} 63 64foreach i $opn { 65 if {$i == "vop_default"} continue 66 regsub "vop_" $i "" i 67 lappend fl [format "%12s" $i] 68} 69 70lappend fl [format "%12s" default] 71 72puts {<TR>} 73puts {<TD>} 74puts {</TD>} 75puts "<TR>" 76 puts "<TD></TD>" 77 foreach j $fl { 78 puts "<TD>" 79 80 for {set i 0} {$i < 12} {incr i} { 81 puts "[string index $j $i]<BR>" 82 } 83 puts "</TD>" 84 } 85puts "</TR>" 86 87set fnames(vop_defaultop) * 88set fnames(vop_nolock) nl 89set fnames(vop_noislocked) ni 90set fnames(vop_nounlock) nu 91set fnames(vop_stdlock) sl 92set fnames(vop_stdislocked) si 93set fnames(vop_stdunlock) su 94set fnames(vop_einval) I 95set fnames(vop_enotty) T 96set fnames(vop_null) - 97set fnames(vop_eopnotsupp) S 98set fnames(ufs_missingop) M 99set fnames(vop_nopoll) np 100set fnames(vop_nostrategy) ns 101set fnames(vop_revoke) vr 102set fnames(vfs_cache_lookup) cl 103set fnames(vop_stdpathconf) pc 104set fnames(vop_stdbwrite) bw 105 106set fn 0 107set nop(aa) 0 108unset nop(aa) 109foreach i $tbn { 110 puts {<TR>} 111 puts "<TD>$i</TD>" 112 foreach j $opn { 113 if {$j == "vop_default"} continue 114 if {![info exists op([list $i $j])]} { 115 puts "<TD></TD>" 116 continue 117 } 118 set t $op([list $i $j]) 119 120 set c "#00ddd0" 121 if {[info exists fnames($t)]} { 122 set t $fnames($t) 123 } else { 124 if {![info exists nop($t)]} { 125 incr fn 126 set nop($t) $fn 127 set nfn($fn) $t 128 set use($fn) 0 129 } 130 incr use($nop($t)) 131 set t "<FONT SIZE=-1>$nop($t)</FONT>" 132 set c "#00ffd0" 133 } 134 puts "<TD BGCOLOR=\"$c\">$t</TD>" 135 } 136 set j vop_default 137 if {![info exists op([list $i $j])]} { 138 puts "<TD></TD>" 139 continue 140 } 141 puts "<TD>$op([list $i $j])</TD>" 142 143 puts "</TR>" 144} 145puts "</TABLE>" 146puts "<HR>" 147puts {<PRE>} 148foreach i [lsort [array names fnames]] { 149 puts [format "%-2s %s" $fnames($i) $i] 150} 151puts { 152</PRE> 153} 154puts "<HR>" 155puts "<HR>" 156puts {<TABLE BORDER NOSAVE>} 157set m 8 158for {set i 1} {$i <= $fn} {incr i $m} { 159 puts "<TR>" 160 for {set j 0} {$j < $m} {incr j} { 161 set k [expr $i + $j] 162 if {$k <= $fn} { 163 #puts "<TD>$k</TD><TD><FONT SIZE=-1>$nfn($k)/$use($k)</FONT></TD>" 164 puts "<TD>$k</TD><TD><FONT SIZE=-1>$nfn($k)</FONT></TD>" 165 } 166 } 167 puts "</TR>" 168} 169puts "</TABLE>" 170 171puts "</TABLE>" 172puts "</BODY>" 173puts "</HTML>" 174