failed to resolve cwd: Unknown variable name

Dmitry Yu Okunev dyokunev at ut.mephi.ru
Wed Jun 4 05:16:21 UTC 2014


Hello.

On 06/04/2014 06:28 AM, Mark Johnston wrote:
> On Fri, May 30, 2014 at 11:22 AM, Dmitry Yu Okunev <dyokunev at ut.mephi.ru> wrote:
>> Hello.
>>
>> I cannot use dtrace in FreeBSD for my need due to next bug.
>>
>> It's said that there's a build-in variable "cwd" contains "the name of
>> the current working directory of the process associated with the current
>> thread" [1]
>>
>> [1] http://docs.oracle.com/cd/E18752_01/html/819-5488/gcfpz.html
>>
>> But when I try to use the variable I get a failure:
>>> dtrace: invalid probe specifier syscall:::entry { printf("%s", cwd);
>> }: in action list: failed to resolve cwd: Unknown variable name
>>
>> You can get the same error by running a dtrace-script from official
>> FreeBSD distribution:
>>> /usr/share/dtrace/toolkit/opensnoop -c
> 
> Unfortunately, it looks like implementing this variable in FreeBSD
> would be somewhat non-trivial. illumos (and presumably Solaris) caches
> a full path to the file backing a given vnode, whereas FreeBSD only
> caches file names and builds up a full path dynamically in
> vn_fullpath1().

That's strange problem because audit already returns full paths in
FreeBSD. It just uses "vn_fullpath*()"?

> So one can get a bit of the way there with something ugly like
> 
>     inline string cwd =
> stringof(curthread->td_proc->p_fd->fd_cdir->v_cache_dst.tqh_first->nc_name);
> 
> to get the last component of a process' cwd (it needs a check for a
> missing cache entry), but I don't see any easy way to get at the full
> cwd. Calling vn_fullpath() in probe context would be a pretty bad idea
> since it may invoke VFS operations

Hm. If it's performance problem only, then personally I can endure that.

Can I use vn_fullpath*() in dtrace probes on current FreeBSD?

>, so adding support for the cwd
> variable would probably involve adding cache-only lookup code to
> vfs_cache.c. That said, I'm not super familiar with this stuff, so I
> could be missing something; this is just based on my previously
> stymied efforts trying to get a full path for a vnode in a DTrace
> probe, for example when trying to figure out which files are getting
> fsync'ed.

Ok. It's became much more clear. Thanks :)


-- 
Best regards, Dmitry.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 884 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freebsd.org/pipermail/freebsd-dtrace/attachments/20140604/1d909db7/attachment.sig>


More information about the freebsd-dtrace mailing list