This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: dereferencing filenames from a vfs_write probe


On Thu, Mar 20, 2008 at 11:01:14AM -0700, Jim Keniston wrote:
> On Thu, 2008-03-20 at 12:24 -0500, dave-systemtap@skeptech.org wrote:
> ...
> > 
> > This happens to be 2.6.16.19.  I'm curious, how often do systemtap
> > scripts need to change in practice because of data struture changes in
> > the kernel?
> 
> It's not uncommon, but the tapset maintainers try to shield tapset users
> from this.  Grep for "kernel_v" and "LINUX_VERSION_CODE" in
> src/tapset/*.stp to get an idea.

Excellent thank you.
 
> ...
> > Cool thanks. So based on that code I've chopped out the following function:
> > 
> > function get_path:string (dentry:dentry *,vsmnt:vsmount *) %{
> >   char *page = (char *)__get_free_page(GFP_KERNEL);
> >   sprintf("%s",d_path(dentry, vfsmnt, page, PAGE_SIZE));
> >   free_page((unsigned long)page);
> > %}
> 
> Keep in mind that a handler mustn't sleep, so you should use GFP_ATOMIC
> rather than GFP_KERNEL.

Thanks. I'd be lying if I said I understood the distinction.  Can anyone
reccommend a book/site to help a sysadmin familiar with C get up to speed on
the kernel internals?
 
> And yeah, the dentry and vsmnt args should be declared long and cast to
> the appropriate pointer types.

So below is the resultant (fully operational) function.  Hopefully this
is resonably safe to use?  

function get_path:string (da:long, va:long) %{
  char *page = (char *)__get_free_page(GFP_ATOMIC);
  struct dentry *dentry = (struct dentry *)((long)THIS->da);
  struct vfsmount *vfsmnt = (struct vfsmount *)((long)THIS->va);
  snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s", d_path(dentry, vfsmnt, page, PAGE_SIZE));
  free_page((unsigned long)page);
%}

Thanks again guys, you rock.

--dave


> > ... 
> > 
> > Thanks
> > 
> > --dave
> 
> Jim Keniston
> 

Attachment: pgp00000.pgp
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]