[libgtop] Implement dev/inode for mapped files on ZFS.
- From: Robert Roth <robertroth src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgtop] Implement dev/inode for mapped files on ZFS.
- Date: Thu, 25 Jun 2015 23:59:06 +0000 (UTC)
commit 50b5dea402c284addf65c96cfaaeca547c43fe5d
Author: Benoit Dejean <bdejean gmail com>
Date: Sun Jun 21 13:46:57 2015 +0200
Implement dev/inode for mapped files on ZFS.
sysdeps/freebsd/procmap.c | 40 +++++++++++++++++++++++++++++++++++++++-
1 files changed, 39 insertions(+), 1 deletions(-)
---
diff --git a/sysdeps/freebsd/procmap.c b/sysdeps/freebsd/procmap.c
index 6d1c854..124fc4a 100644
--- a/sysdeps/freebsd/procmap.c
+++ b/sysdeps/freebsd/procmap.c
@@ -120,7 +120,45 @@ _glibtop_sysdeps_freebsd_dev_inode (glibtop *server, struct vnode *vnode,
if (fs_type == IS_ZFS) {
- /* NOP */
+ /* FIXME: I have no idea about what is the actual layout of what we've read
+ but the inode number is definitely at offset 16, 8 bytes of amd64.
+ *inum = *(guint64*) ((unsigned char*)&inode + 16);
+ So this is really hugly, but I don't have anything better for now.
+
+ Actually, this looks like a znode_t as described in kernel's zfs_znode.h.
+ I don't have that header file, so let's just mimic that.
+ */
+
+ struct my_zfsvfs {
+ /* vfs_t */ void *z_vfs;
+ /* zfsvfs_t */ void *z_parent;
+ /* objset_t */ void *z_os;
+ uint64_t z_root;
+ /* ... */
+ };
+
+ typedef struct my_znode {
+ struct my_zfsvfs *z_zfsvfs;
+ /* vnode_t */ void *z_vnode;
+ uint64_t z_id;
+ /* ... */
+ } my_znode_t;
+
+ G_STATIC_ASSERT(sizeof(my_znode_t) <= sizeof(struct inode));
+
+ my_znode_t* znode = (my_znode_t*)&inode;
+ *inum = znode->z_id;
+
+ struct my_zfsvfs zvfs;
+
+ if (kvm_read(server->machine.kd,
+ (unsigned long)(znode->z_zfsvfs),
+ &zvfs, sizeof zvfs) != sizeof zvfs) {
+ glibtop_warn_io_r(server, "kvm_read (z_zfsvfs)");
+ return;
+ }
+
+ *dev = zvfs.z_root;
}
else if (fs_type == IS_UFS) {
/* Set inum as soon as possible, so that if the next kvm_reads fail
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]