X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=verify-state.h;h=6da1585b24657a60d7357d4f04f6f445f01544f3;hp=458f5809bbc76f0aa7b0cf6ffcdf8b119fc446f8;hb=5faddc64ce0cd3ee272176b02608439d00c145c0;hpb=9e9d41d7e283f23560b5b3a78b899361b13a290a diff --git a/verify-state.h b/verify-state.h index 458f5809..6da1585b 100644 --- a/verify-state.h +++ b/verify-state.h @@ -2,6 +2,9 @@ #define FIO_VERIFY_STATE_H #include +#include +#include +#include "lib/nowarn_snprintf.h" struct thread_rand32_state { uint32_t s[4]; @@ -22,24 +25,20 @@ struct thread_rand_state { /* * For dumping current write state */ -struct thread_io_list { - uint64_t no_comps; - uint64_t depth; - uint64_t numberio; - uint64_t index; - struct thread_rand_state rand; - uint8_t name[64]; - uint64_t offsets[0]; +struct file_comp { + uint64_t fileno; + uint64_t offset; }; -struct thread_io_list_v1 { +struct thread_io_list { uint64_t no_comps; - uint64_t depth; + uint32_t depth; + uint32_t nofiles; uint64_t numberio; uint64_t index; - struct thread_rand32_state rand; + struct thread_rand_state rand; uint8_t name[64]; - uint64_t offsets[0]; + struct file_comp comps[0]; }; struct all_io_list { @@ -47,8 +46,7 @@ struct all_io_list { struct thread_io_list state[0]; }; -#define VSTATE_HDR_VERSION_V1 0x01 -#define VSTATE_HDR_VERSION 0x02 +#define VSTATE_HDR_VERSION 0x03 struct verify_state_hdr { uint64_t version; @@ -58,36 +56,53 @@ struct verify_state_hdr { #define IO_LIST_ALL 0xffffffff +struct io_u; extern struct all_io_list *get_all_io_list(int, size_t *); extern void __verify_save_state(struct all_io_list *, const char *); extern void verify_save_state(int mask); extern int verify_load_state(struct thread_data *, const char *); extern void verify_free_state(struct thread_data *); extern int verify_state_should_stop(struct thread_data *, struct io_u *); -extern void verify_convert_assign_state(struct thread_data *, void *, int); -extern int verify_state_hdr(struct verify_state_hdr *, struct thread_io_list *, - int *); +extern void verify_assign_state(struct thread_data *, void *); +extern int verify_state_hdr(struct verify_state_hdr *, struct thread_io_list *); -static inline size_t __thread_io_list_sz(uint64_t depth) +static inline size_t __thread_io_list_sz(uint32_t depth, uint32_t nofiles) { - return sizeof(struct thread_io_list) + depth * sizeof(uint64_t); + return sizeof(struct thread_io_list) + depth * nofiles * sizeof(struct file_comp); } static inline size_t thread_io_list_sz(struct thread_io_list *s) { - return __thread_io_list_sz(le64_to_cpu(s->depth)); + return __thread_io_list_sz(le32_to_cpu(s->depth), le32_to_cpu(s->nofiles)); } static inline struct thread_io_list *io_list_next(struct thread_io_list *s) { - return (void *) s + thread_io_list_sz(s); + return (struct thread_io_list *)((char *) s + thread_io_list_sz(s)); } static inline void verify_state_gen_name(char *out, size_t size, const char *name, const char *prefix, int num) { - snprintf(out, size, "%s-%s-%d-verify.state", prefix, name, num); + char ename[PATH_MAX]; + char *ptr; + + /* + * Escape '/', just turn them into '.' + */ + ptr = ename; + do { + *ptr = *name; + if (*ptr == '\0') + break; + else if (*ptr == '/') + *ptr = '.'; + ptr++; + name++; + } while (1); + + nowarn_snprintf(out, size, "%s-%s-%d-verify.state", prefix, ename, num); out[size - 1] = '\0'; }