2 # gdb macros for debugging Vinum.
3 # This file gets included from the .gdbinit files in
4 # the kernel build directory and /var/crash.
5 # Normally you won't need to include it directly.
6 # see gdbinit(9) for further details.
8 # Show information about the request pointed to by the variable rq in the current frame.
13 Show information about the request pointed to by the variable rq in the current frame.
16 # Show information about the request (struct rq) pointed at by the parameter
18 set $rq = (struct request *) $arg0
25 printf "\nRequest group at %x:\n", $rqg
29 while ($rqno < $rqg->count)
30 printf "rqg->rqe [%d]: ", $rqno
31 rrqe &$rqg->rqe[$rqno]
38 Show information about the request (struct rq) pointed at by the parameter
41 # Show information about the request element pointed to by the variable rqe in the current frame.
46 Show information about the request element pointed to by the variable rqe in the current frame.
49 # Show information about the request element (struct rqe) pointed at by the parameter.
51 set $rqe = (struct rqelement *) $arg0
52 printf "sdoffset 0x%x, useroffset 0x%x, dataoffset 0x%x, datalen 0x%x, groupoffset 0x%x, grouplen 0x%x, buflen 0x%x\n", \
60 printf " Flags 0x%x, Subdisk %d Drive %d\n", \
67 Show information about the request element (struct rqe) pointed at by the parameter.
71 printf "rq->prq [0].rqe[0].sdno: "
72 output/x rq->prq[0].rqe[0].sdno
73 printf "\nBuffer: device: "
74 output/x rq->prq[0].rqe[0].b.b_dev
76 output/x rq->prq[0].rqe[0].b.b_data
78 output/x rq->prq[0].rqe[0].b.b_bcount
79 printf " drive offset: "
80 output/x rq->prq[0].rqe[0].b.b_blkno
81 printf " subdisk offset: "
82 output/x rq->prq[0].rqe[0].sdoffset
84 if (rq->prq[0].rqe[0].b.b_flags & 0x10)
87 if (rq->prq[0].rqe[0].b.b_flags & 0x200)
90 if (rq->prq[0].rqe[0].b.b_flags & 0x800)
93 if (rq->prq[0].rqe[0].b.b_flags & 0x100000)
96 output/x rq->prq[0].rqe[0].b.b_flags
97 printf "\nrq->prq [0].rqe[1].sdno: "
98 output/x rq->prq[0].rqe[1].sdno
99 printf "\nBuffer: device: "
100 output/x rq->prq[0].rqe[1].b.b_dev
102 output/x rq->prq[0].rqe[1].b.b_data
104 output/x rq->prq[0].rqe[1].b.b_bcount
105 printf " drive offset: "
106 output/x rq->prq[0].rqe[1].b.b_blkno
107 printf " subdisk offset: "
108 output/x rq->prq[0].rqe[1].sdoffset
110 output/x rq->prq[0].rqe[1].b.b_flags
114 Print important information on Vinum request structures.
118 printf "\nrq->prq [1].rqe[0].sdno: "
119 output/x rq->prq[1].rqe[0].sdno
120 printf "\nBuffer: device: "
121 output/x rq->prq[1].rqe[0].b.b_dev
123 output/x rq->prq[1].rqe[0].b.b_data
125 output/x rq->prq[1].rqe[0].b.b_bcount
126 printf " drive offset: "
127 output/x rq->prq[1].rqe[0].b.b_blkno
128 printf " subdisk offset: "
129 output/x rq->prq[1].rqe[0].sdoffset
131 output/x rq->prq[1].rqe[0].b.b_flags
132 printf "\nrq->prq [1].rqe[1].sdno: "
133 output/x rq->prq[1].rqe[1].sdno
134 printf "\nBuffer: device: "
135 output/x rq->prq[1].rqe[1].b.b_dev
136 printf " data: 0x%x length 0x%x drive offset 0x%x sd offset 0x%x\n" rq->prq[1].rqe[1].b.b_data,
137 rq->prq[1].rqe[1].b.b_bcount,
138 rq->prq[1].rqe[1].b.b_blkno,
139 rq->prq[1].rqe[1].sdoffset
141 output/x rq->prq[1].rqe[1].b.b_flags
145 Print important information on Vinum request structures.
148 # kernel equivalent of 'info -V'
151 set $rqip = $rqipe + 1
152 set $rqend = rqinfo + 128
159 printf "%X:\t%d.%06d\tUBP: %x\t", $rqip, $rqip->timestamp.tv_sec, $rqip->timestamp.tv_usec, $rqip->bp
163 if ($rqip->type < loginfo_rqe)
170 set $rqip = $rqip + 1
180 Print out the same information as 'vinum info -V'.
185 set $rqip = $rqipe + 1
186 set $rqend = rqinfo + 128
191 printf "\nTime\t\t\t Event\t\t Buf\tDev\t Offset\tBytes\tSD\tSDoff\tDoffset\tGoffset\n\n"
194 printf "%d.%06d\t", $rqip->timestamp.tv_sec, $rqip->timestamp.tv_usec
195 if ($rqip->type == loginfo_user_bp)
196 if ($rqip->info.b.b_flags & 0x00100000)
201 printf "\t%p\t%d.%d\t0x%-9x\t%ld\n", $rqip->bp, $rqip->devmajor, $rqip->devminor & 0xff, $rqip->info.b.b_blkno, $rqip->info.b.b_bcount
204 if ($rqip->type == loginfo_user_bpl)
205 if ($rqip->info.b.b_flags & 0x00100000)
210 printf "\t%p\t%d.%d\t0x%-9x\t%ld\n", $rqip->bp, $rqip->devmajor, $rqip->devminor & 0xff, $rqip->info.b.b_blkno, $rqip->info.b.b_bcount
213 if ($rqip->type == loginfo_rqe)
214 if ($rqip->info.b.b_flags & 0x00100000)
219 printf "\t%p\t%d.%d\t0x%-9x\t%ld\t%d\t%x\t%x\t%x\n", $rqip->bp, $rqip->devmajor, $rqip->devminor & 0xff, $rqip->info.rqe.b.b_blkno, $rqip->info.rqe.b.b_bcount, $rqip->info.rqe.sdno, $rqip->info.rqe.sdoffset, $rqip->info.rqe.dataoffset, $rqip->info.rqe.groupoffset
222 if ($rqip->type == loginfo_iodone)
223 if ($rqip->info.b.b_flags & 0x00100000)
228 printf "\t%p\t%d.%d\t0x%-9x\t%ld\t%d\t%x\t%x\t%x\n", $rqip->bp, $rqip->devmajor, $rqip->devminor & 0xff, $rqip->info.rqe.b.b_blkno, $rqip->info.rqe.b.b_bcount, $rqip->info.rqe.sdno, $rqip->info.rqe.sdoffset, $rqip->info.rqe.dataoffset, $rqip->info.rqe.groupoffset
231 if ($rqip->type == loginfo_raid5_data)
232 if ($rqip->info.b.b_flags & 0x00100000)
237 printf "\t%p\t%d.%d\t0x%-9x\t%ld\t%d\t%x\t%x\t%x\n", $rqip->bp, $rqip->devmajor, $rqip->devminor & 0xff, $rqip->info.rqe.b.b_blkno, $rqip->info.rqe.b.b_bcount, $rqip->info.rqe.sdno, $rqip->info.rqe.sdoffset, $rqip->info.rqe.dataoffset, $rqip->info.rqe.groupoffset
240 if ($rqip->type == loginfo_raid5_parity)
241 if ($rqip->info.b.b_flags & 0x00100000)
246 printf "\t%p\t%d.%d\t0x%-9x\t%ld\t%d\t%x\t%x\t%x\n", $rqip->bp, $rqip->devmajor, $rqip->devminor & 0xff, $rqip->info.rqe.b.b_blkno, $rqip->info.rqe.b.b_bcount, $rqip->info.rqe.sdno, $rqip->info.rqe.sdoffset, $rqip->info.rqe.dataoffset, $rqip->info.rqe.groupoffset
249 if ($rqip->type == loginfo_sdio)
250 if ($rqip->info.b.b_flags & 0x00100000)
255 printf "\t%p\t\t 0x%-9x\t%ld\t%d\n", $rqip->bp, $rqip->info.b.b_blkno, $rqip->info.b.b_bcount, $rqip->devminor & 0xff
258 if ($rqip->type == loginfo_sdiol)
259 if ($rqip->info.b.b_flags & 0x00100000)
264 printf "\t%p\t%d.%d\t0x%-9x\t%ld\n", $rqip->bp, $rqip->devmajor, $rqip->devminor & 0xff, $rqip->info.b.b_blkno, $rqip->info.b.b_bcount
267 if ($rqip->type == loginfo_lockwait)
268 printf "Lockwait %p\t%d\t 0x%x\n", $rqip->bp, $rqip->info.lockinfo.plexno, $rqip->info.lockinfo.stripe
271 if ($rqip->type == loginfo_lock)
272 printf "Lock \t%p\t%d\t 0x%x\n", $rqip->bp, $rqip->info.lockinfo.plexno, $rqip->info.lockinfo.stripe
275 if ($rqip->type == loginfo_unlock)
276 printf "Unlock \t%p\t%d\t 0x%x\n", $rqip->bp, $rqip->info.lockinfo.plexno, $rqip->info.lockinfo.stripe
279 if ($rqip->type == loginfo_sdiodone)
280 if ($rqip->info.b.b_flags & 0x00100000)
285 printf "\t%p\t\t 0x%-9x\t%ld\t%d\n", $rqip->bp, $rqip->info.b.b_blkno, $rqip->info.b.b_bcount, $rqip->devminor
289 set $rqip = $rqip + 1
299 Show the Vinum request log buffer like 'vinum info -V'
302 printf "Block\t\tTime\t\tSequence\t size\t address\t line\t\tfile\n"
304 while $i < malloccount
305 printf "%6d\t%10d.%06d\t%6d\t\t%6d\t0x%08x\t%6d\t\t%s\n", $i, malloced [$i].time.tv_sec, malloced [$i].time.tv_usec, malloced [$i].seq, malloced[$i].size, malloced[$i].address, malloced[$i].line, &malloced[$i].file
310 Equivalent of 'vinum info -v' command
313 printf "Block\t\tTime\t\tSequence\t size\t address\t line\t\tfile\n"
320 if freeinfo[$i].line != 0
321 printf "%6d\t%10d.%06d\t%6d\t\t%6d\t0x%08x\t%6d\t\t%s\n", $i, freeinfo [$i].time.tv_sec, freeinfo [$i].time.tv_usec, freeinfo [$i].seq, freeinfo[$i].size, freeinfo[$i].address, freeinfo[$i].line, &freeinfo[$i].file
328 Show recently freed Vinum memory blocks.