Split the code that works only with UFS inode. Will ease new code for ZFS.

This commit is contained in:
Benoit Dejean
2015-06-21 13:43:14 +02:00
committed by Robert Roth
parent 1f41349a7e
commit f4b23ef0c6

View File

@@ -80,6 +80,8 @@ _glibtop_sysdeps_freebsd_dev_inode (glibtop *server, struct vnode *vnode,
{ {
char *tagptr; char *tagptr;
char tagstr[12]; char tagstr[12];
enum FS_TYPE { UNKNOWN, IS_UFS, IS_ZFS };
int fs_type = UNKNOWN;
struct inode inode; struct inode inode;
struct cdev_priv priv; struct cdev_priv priv;
#if __FreeBSD_version < 800039 #if __FreeBSD_version < 800039
@@ -100,8 +102,14 @@ _glibtop_sysdeps_freebsd_dev_inode (glibtop *server, struct vnode *vnode,
tagstr[sizeof(tagstr) - 1] = '\0'; tagstr[sizeof(tagstr) - 1] = '\0';
if (strcmp (tagstr, "ufs")) if (!strcmp(tagstr, "ufs")) {
fs_type = IS_UFS;
} else if (!strcmp(tagstr, "zfs")) {
fs_type = IS_ZFS;
} else {
glibtop_warn_io_r (server, "ignoring fstype %s", tagstr);
return; return;
}
if (kvm_read (server->machine.kd, (gulong) VTOI(vn), (char *) &inode, if (kvm_read (server->machine.kd, (gulong) VTOI(vn), (char *) &inode,
sizeof (inode)) != sizeof (inode)) sizeof (inode)) != sizeof (inode))
@@ -110,6 +118,16 @@ _glibtop_sysdeps_freebsd_dev_inode (glibtop *server, struct vnode *vnode,
return; return;
} }
if (fs_type == IS_ZFS) {
/* NOP */
}
else if (fs_type == IS_UFS) {
/* Set inum as soon as possible, so that if the next kvm_reads fail
we still have something */
*inum = inode.i_number;
#if (__FreeBSD_version >= 800039) || (__FreeBSD_kernel_version >= 800039) #if (__FreeBSD_version >= 800039) || (__FreeBSD_kernel_version >= 800039)
if (kvm_read (server->machine.kd, (gulong) cdev2priv(inode.i_dev), (char *) &priv, if (kvm_read (server->machine.kd, (gulong) cdev2priv(inode.i_dev), (char *) &priv,
sizeof (priv)) sizeof (priv))
@@ -125,8 +143,8 @@ _glibtop_sysdeps_freebsd_dev_inode (glibtop *server, struct vnode *vnode,
return; return;
} }
*inum = (guint64) inode.i_number;
*dev = (guint64) priv.cdp_inode; *dev = (guint64) priv.cdp_inode;
} /* end-if IS_UFS */
} }
#endif #endif