GIF89a;
EcchiShell v1.0
/
/
proc/
self/
root/
usr/
share/
systemtap/
f_op->read
|| !@cast(file, "file")->f_op->read_iter)
next
}
probe write_funcs = kprobe.function("do_sync_write") !, __vfs_write
{
}
probe __vfs_write = kprobe.function("__vfs_write")
{
# Skip the call if new_sync_write() wouldn't be called.
file = pointer_arg(1)
if (!file || @cast(file, "file")->f_op->write
|| !@cast(file, "file")->f_op->write_iter)
next
}
probe kprobe.function("sock_write_iter") !, kprobe.function("sock_aio_write")
{
/* not a file system write */
sz[tid()] = 0;
ts[tid()] = 0;
}
probe read_funcs.return, write_funcs.return
{
if (ts[tid()]) {
lat = (gettimeofday_ns() - ts[tid()]) / 1000000;
if (lat >= min_ms) {
printf("%-8s %-6d %-16s %-14s %-7d %8d\n", hhmmss(),
pid(), execname(), ppfunc(), sz[tid()], lat);
}
delete sz[tid()];
delete ts[tid()];
}
}
probe read_funcs.return = kprobe.function("do_sync_read").return !,
__vfs_read.return
{
}
probe __vfs_read.return = kprobe.function("__vfs_read").return
{
# Skip the call if new_sync_read() wouldn't be called.
file = @entry(pointer_arg(1))
if (!file || @cast(file, "file")->f_op->read
|| !@cast(file, "file")->f_op->read_iter)
next
}
probe write_funcs.return = kprobe.function("do_sync_write").return !,
__vfs_write.return
{
}
probe __vfs_write.return = kprobe.function("__vfs_write")
{
# Skip the call if new_sync_write() wouldn't be called.
file = pointer_arg(1)
if (!file || @cast(file, "file")->f_op->write
|| !@cast(file, "file")->f_op->write_iter)
next
}