summaryrefslogtreecommitdiffstats
path: root/tracemarks/nfs_mount.stp
blob: b20e92016bf7d29a2637db73156e13657ed0ab4d (plain)
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));

}