From 772dde83049bb424b33e6c94b1804285bdaca697 Mon Sep 17 00:00:00 2001 From: Prasad Joshi <prasadjoshi.linux@gmail.com> Date: Wed, 21 May 2014 17:56:30 +0530 Subject: [PATCH] vfs: enable support for DEBUG_VFS At the moment, defining DEBUG_VFS fails OSv compilation. The patch ensures OSv compiles and correct debug logs are emitted. Reviewed-by: Glauber Costa <glommer@cloudius-systems.com> Signed-off-by: Prasad Joshi <prasadjoshi.linux@gmail.com> Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com> --- fs/vfs/main.cc | 2 +- fs/vfs/vfs.h | 2 ++ fs/vfs/vfs_syscalls.cc | 10 +++++----- fs/vfs/vfs_vnode.c | 35 ++++++++++++++++++++++++----------- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/fs/vfs/main.cc b/fs/vfs/main.cc index 6d25263a1..d6d9c304a 100644 --- a/fs/vfs/main.cc +++ b/fs/vfs/main.cc @@ -1554,7 +1554,7 @@ fs_noop(void) return 0; } -#ifdef DEBUG_VFS +#ifdef NOTYET /* * Dump internal data. */ diff --git a/fs/vfs/vfs.h b/fs/vfs/vfs.h index ce4b73515..8f25e127f 100644 --- a/fs/vfs/vfs.h +++ b/fs/vfs/vfs.h @@ -54,6 +54,8 @@ #define FSMAXNAMES 16 /* max length of 'file system' name */ #ifdef DEBUG_VFS +#include <osv/debug.h> + extern int vfs_debug; #define VFSDB_CORE 0x00000001 diff --git a/fs/vfs/vfs_syscalls.cc b/fs/vfs/vfs_syscalls.cc index 7c24c0d2e..86d35ce49 100644 --- a/fs/vfs/vfs_syscalls.cc +++ b/fs/vfs/vfs_syscalls.cc @@ -186,8 +186,8 @@ sys_read(struct file *fp, struct iovec *iov, size_t niov, ssize_t bytes; int error; - DPRINTF(VFSDB_SYSCALL, ("sys_write: fp=%x buf=%x size=%d\n", - (u_int)fp, (u_int)buf, size)); + DPRINTF(VFSDB_SYSCALL, ("sys_write: fp=%x offset=%d\n", + (u_long)fp, (u_int)offset)); if ((fp->f_flags & FREAD) == 0) return EBADF; @@ -221,8 +221,8 @@ sys_write(struct file *fp, struct iovec *iov, size_t niov, ssize_t bytes; int error; - DPRINTF(VFSDB_SYSCALL, ("sys_write: fp=%x uio=%x niv=%zu\n", - (u_long)fp, (u_long)uio, niv)); + DPRINTF(VFSDB_SYSCALL, ("sys_write: fp=%x uio=%x niov=%zu\n", + (u_long)fp, (u_long)uio, niov)); if ((fp->f_flags & FWRITE) == 0) return EBADF; @@ -254,7 +254,7 @@ sys_lseek(struct file *fp, off_t off, int type, off_t *origin) struct vnode *vp; DPRINTF(VFSDB_SYSCALL, ("sys_seek: fp=%x off=%d type=%d\n", - (u_int)fp, (u_int)off, type)); + (u_long)fp, (u_int)off, type)); if (!fp->f_dentry) { // Linux doesn't implement lseek() on pipes, sockets, or ttys. diff --git a/fs/vfs/vfs_vnode.c b/fs/vfs/vfs_vnode.c index 80a6bb0fa..18d5435e6 100644 --- a/fs/vfs/vfs_vnode.c +++ b/fs/vfs/vfs_vnode.c @@ -117,6 +117,20 @@ vn_lookup(struct mount *mp, uint64_t ino) return NULL; /* not found */ } +#ifdef DEBUG_VFS +static const char * +vn_path(struct vnode *vp) +{ + struct dentry *dp; + + if (LIST_EMPTY(&vp->v_names) == 1) { + return (" "); + } + dp = LIST_FIRST(&vp->v_names); + return (dp->d_path); +} +#endif + /* * Lock vnode */ @@ -128,7 +142,7 @@ vn_lock(struct vnode *vp) mutex_lock(&vp->v_lock); vp->v_nrlocks++; - DPRINTF(VFSDB_VNODE, ("vn_lock: %s\n", vp->v_path)); + DPRINTF(VFSDB_VNODE, ("vn_lock: %s\n", vn_path(vp))); } /* @@ -141,9 +155,9 @@ vn_unlock(struct vnode *vp) ASSERT(vp->v_refcnt > 0); ASSERT(vp->v_nrlocks > 0); - DPRINTF(VFSDB_VNODE, ("vn_unlock: %s\n", vp->v_path)); vp->v_nrlocks--; mutex_unlock(&vp->v_lock); + DPRINTF(VFSDB_VNODE, ("vn_lock: %s\n", vn_path(vp))); } /* @@ -215,8 +229,7 @@ vput(struct vnode *vp) ASSERT(vp); ASSERT(vp->v_nrlocks > 0); ASSERT(vp->v_refcnt > 0); - DPRINTF(VFSDB_VNODE, ("vput: ref=%d %s\n", vp->v_refcnt, - vp->v_path)); + DPRINTF(VFSDB_VNODE, ("vput: ref=%d %s\n", vp->v_refcnt, vn_path(vp))); VNODE_LOCK(); vp->v_refcnt--; @@ -440,21 +453,21 @@ vnode_dump(void) "VLNK ", "VSOCK", "VFIFO" }; VNODE_LOCK(); - dprintf("Dump vnode\n"); - dprintf(" vnode mount type refcnt blkno path\n"); - dprintf(" -------- -------- ----- ------ -------- ------------------------------\n"); + kprintf("Dump vnode\n"); + kprintf(" vnode mount type refcnt blkno path\n"); + kprintf(" -------- -------- ----- ------ -------- ------------------------------\n"); for (i = 0; i < VNODE_BUCKETS; i++) { LIST_FOREACH(vp, &vnode_table[i], v_link) { mp = vp->v_mount; - dprintf(" %08x %08x %s %6d %8d %s%s\n", (u_int)vp, - (u_int)mp, type[vp->v_type], vp->v_refcnt, + kprintf(" %08x %08x %s %6d %8d %s%s\n", (u_long)vp, + (u_long)mp, type[vp->v_type], vp->v_refcnt, (strlen(mp->m_path) == 1) ? "\0" : mp->m_path, - vp->v_path); + vn_path(vp)); } } - dprintf("\n"); + kprintf("\n"); VNODE_UNLOCK(); } #endif -- GitLab