1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
%{
#include <linux/mount.h>
#include <linux/nfs_mount.h>
%}
function _fstype_name:string (_fstype:long) %{
struct file_system_type *fstype;
char *name;
fstype = (struct file_system_type *)(long)kread(&(THIS->_fstype));
name = (char *)(long)kread(&fstype->name);
snprintf(THIS->__retvalue, MAXSTRINGLEN, "name %s flags 0x%x",
name, fstype->fs_flags);
CATCH_DEREF_FAULT();
%}
function _vfsmnt_dump:string (_vfsmnt:long) %{
struct vfsmount *vfsmnt;
char *dev;
vfsmnt = (struct vfsmount *)(long)kread(&(THIS->_vfsmnt));
dev = (char *)(long)kread(&vfsmnt->mnt_devname);
snprintf(THIS->__retvalue, MAXSTRINGLEN, "dev %s flags=0x%x",
vfsmnt->mnt_devname, vfsmnt->mnt_flags);
CATCH_DEREF_FAULT();
%}
function _nfsmnt_dump:string (_nfsmnt:long) %{
struct nfs_mount_data *data;
unsigned char *bytes;
data = (struct nfs_mount_data *)(long)kread(&(THIS->_nfsmnt));
bytes = (unsigned char *)&data->addr.sin_addr.s_addr;
snprintf(THIS->__retvalue, MAXSTRINGLEN,
"vers %d flags 0x%x flavor %d hostname %s(%d.%d.%d.%d)",
data->version, data->flags, data->pseudoflavor,
data->hostname, bytes[0], bytes[1], bytes[2], bytes[3]);
CATCH_DEREF_FAULT();
%}
probe kernel.mark("nfs_mount") {
printf("nfs_mount:entry: fstype (%s) flags %x dev %s\n",
_fstype_name($arg1), $arg2, kernel_string($arg3));
printf("\tdata: %s\n\tmnt: %s\n",
_nfsmnt_dump($arg4), _vfsmnt_dump($arg5));
}
|