#!/usr/sbin/dtrace -s /* #pragma D option flowindent */ syscall::open:entry, syscall::open64:entry { self->flag = 1; printf( "open %s", copyinstr(arg0) ); } /* Limit tracing only to the vnode_t KMEM cache */ fbt:genunix:kmem_cache_*:entry, fbt:genunix:kmem_depot_*:entry, fbt:genunix:kmem_slab_*:entry /self->flag && ((kmem_cache_t*)arg0)->cache_name == "vn_cache" / { printf("kmem %s", ((kmem_cache_t *)arg0)->cache_name); self->in_traced_call = 1 } /* To keep the indentation aligned ---but still didn't fully work */ fbt:genunix:kmem_cache_*:return, fbt:genunix:kmem_depot_*:return, fbt:genunix:kmem_slab_*:return /self->flag && self->in_traced_call/ { self->in_traced_call = 0; } syscall::open:return, syscall::open64:return { self->flag = 0; }