Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 04 Jun 2014 09:13:21 +0400
From:      Dmitry Yu Okunev <dyokunev@ut.mephi.ru>
To:        Mark Johnston <markj@freebsd.org>
Cc:        "freebsd-dtrace@freebsd.org" <freebsd-dtrace@freebsd.org>
Subject:   Re: failed to resolve cwd: Unknown variable name
Message-ID:  <538EAAF1.1030005@ut.mephi.ru>
In-Reply-To: <CAMw1wOwMU--0tDEjnK%2BcWW00d=d%2B%2B8BVmSCQ7XbR85bMQ0fhWw@mail.gmail.com>
References:  <5388A227.7050805@ut.mephi.ru> <CAMw1wOwMU--0tDEjnK%2BcWW00d=d%2B%2B8BVmSCQ7XbR85bMQ0fhWw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--WTcSU6j9kJi6KEoNeqsd4LqsOTug7NN08
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Hello.

On 06/04/2014 06:28 AM, Mark Johnston wrote:
> On Fri, May 30, 2014 at 11:22 AM, Dmitry Yu Okunev <dyokunev@ut.mephi.r=
u> 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 curre=
nt
>> 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
>=20
> 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
>=20
>     inline string cwd =3D
> stringof(curthread->td_proc->p_fd->fd_cdir->v_cache_dst.tqh_first->nc_n=
ame);
>=20
> 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 :)


--=20
Best regards, Dmitry.


--WTcSU6j9kJi6KEoNeqsd4LqsOTug7NN08
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIcBAEBAgAGBQJTjqr7AAoJEK2K5AyOMGeciQgP/0fdpNJ6OMvLFQvMKmTTL8U5
6UtL+RP3yciWdguzM1cgTGviMR3qIM7FGasmsG8hX0JzHjWjAtmrRvdpZoinRFqu
sEJKq0Qm96AEqNrFTI++NobmXjQrod33WbFVmtiB/U34o4nRgjJqHLeSEUGiwIyo
8hK3Vrr8EmkEGmE2Q08J95I2qTqvJqSpyUZNRpX1FqqUSe6KYSc/NjccG+KwOe7g
STSZ2REUhjVCzaaotnQmDYV5pHSeMSwARB+EgCTlyiv1pUfIuVMkvoRTMbpMpzOM
kk+7LXl5h8Yz+l1Rxhr44mqRkikVCsWW7n6lSuLRElCzKCqeB+TuZRZta9S7PSFM
fe+cxB01SAJId3LtIa2rYBj83KXe1oHp9bCcjCVHuR7Xz7y6qKrwrsoQYCaSsKAA
r3mUbeeB47QzC75I8acYJ66qmn1yft+V0Lmgj7rRjKDn+Ij8uO8YLiRwU6920rBx
2eKIcQrN2RjH1Z4aPSDQk5ndbVnZsLuJkdfOEjM4DYYKfmbxU/5PTOxEeYn2xCIq
J/xmz4ZKnlnIUZp2zev2ta8TJUWmZA3fVaLBpacUiLjDT+vBKpYXRPRi8B/Wk4s9
xMpUHyMmD2UDkp5RQnYNSag9UolUBq1WJj+iGu1ZG02OIR+DGWdQ7zMF7IjEhW/l
x+gamePoQjtG1mD+htQm
=F/W2
-----END PGP SIGNATURE-----

--WTcSU6j9kJi6KEoNeqsd4LqsOTug7NN08--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?538EAAF1.1030005>