projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'free-dump-options' of https://github.com/floatious/fio
[fio.git]
/
engines
/
filestat.c
diff --git
a/engines/filestat.c
b/engines/filestat.c
index 68a340bd0619907e7cca9f91373d808cb1bf4cef..405f028d11cd383aa48d4e6c3840a592a1074b4b 100644
(file)
--- a/
engines/filestat.c
+++ b/
engines/filestat.c
@@
-5,6
+5,7
@@
* of the file stat.
*/
#include <stdio.h>
* of the file stat.
*/
#include <stdio.h>
+#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
@@
-12,6
+13,7
@@
#include <unistd.h>
#include "../fio.h"
#include "../optgroup.h"
#include <unistd.h>
#include "../fio.h"
#include "../optgroup.h"
+#include "../oslib/statx.h"
struct fc_data {
enum fio_ddir stat_ddir;
struct fc_data {
enum fio_ddir stat_ddir;
@@
-25,7
+27,7
@@
struct filestat_options {
enum {
FIO_FILESTAT_STAT = 1,
FIO_FILESTAT_LSTAT = 2,
enum {
FIO_FILESTAT_STAT = 1,
FIO_FILESTAT_LSTAT = 2,
- /*FIO_FILESTAT_STATX = 3,*/
+ FIO_FILESTAT_STATX = 3,
};
static struct fio_option options[] = {
};
static struct fio_option options[] = {
@@
-45,12
+47,10
@@
static struct fio_option options[] = {
.oval = FIO_FILESTAT_LSTAT,
.help = "Use lstat(2)",
},
.oval = FIO_FILESTAT_LSTAT,
.help = "Use lstat(2)",
},
- /*
{ .ival = "statx",
.oval = FIO_FILESTAT_STATX,
{ .ival = "statx",
.oval = FIO_FILESTAT_STATX,
- .help = "Use statx(2)",
+ .help = "Use statx(2)
if exists
",
},
},
- */
},
.category = FIO_OPT_C_ENGINE,
.group = FIO_OPT_G_FILESTAT,
},
.category = FIO_OPT_C_ENGINE,
.group = FIO_OPT_G_FILESTAT,
@@
-66,6
+66,10
@@
static int stat_file(struct thread_data *td, struct fio_file *f)
struct timespec start;
int do_lat = !td->o.disable_lat;
struct stat statbuf;
struct timespec start;
int do_lat = !td->o.disable_lat;
struct stat statbuf;
+#ifndef WIN32
+ struct statx statxbuf;
+ char *abspath;
+#endif
int ret;
dprint(FD_FILE, "fd stat %s\n", f->file_name);
int ret;
dprint(FD_FILE, "fd stat %s\n", f->file_name);
@@
-89,6
+93,18
@@
static int stat_file(struct thread_data *td, struct fio_file *f)
case FIO_FILESTAT_LSTAT:
ret = lstat(f->file_name, &statbuf);
break;
case FIO_FILESTAT_LSTAT:
ret = lstat(f->file_name, &statbuf);
break;
+ case FIO_FILESTAT_STATX:
+#ifndef WIN32
+ abspath = realpath(f->file_name, NULL);
+ if (abspath) {
+ ret = statx(-1, abspath, 0, STATX_ALL, &statxbuf);
+ free(abspath);
+ } else
+ ret = -1;
+#else
+ ret = -1;
+#endif
+ break;
default:
ret = -1;
break;
default:
ret = -1;
break;