This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
Re: More user-space probes
- From: Srinivasa D S <srinivasa at in dot ibm dot com>
- To: systemtap at sourceware dot org
- Cc: David Smith <dsmith at redhat dot com>, Systemtap List <systemtap at sources dot redhat dot com>
- Date: Thu, 24 Apr 2008 21:27:19 +0530
- Subject: Re: More user-space probes
- Organization: IBM
- References: <480DEAD0.10802@redhat.com>
On Tuesday 22 April 2008 07:10:32 pm David Smith wrote:
>> (Internally, these are implemented using utrace. These probe types also
> use the new "task_finder" framework, which provides the support by
> probing by PID or by PATH. Eventually, the existing uprobes probes (and
> the future itrace probes) should be converted to use the "task_finder"
> framework.)
>
> Feel free to try out the new probe types and let me know if you find any
> issues.
I hit a compilation error while testing new probes mentioned in the
mail on my 2.6.25-rc6 ppc system.
In file included from
/tmp/stapTlEH0O/stap_eaf6c06588419104dbe101b4d46dbe00_410.c:108:
/usr/local/share/systemtap/runtime/task_finder.c: In function
'__stp_get_mm_path':
/usr/local/share/systemtap/runtime/task_finder.c:158: warning: passing
argument 1 of 'd_path' from incompatible pointer type
/usr/local/share/systemtap/runtime/task_finder.c:158: warning: passing
argument 2 of 'd_path' from incompatible pointer type
/usr/local/share/systemtap/runtime/task_finder.c:158: warning: passing
argument 3 of 'd_path' makes integer from pointer without a cast
/usr/local/share/systemtap/runtime/task_finder.c:158: error: too many
arguments to function 'd_path'
With below fix, It worked for me, But Iam not sure about holding reference
(through mntget(),dget()) dentry and mnt object while calling d_path.
Please let me know your comments on this.
---
runtime/task_finder.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
Index: src/runtime/task_finder.c
===================================================================
--- src.orig/runtime/task_finder.c
+++ src/runtime/task_finder.c
@@ -153,11 +153,8 @@ __stp_get_mm_path(struct mm_struct *mm,
vma = vma->vm_next;
}
if (vma) {
- struct vfsmount *mnt = mntget(vma->vm_file->f_vfsmnt);
- struct dentry *dentry = dget(vma->vm_file->f_dentry);
- rc = d_path(dentry, mnt, buf, buflen);
- dput(dentry);
- mntput(mnt);
+ struct path p = vma->vm_file->f_path;
+ rc = d_path(&p, buf, buflen);
}
else {
*buf = '\0';