summaryrefslogtreecommitdiffstats
path: root/tracemarks/nfs_mount.trace
blob: 78e4981695735991ec0e8d4b11e7b2ec675bef9b (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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
%{
#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));

}
probe  kernel.mark("nfs_mount_data_null") {
    printf("nfs_mount: missing mount data: errno %d\n", $arg1);
}
probe  kernel.mark("nfs_mount_data_badvers") {

	if ($arg1 <= 0) {
    	printf("nfs_mount: invalid mount version: vers %d <= 0\n", $arg1);
	} else  {
    	printf("nfs_mount: invalid mount version: vers %d > %d\n",
			$arg1, $arg2);
	}
}
probe  kernel.mark("nfs_mount_data_invalvers") {
	if ($arg1 == 3) {
    	printf("nfs_mount: mount structure version %d does not support NFSv3\n", 			$arg1);
	} else { 
		printf("nfs_mount: mount structure version %d does not support strong security\n", arg1)
	}
}
probe  kernel.mark("nfs_mount_data_noaddr") {
    printf("nfs_mount: invalid server IP address:\n");
}
probe  kernel.mark("nfs_mount_data_badsize") {
    printf("nfs_mount: invalid root filehandle: fhsize %s > maxsize %d\n",
		arg1, arg2);
}
probe kernel.mark("nfs_mount_get_root") {
	printf("nfs_get_root: sb %p server %p mntfh %p\n", $arg1, $arg2, $arg3);
}
probe kernel.mark("nfs_mount_getroot_fhget1") {
	printf("nfs_get_root: !s_root: nfs_fhget failed: errno %d (%s)\n",
		$arg1, errno_str($arg1));
}
probe kernel.mark("nfs_mount_getroot_alloc1") {
	printf("nfs_get_root: !s_root: d_alloc_root failed: errno %d (%s)\n",
		$arg1, errno_str($arg1));
}
probe kernel.mark("nfs_mount_getroot_fhget2") {
	printf("nfs_get_root: nfs_fhget failed: errno %d (%s)\n",
		$arg1, errno_str($arg1));
}
probe kernel.mark("nfs_mount_getroot_alloc2") {
	printf("nfs_get_root: d_alloc_root failed: errno %d (%s)\n",
		$arg1, errno_str($arg1));
}
probe kernel.mark("nfs_mount_init_clnt") {
	printf("nfs_init_client: nfs_create_rpc_client failed: errno %d (%s)\n",
		$arg1, errno_str($arg1));
}
probe kernel.mark("nfs_create_rpc_client") {
	printf("nfs_create_rpc_client: clp %p proto %d timeo %d retrans %d flavor %d", 
		$arg1, $arg2, $arg3, $arg4, $arg5);
}
probe kernel.mark("nfs_create_rpc_client_proto") {
	printf("nfs_create_rpc_client: xprt_create_proto failed: errno %d (%s)\n",
		$arg1, errno_str($arg1));
}
probe kernel.mark("nfs_create_rpc_client_client") {
	printf("nfs_create_rpc_client: rpc_create_client failed: errno %d (%s)\n",
		$arg1, errno_str($arg1));
}
probe kernel.mark("nfs_mount_init_srv") {
	printf("nfs_init_server: nfs_get_client failed: errno %d (%s)\n",
		$arg1, errno_str($arg1));
}
probe kernel.mark("nfs_mount_sget") {
	printf("nfs_init_server: nfs_get_client failed: errno %d (%s)\n",
		$arg1, errno_str($arg1));
}

probe kernel.mark("nfs_init_server_rpcclient") {
	printf("nfs_init_server_rpcclient: server %p flavor %d\n",
		$arg1, $arg2);
}
probe kernel.mark("nfs_init_server_rpcclient_clone") {
	printf("nfs_init_server_rpcclient: rpc_clone_client failed errno %d (%s)\n",
		$arg1, errno_str($arg1));
}
probe kernel.mark("nfs_init_server_rpcclient_auth") {
	printf("nfs_init_server_rpcclient: rpcauth_create failed errno %d (%s)\n",
		$arg1, errno_str($arg1));
}
probe kernel.mark("nfs_start_lockd") {
	// struct nfs_server *server = $arg1;

	printf("nfs_start_lockd: lockd_up_proto failed errno %d (%s)\n",
		$arg2, errno_str($arg2));
}
probe kernel.mark("nfs_probe_fsinfo") {
	printf("nfs_probe_fsinfo: server %p mntfh %p fattr %p\n",
		$arg1, $arg2, $arg3);
}
probe kernel.mark("nfs_probe_fsinfo_setcaps") {
	printf("nfs_probe_fsinfo: set_capabilities failed errno %d (%s)\n",
		$arg1, errno_str($arg1));
}
probe kernel.mark("nfs_probe_fsinfo_fsinfo") {
	printf("nfs_probe_fsinfo: fsinfo failed errno %d (%s)\n",
		$arg1, errno_str($arg1));
}
probe kernel.mark("nfs_create_server") {
	// struct nfs_server *server = $arg1;
	// struct nfs_fh *mntfh = $arg2;

	printf("nfs_create_server: getattr failed errno %d (%s)\n",
		$arg3, errno_str($arg3));
} 
probe begin { log("starting nfs_mount trace") }
probe end { log("ending nfs_mount trace") }