projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add warning about potentially missing O_DIRECT support or bad alignment
[fio.git]
/
fio.h
diff --git
a/fio.h
b/fio.h
index 21d49a6a7e6bed719eb01d601902e16ea691a37e..b19101c20a4924892610bd78b0f6d645f3b93e9b 100644
(file)
--- a/
fio.h
+++ b/
fio.h
@@
-111,6
+111,13
@@
struct thread_stat {
unsigned long long io_bytes[2];
unsigned long runtime[2];
unsigned long total_run_time;
unsigned long long io_bytes[2];
unsigned long runtime[2];
unsigned long total_run_time;
+
+ /*
+ * IO Error related stats
+ */
+ unsigned continue_on_error;
+ unsigned long total_err_count;
+ int first_error;
};
struct bssplit {
};
struct bssplit {
@@
-185,6
+192,7
@@
struct thread_options {
unsigned int thinktime_spin;
unsigned int thinktime_blocks;
unsigned int fsync_blocks;
unsigned int thinktime_spin;
unsigned int thinktime_blocks;
unsigned int fsync_blocks;
+ unsigned int fdatasync_blocks;
unsigned int start_delay;
unsigned long long timeout;
unsigned long long ramp_time;
unsigned int start_delay;
unsigned long long timeout;
unsigned long long ramp_time;
@@
-194,6
+202,7
@@
struct thread_options {
unsigned long long zone_size;
unsigned long long zone_skip;
enum fio_memtype mem_type;
unsigned long long zone_size;
unsigned long long zone_skip;
enum fio_memtype mem_type;
+ unsigned int mem_align;
unsigned int stonewall;
unsigned int new_group;
unsigned int stonewall;
unsigned int new_group;
@@
-241,6
+250,11
@@
struct thread_options {
*/
unsigned int cpuload;
unsigned int cpucycle;
*/
unsigned int cpuload;
unsigned int cpucycle;
+
+ /*
+ * I/O Error handling
+ */
+ unsigned int continue_on_error;
};
#define FIO_VERROR_SIZE 128
};
#define FIO_VERROR_SIZE 128
@@
-369,6
+383,12
@@
struct thread_data {
* For generating file sizes
*/
os_random_state_t file_size_state;
* For generating file sizes
*/
os_random_state_t file_size_state;
+
+ /*
+ * Error counts
+ */
+ unsigned int total_err_count;
+ int first_error;
};
/*
};
/*
@@
-386,10
+406,13
@@
enum {
break; \
int e = (err); \
(td)->error = e; \
break; \
int e = (err); \
(td)->error = e; \
- snprintf(td->verror, sizeof(td->verror) - 1, "file:%s:%d, func=%s, error=%s", __FILE__, __LINE__, (func), (msg)); \
+ if (!(td)->first_error) \
+ snprintf(td->verror, sizeof(td->verror) - 1, "file:%s:%d, func=%s, error=%s", __FILE__, __LINE__, (func), (msg)); \
} while (0)
} while (0)
+#define td_clear_error(td) \
+ (td)->error = 0;
#define td_verror(td, err, func) \
__td_verror((td), (err), strerror((err)), (func))
#define td_vmsg(td, err, msg, func) \
#define td_verror(td, err, func) \
__td_verror((td), (err), strerror((err)), (func))
#define td_vmsg(td, err, msg, func) \
@@
-425,6
+448,15
@@
static inline void fio_ro_check(struct thread_data *td, struct io_u *io_u)
#define MAX_JOBS (1024)
#define MAX_JOBS (1024)
+#define td_non_fatal_error(e) ((e) == EIO || (e) == EILSEQ)
+
+static inline void update_error_count(struct thread_data *td, int err)
+{
+ td->total_err_count++;
+ if (td->total_err_count == 1)
+ td->first_error = err;
+}
+
static inline int should_fsync(struct thread_data *td)
{
if (td->last_was_sync)
static inline int should_fsync(struct thread_data *td)
{
if (td->last_was_sync)
@@
-624,4
+656,9
@@
static inline int should_check_rate(struct thread_data *td,
return ret;
}
return ret;
}
+static inline int is_power_of_2(unsigned int val)
+{
+ return (val != 0 && ((val & (val - 1)) == 0));
+}
+
#endif
#endif