I've build the kernel with the change and tested that `args[0]` in `vfs:fplookup:lookup:done` no longer needs to be cast to `struct nameidata *` to access its members such as `ni_dirp`.
Here's a sample script:
```
vfs:fplookup:lookup:done /(int64_t)args[0]->ni_dirp < 0 && arg2 == 3/ {
trace(stringof(args[0]->ni_dirp));
}
```
Side note: I could not figure out the right predicates that look sensible to only show successful lookups with actual path names available in `ni_dirp`. arg2 == 3 seems to help, but it was not enough. `(int64_t)args[0]->ni_dirp < 0` did the trick as printable `ni_dirp` turn out to always be <0 when cast to int64_t, but I don't understand why.
Another side note: wouldn't it be nice to create a vfs.d in /usr/lib/dtrace so that we could use the actual enum for `arg2` instead of integers? The enum would be:
```
enum cache_fpl_status { CACHE_FPL_STATUS_DESTROYED, CACHE_FPL_STATUS_ABORTED,
CACHE_FPL_STATUS_PARTIAL, CACHE_FPL_STATUS_HANDLED, CACHE_FPL_STATUS_UNSET };
```