Q: statfs related syscalls (was: Re: GSOC: Introduction)
Eugene Syromyatnikov
evgsyr at gmail.com
Sat Mar 18 13:56:43 UTC 2017
On Sat, Mar 18, 2017 at 05:57:39PM +0530, Abhishek Tiwari wrote:
> On Sat, Mar 18, 2017 at 3:53 PM, Eugene Syromyatnikov <evgsyr at gmail.com> wrote:
>
> > So, after some thinking, I have the following scheme in mind:
> >
> > {old,}stat{,64} TRACE_STAT TST
> %stat
>
> > {old,}lstat{,64} TRACE_LSTAT TLST
> %lstat
> > {old,new,}fstat{,at}64 TRACE_FSTAT TFST
> %fstat
>
> > {old,new,}{,l,f}stat{,x,at}{,64}
> > TRACE_STAT_LIKE TSTA ("stat alike")
> %%stat
>
> > statfs{,64} TRACE_STATFS TSF
> %statfs
>
> > fstatfs{,64} TRACE_FSTATFS TFSF
>
> %fstatfs
> > {,f}statfs{,64}, ustat TRACE_STATFS_LIKE TSFA ("statfs alike")
> >
> %%statfs
>
> > Calls with bsd43_/osf_/posix_/svr4_/sysv_ prefixes go to the
> > corresponding calls without them.
> >
> > I'm not really sure about {svr4,sysv}_{,f}statvfs, but they are decoded as
> > printargs and looks like they should be related to {,f}statfs calls.
> >
> > Does it make any sense?
>
> Yes, it looks good...:)
> Please review that for the corresponding option in -e trace=option is
> marked correct described after each of your naming scheme.
Looks good to me.
> Thank you.
>
> Below is attached a patch corresonding to -e trace=%statfs option.
> Please review.
git am patch fails to apply this patch with the following diagnostics:
.git/rebase-apply/patch:778: trailing whitespace.
17 statfs
fatal: 1 line adds whitespace errors.
> From 6d7a5793808fd78db028985e8de68168ef4870c3 Mon Sep 17 00:00:00 2001
> From: Abhishek Tiwari <erabhishektiwarics at gmail.com>
> Date: Sat, 18 Mar 2017 17:29:34 +0530
> Subject: [PATCH v5] Implement -e trace=%statfs option for tracing statfs like
> syscalls
>
> This commit adds %statsfs option to trace statfs, statfs64, statvfs, statvfs64 syscalls. The following commands update linux/*/syscallent* files:
>
> git grep -Fl 'statfs' linux/*/syscallent* | xargs sed -i 's/TD\(,[[:space:]]*SEN(statfs\)/TD|TSF\1/'
> git grep -Fl 'statfs' linux/*/syscallent* | xargs sed -i 's/TF\(,[[:space:]]*SEN(statfs\)/TF|TSF\1/'
> git grep -Fl 'statfs' linux/*/syscallent* | xargs sed -i 's/0\(,[[:space:]]*SEN(osf_statfs\)/TSF\1/'
> git grep -Fl 'statfs' linux/*/syscallent* | xargs sed -i 's/0\(,[[:space:]]*SEN(.*_statfs\)/TSF\1/'
> git grep -Fl 'statvfs' linux/*/syscallent* | xargs sed -i 's/0\(,[[:space:]]*SEN(.*_statvfs\)/TSF\1/'
>
> * sysent.h (TRACE_STATFS): New definition.
> * syscall.c: Alias TSF to TRACE_STATFS around syscallent.h inclusion.
> * linux/32/syscallent.h: Add TSF flag for statfs-like sycalls.
> * linux/64/syscallent.h: Likewise.
> * linux/aarch64/syscallent.h: Likewise.
> * linux/alpha/syscallent.h: Likewise.
> * linux/arm/syscallent.h: Likewise.
> * linux/avr32/syscallent.h: Likewise.
> * linux/bfin/syscallent.h: Likewise.
> * linux/crisv10/syscallent.h: Likewise.
> * linux/hppa/syscallent.h: Likewise.
> * linux/i386/syscallent.h: Likewise.
> * linux/ia64/syscallent.h: Likewise.
> * linux/m68k/syscallent.h: Likewise.
> * linux/microblaze/syscallent.h: Likewise.
> * linux/mips/syscallent-compat.h: Likewise.
> * linux/mips/syscallent-n32.h: Likewise.
> * linux/mips/syscallent-n64.h: Likewise.
> * linux/mips/syscallent-o32.h: Likewise.
> * linux/powerpc/syscallent.h: Likewise.
> * linux/powerpc64/syscallent.h: Likewise.
> * linux/s390/syscallent.h: Likewise.
> * linux/s390x/syscallent.h: Likewise.
> * linux/sh/syscallent.h: Likewise.
> * linux/sh64/syscallent.h: Likewise.
> * linux/sparc/syscallent.h: Likewise.
> * linux/sparc64/syscallent.h: Likewise.
> * linux/x32/syscallent.h: Likewise.
> * linux/x86_64/syscallent.h: Likewise.
> * linux/xtensa/syscallent.h: Likewise.
> * qualify.c (lookup_class): Add SCHED_STATFS for "%statfs"
> * strace.1 (.SS Filtering): Add information about %statfs syscall class.
> * tests/Makefile.am: (DECODER_TESTS): Add trace_statfs.test.
> * tests/ksysent.c: Define TST to 0.
> * tests/nsyscalls.c: Likewise.
> * tests/trace_statfs.test: New test.
> ---
> linux/32/syscallent.h | 2 +-
> linux/64/syscallent.h | 2 +-
> linux/aarch64/syscallent.h | 2 +-
> linux/alpha/syscallent.h | 6 ++---
> linux/arm/syscallent.h | 4 ++--
> linux/avr32/syscallent.h | 4 ++--
> linux/bfin/syscallent.h | 4 ++--
> linux/crisv10/syscallent.h | 4 ++--
> linux/hppa/syscallent.h | 4 ++--
> linux/i386/syscallent.h | 4 ++--
> linux/ia64/syscallent.h | 4 ++--
> linux/m68k/syscallent.h | 4 ++--
> linux/microblaze/syscallent.h | 4 ++--
> linux/mips/syscallent-compat.h | 12 +++++-----
> linux/mips/syscallent-n32.h | 4 ++--
> linux/mips/syscallent-n64.h | 2 +-
> linux/mips/syscallent-o32.h | 4 ++--
> linux/powerpc/syscallent.h | 4 ++--
> linux/powerpc64/syscallent.h | 4 ++--
> linux/s390/syscallent.h | 4 ++--
> linux/s390x/syscallent.h | 4 ++--
> linux/sh/syscallent.h | 4 ++--
> linux/sh64/syscallent.h | 4 ++--
> linux/sparc/syscallent.h | 4 ++--
> linux/sparc64/syscallent.h | 4 ++--
> linux/x32/syscallent.h | 2 +-
> linux/x86_64/syscallent.h | 2 +-
> linux/xtensa/syscallent.h | 4 ++--
> qualify.c | 1 +
> strace.1 | 3 +++
> syscall.c | 2 ++
> sysent.h | 1 +
> tests/Makefile.am | 1 +
> tests/ksysent.c | 1 +
> tests/nsyscalls.c | 1 +
> tests/trace_statfs.test | 54 ++++++++++++++++++++++++++++++++++++++++++
> 36 files changed, 119 insertions(+), 55 deletions(-)
> create mode 100755 tests/trace_statfs.test
>
> diff --git a/linux/32/syscallent.h b/linux/32/syscallent.h
> index a8f9510..7beef25 100644
> --- a/linux/32/syscallent.h
> +++ b/linux/32/syscallent.h
> @@ -44,7 +44,7 @@
> [ 40] = { 5, TF, SEN(mount), "mount" },
> [ 41] = { 2, TF, SEN(pivotroot), "pivot_root" },
> [ 42] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
> -[ 43] = { 3, TF, SEN(statfs64), "statfs64" },
> +[ 43] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [ 44] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [ 45] = { 3, TF, SEN(truncate64), "truncate64" },
> [ 46] = { 3, TD, SEN(ftruncate64), "ftruncate64" },
> diff --git a/linux/64/syscallent.h b/linux/64/syscallent.h
> index b5a09d4..e377431 100644
> --- a/linux/64/syscallent.h
> +++ b/linux/64/syscallent.h
> @@ -41,7 +41,7 @@
> [ 40] = { 5, TF, SEN(mount), "mount" },
> [ 41] = { 2, TF, SEN(pivotroot), "pivot_root" },
> [ 42] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
> -[ 43] = { 2, TF, SEN(statfs), "statfs" },
> +[ 43] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [ 44] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [ 45] = { 2, TF, SEN(truncate), "truncate" },
> [ 46] = { 2, TD, SEN(ftruncate), "ftruncate" },
> diff --git a/linux/aarch64/syscallent.h b/linux/aarch64/syscallent.h
> index 6b23f8c..e760fdc 100644
> --- a/linux/aarch64/syscallent.h
> +++ b/linux/aarch64/syscallent.h
> @@ -45,7 +45,7 @@
> [1053] = { 4, TD, SEN(fadvise64), "fadvise64" },
> [1054] = { 4, TD|TF, SEN(newfstatat), "newfstatat" },
> [1055] = { 2, TD, SEN(fstatfs), "fstatfs" },
> -[1056] = { 2, TF, SEN(statfs), "statfs" },
> +[1056] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [1057] = { 3, TD, SEN(lseek), "lseek" },
> [1058] = { 6, TD|TM|SI, SEN(mmap), "mmap" },
> [1059] = { 1, 0, SEN(alarm), "alarm" },
> diff --git a/linux/alpha/syscallent.h b/linux/alpha/syscallent.h
> index 4449f22..18f1866 100644
> --- a/linux/alpha/syscallent.h
> +++ b/linux/alpha/syscallent.h
> @@ -185,7 +185,7 @@
> [157] = { 5, 0, SEN(printargs), "osf_sigwaitprim" }, /*not implemented */
> [158] = { 5, 0, SEN(printargs), "osf_nfssvc" }, /*not implemented */
> [159] = { 4, 0, SEN(printargs), "osf_getdirentries" },
> -[160] = { 3, 0, SEN(osf_statfs), "osf_statfs" },
> +[160] = { 3, TSF, SEN(osf_statfs), "osf_statfs" },
> [161] = { 3, 0, SEN(osf_fstatfs), "osf_fstatfs" },
> [162] = { },
> [163] = { 5, 0, SEN(printargs), "osf_asynch_daemon" }, /*not implemented */
> @@ -230,7 +230,7 @@
> [224] = { 5, 0, SEN(printargs), "osf_stat" }, /*not implemented */
> [225] = { 5, 0, SEN(printargs), "osf_lstat" }, /*not implemented */
> [226] = { 5, 0, SEN(printargs), "osf_fstat" }, /*not implemented */
> -[227] = { 3, 0, SEN(osf_statfs), "osf_statfs64" }, /*not implemented */
> +[227] = { 3, TSF, SEN(osf_statfs), "osf_statfs64" }, /*not implemented */
> [228] = { 3, 0, SEN(osf_fstatfs), "osf_fstatfs64" }, /*not implemented */
> [229 ... 232] = { },
> [233] = { 1, 0, SEN(getpgid), "getpgid" },
> @@ -291,7 +291,7 @@
> [325] = { 1, NF, SEN(setfsuid), "setfsuid" },
> [326] = { 1, NF, SEN(setfsgid), "setfsgid" },
> [327] = { 2, 0, SEN(ustat), "ustat" },
> -[328] = { 2, TF, SEN(statfs), "statfs" },
> +[328] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [329] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [330] = { 2, TSC, SEN(sched_setparam), "sched_setparam" },
> [331] = { 2, TSC, SEN(sched_getparam), "sched_getparam" },
> diff --git a/linux/arm/syscallent.h b/linux/arm/syscallent.h
> index ed9ec9a..ef11d5f 100644
> --- a/linux/arm/syscallent.h
> +++ b/linux/arm/syscallent.h
> @@ -125,7 +125,7 @@
> [ 96] = { 2, 0, SEN(getpriority), "getpriority" },
> [ 97] = { 3, 0, SEN(setpriority), "setpriority" },
> [ 98] = { 4, 0, SEN(profil), "profil" },
> -[ 99] = { 2, TF, SEN(statfs), "statfs" },
> +[ 99] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [101] = { 3, 0, SEN(ioperm), "ioperm" },
> [102] = { 2, TD, SEN(socketcall), "socketcall" },
> @@ -290,7 +290,7 @@
> [263] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
> [264] = { 2, 0, SEN(clock_getres), "clock_getres" },
> [265] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
> -[266] = { 3, TF, SEN(statfs64), "statfs64" },
> +[266] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [267] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [268] = { 3, TS, SEN(tgkill), "tgkill" },
> [269] = { 2, TF, SEN(utimes), "utimes" },
> diff --git a/linux/avr32/syscallent.h b/linux/avr32/syscallent.h
> index 7f50934..6f49054 100644
> --- a/linux/avr32/syscallent.h
> +++ b/linux/avr32/syscallent.h
> @@ -124,7 +124,7 @@
> [ 96] = { 2, 0, SEN(getpriority), "getpriority" },
> [ 97] = { 3, 0, SEN(setpriority), "setpriority" },
> [ 98] = { 4, TP, SEN(wait4), "wait4" },
> -[ 99] = { 2, TF, SEN(statfs), "statfs" },
> +[ 99] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [101] = { 0, 0, SEN(vhangup), "vhangup" },
> [102] = { 2, TS, SEN(sigaltstack), "sigaltstack" },
> @@ -244,7 +244,7 @@
> [216] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
> [217] = { 2, 0, SEN(clock_getres), "clock_getres" },
> [218] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
> -[219] = { 3, TF, SEN(statfs64), "statfs64" },
> +[219] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [220] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [221] = { 3, TS, SEN(tgkill), "tgkill" },
> [222] = { },
> diff --git a/linux/bfin/syscallent.h b/linux/bfin/syscallent.h
> index 800b943..a70dd8b 100644
> --- a/linux/bfin/syscallent.h
> +++ b/linux/bfin/syscallent.h
> @@ -125,7 +125,7 @@
> [ 96] = { 2, 0, SEN(getpriority), "getpriority" },
> [ 97] = { 3, 0, SEN(setpriority), "setpriority" },
> [ 98] = { 4, 0, SEN(profil), "profil" },
> -[ 99] = { 2, TF, SEN(statfs), "statfs" },
> +[ 99] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [101] = { 3, 0, SEN(ioperm), "ioperm" },
> [102] = { 2, TD, SEN(socketcall), "socketcall" },
> @@ -294,7 +294,7 @@
> [266] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
> [267] = { 2, 0, SEN(clock_getres), "clock_getres" },
> [268] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
> -[269] = { 3, TF, SEN(statfs64), "statfs64" },
> +[269] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [270] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [271] = { 3, TS, SEN(tgkill), "tgkill" },
> [272] = { 2, TF, SEN(utimes), "utimes" },
> diff --git a/linux/crisv10/syscallent.h b/linux/crisv10/syscallent.h
> index 96fb6bd..695b4d0 100644
> --- a/linux/crisv10/syscallent.h
> +++ b/linux/crisv10/syscallent.h
> @@ -97,7 +97,7 @@
> [ 96] = { 2, 0, SEN(getpriority), "getpriority" },
> [ 97] = { 3, 0, SEN(setpriority), "setpriority" },
> [ 98] = { 4, 0, SEN(profil), "profil" },
> -[ 99] = { 2, TF, SEN(statfs), "statfs" },
> +[ 99] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [101] = { 3, 0, SEN(ioperm), "ioperm" },
> [102] = { 2, TD, SEN(socketcall), "socketcall" },
> @@ -262,7 +262,7 @@
> [265] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
> [266] = { 2, 0, SEN(clock_getres), "clock_getres" },
> [267] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
> -[268] = { 3, TF, SEN(statfs64), "statfs64" },
> +[268] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [269] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [270] = { 3, TS, SEN(tgkill), "tgkill" },
> [271] = { 2, TF, SEN(utimes), "utimes" },
> diff --git a/linux/hppa/syscallent.h b/linux/hppa/syscallent.h
> index f59ea57..9ff420c 100644
> --- a/linux/hppa/syscallent.h
> +++ b/linux/hppa/syscallent.h
> @@ -101,7 +101,7 @@
> [ 96] = { 2, 0, SEN(getpriority), "getpriority" },
> [ 97] = { 3, 0, SEN(setpriority), "setpriority" },
> [ 98] = { 4, TN, SEN(recv), "recv" },
> -[ 99] = { 2, TF, SEN(statfs), "statfs" },
> +[ 99] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [101] = { 2, TF, SEN(stat64), "stat64" },
> [102] = { },
> @@ -300,7 +300,7 @@
> [295] = { 6, TM, SEN(move_pages), "move_pages" },
> [296] = { 3, 0, SEN(getcpu), "getcpu" },
> [297] = { 6, TD, SEN(epoll_pwait), "epoll_pwait" },
> -[298] = { 3, TF, SEN(statfs64), "statfs64" },
> +[298] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [299] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [300] = { 4, 0, SEN(kexec_load), "kexec_load" },
> [301] = { 4, TD|TF, SEN(utimensat), "utimensat" },
> diff --git a/linux/i386/syscallent.h b/linux/i386/syscallent.h
> index 8ef1b1c..a79dcc8 100644
> --- a/linux/i386/syscallent.h
> +++ b/linux/i386/syscallent.h
> @@ -125,7 +125,7 @@
> [ 96] = { 2, 0, SEN(getpriority), "getpriority" },
> [ 97] = { 3, 0, SEN(setpriority), "setpriority" },
> [ 98] = { 4, 0, SEN(profil), "profil" },
> -[ 99] = { 2, TF, SEN(statfs), "statfs" },
> +[ 99] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [101] = { 3, 0, SEN(ioperm), "ioperm" },
> [102] = { 2, TD, SEN(socketcall), "socketcall" },
> @@ -293,7 +293,7 @@
> [265] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
> [266] = { 2, 0, SEN(clock_getres), "clock_getres" },
> [267] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
> -[268] = { 3, TF, SEN(statfs64), "statfs64" },
> +[268] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [269] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [270] = { 3, TS, SEN(tgkill), "tgkill" },
> [271] = { 2, TF, SEN(utimes), "utimes" },
> diff --git a/linux/ia64/syscallent.h b/linux/ia64/syscallent.h
> index 47b71d6..96e5fd3 100644
> --- a/linux/ia64/syscallent.h
> +++ b/linux/ia64/syscallent.h
> @@ -120,7 +120,7 @@
> [1100] = { 3, TD, SEN(fchown), "fchown" },
> [1101] = { 2, 0, SEN(getpriority), "getpriority" },
> [1102] = { 3, 0, SEN(setpriority), "setpriority" },
> -[1103] = { 2, TF, SEN(statfs), "statfs" },
> +[1103] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [1104] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [1105] = { 0, NF, SEN(gettid), "gettid" },
> [1106] = { 3, TI, SEN(semget), "semget" },
> @@ -275,7 +275,7 @@
> [1255] = { 2, 0, SEN(clock_getres), "clock_getres" },
> [1256] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
> [1257] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> -[1258] = { 3, TF, SEN(statfs64), "statfs64" },
> +[1258] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [1259] = { 6, TM, SEN(mbind), "mbind" },
> [1260] = { 5, TM, SEN(get_mempolicy), "get_mempolicy" },
> [1261] = { 3, TM, SEN(set_mempolicy), "set_mempolicy" },
> diff --git a/linux/m68k/syscallent.h b/linux/m68k/syscallent.h
> index 8e7dd97..42c1d1a 100644
> --- a/linux/m68k/syscallent.h
> +++ b/linux/m68k/syscallent.h
> @@ -125,7 +125,7 @@
> [ 96] = { 2, 0, SEN(getpriority), "getpriority" },
> [ 97] = { 3, 0, SEN(setpriority), "setpriority" },
> [ 98] = { 4, 0, SEN(profil), "profil" },
> -[ 99] = { 2, TF, SEN(statfs), "statfs" },
> +[ 99] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [101] = { 3, 0, SEN(ioperm), "ioperm" },
> [102] = { 2, TD, SEN(socketcall), "socketcall" },
> @@ -288,7 +288,7 @@
> [260] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
> [261] = { 2, 0, SEN(clock_getres), "clock_getres" },
> [262] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
> -[263] = { 3, TF, SEN(statfs64), "statfs64" },
> +[263] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [264] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [265] = { 3, TS, SEN(tgkill), "tgkill" },
> [266] = { 2, TF, SEN(utimes), "utimes" },
> diff --git a/linux/microblaze/syscallent.h b/linux/microblaze/syscallent.h
> index 2a59eb3..cb5bd78 100644
> --- a/linux/microblaze/syscallent.h
> +++ b/linux/microblaze/syscallent.h
> @@ -125,7 +125,7 @@
> [ 96] = { 2, 0, SEN(getpriority), "getpriority" },
> [ 97] = { 3, 0, SEN(setpriority), "setpriority" },
> [ 98] = { 4, 0, SEN(profil), "profil" },
> -[ 99] = { 2, TF, SEN(statfs), "statfs" },
> +[ 99] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [101] = { 3, 0, SEN(ioperm), "ioperm" },
> [102] = { 2, TD, SEN(socketcall), "socketcall" },
> @@ -293,7 +293,7 @@
> [265] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
> [266] = { 2, 0, SEN(clock_getres), "clock_getres" },
> [267] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
> -[268] = { 3, TF, SEN(statfs64), "statfs64" },
> +[268] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [269] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [270] = { 3, TS, SEN(tgkill), "tgkill" },
> [271] = { 2, TF, SEN(utimes), "utimes" },
> diff --git a/linux/mips/syscallent-compat.h b/linux/mips/syscallent-compat.h
> index 82a373b..ac408fd 100644
> --- a/linux/mips/syscallent-compat.h
> +++ b/linux/mips/syscallent-compat.h
> @@ -33,7 +33,7 @@
> [ 32] = { 0, 0, SEN(printargs), "svr4_gtty" },
> [ 33] = { 0, 0, SEN(printargs), "svr4_access" },
> [ 34] = { 0, 0, SEN(printargs), "svr4_nice" },
> -[ 35] = { 0, 0, SEN(printargs), "svr4_statfs" },
> +[ 35] = { 0, TSF, SEN(printargs), "svr4_statfs" },
> [ 36] = { 0, 0, SEN(printargs), "svr4_sync" },
> [ 37] = { 0, 0, SEN(printargs), "svr4_kill" },
> [ 38] = { 0, 0, SEN(printargs), "svr4_fstatfs" },
> @@ -96,7 +96,7 @@
> [ 100] = { 0, 0, SEN(printargs), "svr4_setcontext" },
> [ 101] = { 0, 0, SEN(printargs), "svr4_evsys" },
> [ 102] = { 0, 0, SEN(printargs), "svr4_evtrapret" },
> -[ 103] = { 0, 0, SEN(printargs), "svr4_statvfs" },
> +[ 103] = { 0, TSF, SEN(printargs), "svr4_statvfs" },
> [ 104] = { 0, 0, SEN(printargs), "svr4_fstatvfs" },
> [ 105] = { },
> [ 106] = { 0, 0, SEN(printargs), "svr4_nfssys" },
> @@ -184,7 +184,7 @@
> [1032] = { 0, 0, SEN(printargs), "sysv_gtty" },
> [1033] = { 0, 0, SEN(printargs), "sysv_access" },
> [1034] = { 0, 0, SEN(printargs), "sysv_nice" },
> -[1035] = { 0, 0, SEN(printargs), "sysv_statfs" },
> +[1035] = { 0, TSF, SEN(printargs), "sysv_statfs" },
> [1036] = { 0, 0, SEN(printargs), "sysv_sync" },
> [1037] = { 0, 0, SEN(printargs), "sysv_kill" },
> [1038] = { 0, 0, SEN(printargs), "sysv_fstatfs" },
> @@ -318,7 +318,7 @@
> [1171] = { 0, 0, SEN(printargs), "sysv_sigstack" },
> [1172] = { 0, 0, SEN(printargs), "sysv_sigaltstack" },
> [1173] = { 0, 0, SEN(printargs), "sysv_sigsendset" },
> -[1174] = { 0, 0, SEN(printargs), "sysv_statvfs" },
> +[1174] = { 0, TSF, SEN(printargs), "sysv_statvfs" },
> [1175] = { 0, 0, SEN(printargs), "sysv_fstatvfs" },
> [1176] = { 0, 0, SEN(printargs), "sysv_getpmsg" },
> [1177] = { 0, 0, SEN(printargs), "sysv_putpmsg" },
> @@ -494,7 +494,7 @@
> [2157] = { 0, 0, SEN(printargs), "bsd43_nfs_mount" },
> [2158] = { 0, 0, SEN(printargs), "bsd43_nfs_svc" },
> [2159] = { 0, 0, SEN(printargs), "bsd43_getdirentries" },
> -[2160] = { 0, 0, SEN(printargs), "bsd43_statfs" },
> +[2160] = { 0, TSF, SEN(printargs), "bsd43_statfs" },
> [2161] = { 0, 0, SEN(printargs), "bsd43_fstatfs" },
> [2162] = { 0, 0, SEN(printargs), "bsd43_unmount" },
> [2163] = { 0, 0, SEN(printargs), "bsd43_async_daemon" },
> @@ -562,7 +562,7 @@
> [3032] = { 0, 0, SEN(printargs), "posix_gtty" },
> [3033] = { 0, 0, SEN(printargs), "posix_access" },
> [3034] = { 0, 0, SEN(printargs), "posix_nice" },
> -[3035] = { 0, 0, SEN(printargs), "posix_statfs" },
> +[3035] = { 0, TSF, SEN(printargs), "posix_statfs" },
> [3036] = { 0, 0, SEN(printargs), "posix_sync" },
> [3037] = { 0, 0, SEN(printargs), "posix_kill" },
> [3038] = { 0, 0, SEN(printargs), "posix_fstatfs" },
> diff --git a/linux/mips/syscallent-n32.h b/linux/mips/syscallent-n32.h
> index 052af4f..dd6429b 100644
> --- a/linux/mips/syscallent-n32.h
> +++ b/linux/mips/syscallent-n32.h
> @@ -134,7 +134,7 @@
> [6131] = { 3, TF, SEN(mknod), "mknod" },
> [6132] = { 1, NF, SEN(personality), "personality" },
> [6133] = { 2, 0, SEN(ustat), "ustat" },
> -[6134] = { 2, TF, SEN(statfs), "statfs" },
> +[6134] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [6135] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [6136] = { 3, 0, SEN(sysfs), "sysfs" },
> [6137] = { 2, 0, SEN(getpriority), "getpriority" },
> @@ -217,7 +217,7 @@
> [6214] = { 0, 0, SEN(restart_syscall), "restart_syscall" },
> [6215] = { 4, TI, SEN(semtimedop), "semtimedop" },
> [6216] = { 4, TD, SEN(fadvise64_64), "fadvise64" },
> -[6217] = { 3, TF, SEN(statfs64), "statfs64" },
> +[6217] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [6218] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [6219] = { 4, TD|TN, SEN(sendfile64), "sendfile64" },
> [6220] = { 3, 0, SEN(timer_create), "timer_create" },
> diff --git a/linux/mips/syscallent-n64.h b/linux/mips/syscallent-n64.h
> index fdd778b..d5065ad 100644
> --- a/linux/mips/syscallent-n64.h
> +++ b/linux/mips/syscallent-n64.h
> @@ -134,7 +134,7 @@
> [5131] = { 3, TF, SEN(mknod), "mknod" },
> [5132] = { 1, NF, SEN(personality), "personality" },
> [5133] = { 2, 0, SEN(ustat), "ustat" },
> -[5134] = { 2, TF, SEN(statfs), "statfs" },
> +[5134] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [5135] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [5136] = { 3, 0, SEN(sysfs), "sysfs" },
> [5137] = { 2, 0, SEN(getpriority), "getpriority" },
> diff --git a/linux/mips/syscallent-o32.h b/linux/mips/syscallent-o32.h
> index 509a719..b6b5626 100644
> --- a/linux/mips/syscallent-o32.h
> +++ b/linux/mips/syscallent-o32.h
> @@ -99,7 +99,7 @@
> [4096] = { 2, 0, SEN(getpriority), "getpriority" },
> [4097] = { 3, 0, SEN(setpriority), "setpriority" },
> [4098] = { 0, 0, SEN(profil), "profil" },
> -[4099] = { 2, TF, SEN(statfs), "statfs" },
> +[4099] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [4100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [4101] = { 3, 0, SEN(ioperm), "ioperm" },
> [4102] = { 2, TD, SEN(socketcall), "socketcall" },
> @@ -255,7 +255,7 @@
> [4252] = { 1, 0, SEN(set_tid_address), "set_tid_address" },
> [4253] = { 0, 0, SEN(restart_syscall), "restart_syscall" },
> [4254] = { 7, TD, SEN(fadvise64_64), "fadvise64" },
> -[4255] = { 3, TF, SEN(statfs64), "statfs64" },
> +[4255] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [4256] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [4257] = { 3, 0, SEN(timer_create), "timer_create" },
> [4258] = { 4, 0, SEN(timer_settime), "timer_settime" },
> diff --git a/linux/powerpc/syscallent.h b/linux/powerpc/syscallent.h
> index 1431f8a..8d2b98f 100644
> --- a/linux/powerpc/syscallent.h
> +++ b/linux/powerpc/syscallent.h
> @@ -125,7 +125,7 @@
> [ 96] = { 2, 0, SEN(getpriority), "getpriority" },
> [ 97] = { 3, 0, SEN(setpriority), "setpriority" },
> [ 98] = { 4, 0, SEN(profil), "profil" },
> -[ 99] = { 2, TF, SEN(statfs), "statfs" },
> +[ 99] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [101] = { 3, 0, SEN(ioperm), "ioperm" },
> [102] = { 2, TD, SEN(socketcall), "socketcall" },
> @@ -278,7 +278,7 @@
> [249] = { 2, 0, SEN(printargs), "swapcontext" },
> [250] = { 3, TS, SEN(tgkill), "tgkill" },
> [251] = { 2, TF, SEN(utimes), "utimes" },
> -[252] = { 3, TF, SEN(statfs64), "statfs64" },
> +[252] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [253] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [254] = { 6, TD, SEN(fadvise64_64), "fadvise64_64" },
> [255] = { 1, 0, SEN(printargs), "rtas" },
> diff --git a/linux/powerpc64/syscallent.h b/linux/powerpc64/syscallent.h
> index eae3b57..ee2ceed 100644
> --- a/linux/powerpc64/syscallent.h
> +++ b/linux/powerpc64/syscallent.h
> @@ -125,7 +125,7 @@
> [ 96] = { 2, 0, SEN(getpriority), "getpriority" },
> [ 97] = { 3, 0, SEN(setpriority), "setpriority" },
> [ 98] = { 4, 0, SEN(profil), "profil" },
> -[ 99] = { 2, TF, SEN(statfs), "statfs" },
> +[ 99] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [101] = { 3, 0, SEN(ioperm), "ioperm" },
> [102] = { 2, TD, SEN(socketcall), "socketcall" },
> @@ -273,7 +273,7 @@
> [249] = { 2, 0, SEN(printargs), "swapcontext" },
> [250] = { 3, TS, SEN(tgkill), "tgkill" },
> [251] = { 2, TF, SEN(utimes), "utimes" },
> -[252] = { 3, TF, SEN(statfs64), "statfs64" },
> +[252] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [253] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [254] = { },
> [255] = { 1, 0, SEN(printargs), "rtas" },
> diff --git a/linux/s390/syscallent.h b/linux/s390/syscallent.h
> index 105e511..2194696 100644
> --- a/linux/s390/syscallent.h
> +++ b/linux/s390/syscallent.h
> @@ -127,7 +127,7 @@
> [ 96] = { 2, 0, SEN(getpriority), "getpriority" },
> [ 97] = { 3, 0, SEN(setpriority), "setpriority" },
> [ 98] = { },
> -[ 99] = { 2, TF, SEN(statfs), "statfs" },
> +[ 99] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [101] = { 3, 0, SEN(ioperm), "ioperm" },
> [102] = { 2, TD, SEN(socketcall), "socketcall" },
> @@ -293,7 +293,7 @@
> [262] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
> [263] = { 5, 0, SEN(vserver), "vserver" },
> [264] = { 6, TD, SEN(fadvise64_64), "fadvise64_64" },
> -[265] = { 3, TF, SEN(statfs64), "statfs64" },
> +[265] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [266] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [267] = { 5, TM|SI, SEN(remap_file_pages), "remap_file_pages" },
> [268] = { 6, TM, SEN(mbind), "mbind" },
> diff --git a/linux/s390x/syscallent.h b/linux/s390x/syscallent.h
> index d5b5459..e8d47cb 100644
> --- a/linux/s390x/syscallent.h
> +++ b/linux/s390x/syscallent.h
> @@ -121,7 +121,7 @@
> [ 96] = { 2, 0, SEN(getpriority), "getpriority" },
> [ 97] = { 3, 0, SEN(setpriority), "setpriority" },
> [ 98] = { },
> -[ 99] = { 2, TF, SEN(statfs), "statfs" },
> +[ 99] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [101] = { },
> [102] = { 2, TD, SEN(socketcall), "socketcall" },
> @@ -277,7 +277,7 @@
> [262] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
> [263] = { 5, 0, SEN(vserver), "vserver" },
> [264] = { },
> -[265] = { 3, TF, SEN(statfs64), "statfs64" },
> +[265] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [266] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [267] = { 5, TM|SI, SEN(remap_file_pages), "remap_file_pages" },
> [268] = { 6, TM, SEN(mbind), "mbind" },
> diff --git a/linux/sh/syscallent.h b/linux/sh/syscallent.h
> index 1388416..89f1e19 100644
> --- a/linux/sh/syscallent.h
> +++ b/linux/sh/syscallent.h
> @@ -127,7 +127,7 @@
> [ 96] = { 2, 0, SEN(getpriority), "getpriority" },
> [ 97] = { 3, 0, SEN(setpriority), "setpriority" },
> [ 98] = { 4, 0, SEN(profil), "profil" },
> -[ 99] = { 2, TF, SEN(statfs), "statfs" },
> +[ 99] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [101] = { 3, 0, SEN(ioperm), "ioperm" },
> [102] = { 2, TD, SEN(socketcall), "socketcall" },
> @@ -293,7 +293,7 @@
> [265] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
> [266] = { 2, 0, SEN(clock_getres), "clock_getres" },
> [267] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
> -[268] = { 3, TF, SEN(statfs64), "statfs64" },
> +[268] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [269] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [270] = { 3, TS, SEN(tgkill), "tgkill" },
> [271] = { 2, TF, SEN(utimes), "utimes" },
> diff --git a/linux/sh64/syscallent.h b/linux/sh64/syscallent.h
> index e935104..42f2199 100644
> --- a/linux/sh64/syscallent.h
> +++ b/linux/sh64/syscallent.h
> @@ -125,7 +125,7 @@
> [ 96] = { 2, 0, SEN(getpriority), "getpriority" },
> [ 97] = { 3, 0, SEN(setpriority), "setpriority" },
> [ 98] = { 4, 0, SEN(profil), "profil" },
> -[ 99] = { 2, TF, SEN(statfs), "statfs" },
> +[ 99] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [100] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [101] = { 3, 0, SEN(ioperm), "ioperm" },
> [102] = { 2, TD, SEN(socketcall), "socketcall" },
> @@ -319,7 +319,7 @@
> [293] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
> [294] = { 2, 0, SEN(clock_getres), "clock_getres" },
> [295] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
> -[296] = { 3, TF, SEN(statfs64), "statfs64" },
> +[296] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [297] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [298] = { 3, TS, SEN(tgkill), "tgkill" },
> [299] = { 2, TF, SEN(utimes), "utimes" },
> diff --git a/linux/sparc/syscallent.h b/linux/sparc/syscallent.h
> index 30d8819..6e0cff6 100644
> --- a/linux/sparc/syscallent.h
> +++ b/linux/sparc/syscallent.h
> @@ -155,7 +155,7 @@
> [154] = { 3, TD, SEN(getdents64), "getdents64" },
> [155] = { 3, TD, SEN(fcntl64), "fcntl64" },
> [156] = { 2, TD, SEN(inotify_rm_watch), "inotify_rm_watch" },
> -[157] = { 2, TF, SEN(statfs), "statfs" },
> +[157] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [158] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [159] = { 1, TF, SEN(umount), "umount" },
> [160] = { 3, TSC, SEN(sched_setaffinity), "sched_set_affinity" },
> @@ -232,7 +232,7 @@
> [231] = { 1, 0, SEN(time), "time" },
> [232] = { 6, TD, SEN(splice), "splice" },
> [233] = { 1, 0, SEN(stime), "stime" },
> -[234] = { 3, TF, SEN(statfs64), "statfs64" },
> +[234] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [235] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [236] = { 5, TD, SEN(llseek), "_llseek" },
> [237] = { 2, TM, SEN(mlock), "mlock" },
> diff --git a/linux/sparc64/syscallent.h b/linux/sparc64/syscallent.h
> index 1137a3e..6bf370e 100644
> --- a/linux/sparc64/syscallent.h
> +++ b/linux/sparc64/syscallent.h
> @@ -153,7 +153,7 @@
> [154] = { 3, TD, SEN(getdents64), "getdents64" },
> [155] = { },
> [156] = { 2, TD, SEN(inotify_rm_watch), "inotify_rm_watch" },
> -[157] = { 2, TF, SEN(statfs), "statfs" },
> +[157] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [158] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [159] = { 1, TF, SEN(umount), "umount" },
> [160] = { 3, TSC, SEN(sched_setaffinity), "sched_set_affinity" },
> @@ -230,7 +230,7 @@
> [231] = { },
> [232] = { 6, TD, SEN(splice), "splice" },
> [233] = { 1, 0, SEN(stime), "stime" },
> -[234] = { 3, TF, SEN(statfs64), "statfs64" },
> +[234] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [235] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [236] = { 5, TD, SEN(llseek), "_llseek" },
> [237] = { 2, TM, SEN(mlock), "mlock" },
> diff --git a/linux/x32/syscallent.h b/linux/x32/syscallent.h
> index 30a684a..6394c4f 100644
> --- a/linux/x32/syscallent.h
> +++ b/linux/x32/syscallent.h
> @@ -135,7 +135,7 @@
> [134] = { 1, TF, SEN(printargs), "64:uselib" },
> [135] = { 1, NF, SEN(personality), "personality" },
> [136] = { 2, 0, SEN(ustat), "ustat" },
> -[137] = { 2, TF, SEN(statfs), "statfs" },
> +[137] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [138] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [139] = { 3, 0, SEN(sysfs), "sysfs" },
> [140] = { 2, 0, SEN(getpriority), "getpriority" },
> diff --git a/linux/x86_64/syscallent.h b/linux/x86_64/syscallent.h
> index 62960d2..1e215aa 100644
> --- a/linux/x86_64/syscallent.h
> +++ b/linux/x86_64/syscallent.h
> @@ -135,7 +135,7 @@
> [134] = { 1, TF, SEN(uselib), "uselib" },
> [135] = { 1, NF, SEN(personality), "personality" },
> [136] = { 2, 0, SEN(ustat), "ustat" },
> -[137] = { 2, TF, SEN(statfs), "statfs" },
> +[137] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [138] = { 2, TD, SEN(fstatfs), "fstatfs" },
> [139] = { 3, 0, SEN(sysfs), "sysfs" },
> [140] = { 2, 0, SEN(getpriority), "getpriority" },
> diff --git a/linux/xtensa/syscallent.h b/linux/xtensa/syscallent.h
> index 63995bc..40bd8f8 100644
> --- a/linux/xtensa/syscallent.h
> +++ b/linux/xtensa/syscallent.h
> @@ -176,9 +176,9 @@
> [181] = { 1, NF, SEN(setfsgid), "setfsgid" },
> [182] = { 3, 0, SEN(sysfs), "sysfs" },
> [183] = { 2, 0, SEN(ustat), "ustat" },
> -[184] = { 2, TF, SEN(statfs), "statfs" },
> +[184] = { 2, TF|TSF, SEN(statfs), "statfs" },
> [185] = { 2, TD, SEN(fstatfs), "fstatfs" },
> -[186] = { 3, TF, SEN(statfs64), "statfs64" },
> +[186] = { 3, TF|TSF, SEN(statfs64), "statfs64" },
> [187] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
> [188] = { 2, 0, SEN(setrlimit), "setrlimit" },
> [189] = { 2, 0, SEN(getrlimit), "getrlimit" },
> diff --git a/qualify.c b/qualify.c
> index b5023f2..692f7ec 100644
> --- a/qualify.c
> +++ b/qualify.c
> @@ -220,6 +220,7 @@ lookup_class(const char *s)
> { "%ipc", TRACE_IPC },
> { "%network", TRACE_NETWORK },
> { "%sched", TRACE_SCHED },
> + { "%statfs", TRACE_STATFS },
> };
>
> unsigned int i;
> diff --git a/strace.1 b/strace.1
> index 9b69ec2..5286ba4 100644
> --- a/strace.1
> +++ b/strace.1
> @@ -429,6 +429,9 @@ Trace all memory mapping related system calls.
> .BR "\-e\ trace" = %sched
> Trace all scheduler-related (sched_*) system calls.
> .TP
> +.BR "\-e\ trace" = %statfs
> +Trace statfs-related (statfs{,64}) system calls.
> +.TP
> \fB\-e\ abbrev\fR=\,\fIset\fR
> Abbreviate the output from printing each member of large structures.
> The default is
> diff --git a/syscall.c b/syscall.c
> index 569055f..2a93731 100644
> --- a/syscall.c
> +++ b/syscall.c
> @@ -77,6 +77,7 @@
> #define TS TRACE_SIGNAL
> #define TM TRACE_MEMORY
> #define TSC TRACE_SCHED
> +#define TSF TRACE_STATFS
> #define NF SYSCALL_NEVER_FAILS
> #define MA MAX_ARGS
> #define SI STACKTRACE_INVALIDATE_CACHE
> @@ -113,6 +114,7 @@ static const struct_sysent sysent2[] = {
> #undef TS
> #undef TM
> #undef TSC
> +#undef TSF
> #undef NF
> #undef MA
> #undef SI
> diff --git a/sysent.h b/sysent.h
> index f4eaa93..00bae67 100644
> --- a/sysent.h
> +++ b/sysent.h
> @@ -22,5 +22,6 @@ typedef struct sysent {
> #define TRACE_INDIRECT_SUBCALL 02000 /* Syscall is an indirect socket/ipc subcall. */
> #define COMPAT_SYSCALL_TYPES 04000 /* A compat syscall that uses compat types. */
> #define TRACE_SCHED 010000 /* Trace scheduler-related syscalls. */
> +#define TRACE_STATFS 040000 /* Trace narrower statfs-related syscalls. */
It is formatted differently comparing to previous records.
>
> #endif /* !STRACE_SYSENT_H */
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index a75b7fc..655ff7c 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -734,6 +734,7 @@ DECODER_TESTS = \
> rt_sigtimedwait.test \
> rt_tgsigqueueinfo.test \
> sched.test \
> + trace_statfs.test \
> sched_get_priority_mxx.test \
> sched_rr_get_interval.test \
> sched_xetaffinity.test \
> diff --git a/tests/ksysent.c b/tests/ksysent.c
> index 252feff..0db235a 100644
> --- a/tests/ksysent.c
> +++ b/tests/ksysent.c
> @@ -41,6 +41,7 @@
> #define TS 0
> #define TM 0
> #define TSC 0
> +#define TSF 0
> #define NF 0
> #define MA 0
> #define SI 0
> diff --git a/tests/nsyscalls.c b/tests/nsyscalls.c
> index c2bdb20..9ed4b0a 100644
> --- a/tests/nsyscalls.c
> +++ b/tests/nsyscalls.c
> @@ -42,6 +42,7 @@
> #define TS 0
> #define TM 0
> #define TSC 0
> +#define TSF 0
> #define NF 0
> #define MA 0
> #define SI 0
> diff --git a/tests/trace_statfs.test b/tests/trace_statfs.test
> new file mode 100755
> index 0000000..2c4c785
> --- /dev/null
> +++ b/tests/trace_statfs.test
> @@ -0,0 +1,54 @@
> +#!/bin/sh
> +
> +# Check how statfs-related syscalls are traced.
> +#
> +# Copyright (c) 2017 The strace developers.
> +# All rights reserved.
> +#
> +# Redistribution and use in source and binary forms, with or without
> +# modification, are permitted provided that the following conditions
> +# are met:
> +# 1. Redistributions of source code must retain the above copyright
> +# notice, this list of conditions and the following disclaimer.
> +# 2. Redistributions in binary form must reproduce the above copyright
> +# notice, this list of conditions and the following disclaimer in the
> +# documentation and/or other materials provided with the distribution.
> +# 3. The name of the author may not be used to endorse or promote products
> +# derived from this software without specific prior written permission.
> +#
> +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
> +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
> +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
> +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
> +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
> +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
> +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> +
> +. "${srcdir=.}/init.sh"
> +
> +while read w i
> +do
> + try_run_prog "./$i" || continue
> + run_strace -a$w -e%statfs ./$i > "$EXP"
> + match_diff "$LOG" "$EXP"
> +done << EOF
> +17 statfs
Tailing whitespace.
I'd also suggest adding stat64 test to this list.
> +EOF
> +
> +echo '+++ exited with 0 +++' > "$EXP"
> +
> +while read w i
> +do
> + try_run_prog "./$i" || continue
> + run_strace -a$w -e%statfs ./$i > /dev/null
> + match_diff "$LOG" "$EXP"
> +done << EOF
> +11 fchdir
> +28 futex
> +10 fsync
> +EOF
> +
> +rm "$EXP"
> --
> 2.7.4
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> Strace-devel mailing list
> Strace-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/strace-devel
More information about the Strace-devel
mailing list