Sindbad~EG File Manager
#! /bin/sh
# note use of guru mode, to enable changing of syscall parameters
//bin/true && exec stap -g $0 ${1+"$@"}
# see also http://www.flamingspork.com/projects/libeatmydata/
global dummy_fd = -1 # invalid filehandle; to try stdout, run with -G dummy_fd=1
global guilt, agony, piety
// Probing do_fsync() the common function called by syscall.{fsync,fdatasync}.
probe kernel.function("do_fsync") {
# We can't actually disable the syscall from here, but can try to
# weaken it by redirecting the work toward a dummy file descriptor
if (pid() == target())
try {
$fd = dummy_fd
guilt ++
} catch {
agony ++
}
else
piety ++
}
probe kernel.function("do_fsync").return {
# override result code, just in case kernel sent back -EINVAL or somesuch
if (pid() == target())
try { $return = 0 } catch { }
}
probe begin {
printf("Redirecting f*sync by pid %d to fd %d\n",
target(), dummy_fd)
}
probe error,end {
printf("Redirected f*sync by pid %d to fd %d, success %d times, failed %d times.\n",
target(), dummy_fd, guilt, agony)
printf("Preserved f*sync by other processes %d times.\n", piety)
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists