From 52572b6fdd88a9a9349581c03625126dd7de80b0 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Thu, 11 Dec 2014 19:21:54 +0000 Subject: [PATCH] Implement decoding of fallocate FALLOC_FL_* flags * xlat/falloc_flags.in: New file. * configure.ac (AC_CHECK_HEADERS): Add linux/falloc.h. * fallocate.c [HAVE_LINUX_FALLOC_H]: Include . Include xlat/falloc_flags.h. (sys_fallocate): Decode flags. --- configure.ac | 1 + fallocate.c | 24 ++++++++++++++++++++---- xlat/falloc_flags.in | 5 +++++ 3 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 xlat/falloc_flags.in diff --git a/configure.ac b/configure.ac index 8dba8afd..fbd8a83d 100644 --- a/configure.ac +++ b/configure.ac @@ -232,6 +232,7 @@ AC_CHECK_HEADERS(m4_normalize([ elf.h inttypes.h ioctls.h + linux/falloc.h linux/perf_event.h linux/ptrace.h linux/utsname.h diff --git a/fallocate.c b/fallocate.c index c906cc53..990106d2 100644 --- a/fallocate.c +++ b/fallocate.c @@ -1,14 +1,30 @@ #include "defs.h" +#ifdef HAVE_LINUX_FALLOC_H +# include +#endif + +#include "xlat/falloc_flags.h" + int sys_fallocate(struct tcb *tcp) { if (entering(tcp)) { int argn; - printfd(tcp, tcp->u_arg[0]); /* fd */ - tprintf(", %#lo, ", tcp->u_arg[1]); /* mode */ - argn = printllval(tcp, "%llu, ", 2); /* offset */ - printllval(tcp, "%llu", argn); /* len */ + + /* fd */ + printfd(tcp, tcp->u_arg[0]); + tprints(", "); + + /* mode */ + printflags(falloc_flags, tcp->u_arg[1], "FALLOC_FL_???"); + tprints(", "); + + /* offset */ + argn = printllval(tcp, "%llu, ", 2); + + /* len */ + printllval(tcp, "%llu", argn); } return 0; } diff --git a/xlat/falloc_flags.in b/xlat/falloc_flags.in new file mode 100644 index 00000000..ff411bb3 --- /dev/null +++ b/xlat/falloc_flags.in @@ -0,0 +1,5 @@ +FALLOC_FL_KEEP_SIZE +FALLOC_FL_PUNCH_HOLE +FALLOC_FL_NO_HIDE_STALE +FALLOC_FL_COLLAPSE_RANGE +FALLOC_FL_ZERO_RANGE -- 2.40.0