aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/vfs_bio.c
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2008-09-16 11:19:38 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2008-09-16 11:19:38 +0000
commit52dfc8d7da79b9d7a1d3a3d2400dc17c957479e6 (patch)
tree5722b46dbcf6b76aa1eb0334df5da361e5c92f37 /sys/kern/vfs_bio.c
parentbdb80947637137efd798dfcf47298bddb9d40413 (diff)
downloadsrc-52dfc8d7da79b9d7a1d3a3d2400dc17c957479e6.tar.gz
src-52dfc8d7da79b9d7a1d3a3d2400dc17c957479e6.zip
Add the ffs structures introspection functions for ddb.
Show the b_dep value for the buffer in the show buffer command. Add a comand to dump the dirty/clean buffer list for vnode. Reviewed by: tegge Tested and used by: pho MFC after: 1 month
Notes
Notes: svn path=/head/; revision=183072
Diffstat (limited to 'sys/kern/vfs_bio.c')
-rw-r--r--sys/kern/vfs_bio.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c
index 1570bd7edc95..239ee5a2988a 100644
--- a/sys/kern/vfs_bio.c
+++ b/sys/kern/vfs_bio.c
@@ -3903,9 +3903,10 @@ DB_SHOW_COMMAND(buffer, db_show_buffer)
db_printf("b_flags = 0x%b\n", (u_int)bp->b_flags, PRINT_BUF_FLAGS);
db_printf(
"b_error = %d, b_bufsize = %ld, b_bcount = %ld, b_resid = %ld\n"
- "b_bufobj = (%p), b_data = %p, b_blkno = %jd\n",
+ "b_bufobj = (%p), b_data = %p, b_blkno = %jd, b_dep = %p\n",
bp->b_error, bp->b_bufsize, bp->b_bcount, bp->b_resid,
- bp->b_bufobj, bp->b_data, (intmax_t)bp->b_blkno);
+ bp->b_bufobj, bp->b_data, (intmax_t)bp->b_blkno,
+ bp->b_dep.lh_first);
if (bp->b_npages) {
int i;
db_printf("b_npages = %d, pages(OBJ, IDX, PA): ", bp->b_npages);
@@ -3935,4 +3936,26 @@ DB_SHOW_COMMAND(lockedbufs, lockedbufs)
}
}
}
+
+DB_SHOW_COMMAND(vnodebufs, db_show_vnodebufs)
+{
+ struct vnode *vp;
+ struct buf *bp;
+
+ if (!have_addr) {
+ db_printf("usage: show vnodebufs <addr>\n");
+ return;
+ }
+ vp = (struct vnode *)addr;
+ db_printf("Clean buffers:\n");
+ TAILQ_FOREACH(bp, &vp->v_bufobj.bo_clean.bv_hd, b_bobufs) {
+ db_show_buffer((uintptr_t)bp, 1, 0, NULL);
+ db_printf("\n");
+ }
+ db_printf("Dirty buffers:\n");
+ TAILQ_FOREACH(bp, &vp->v_bufobj.bo_dirty.bv_hd, b_bobufs) {
+ db_show_buffer((uintptr_t)bp, 1, 0, NULL);
+ db_printf("\n");
+ }
+}
#endif /* DDB */