X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=verify.h;h=87675af831b668e6100175cf3ab6ab835f9bce76;hb=5f3bd0fd67254e3750681f0700a0cc162faee500;hp=43de887d0b3004a26b137e3f74910b17c0419626;hpb=e499aedc141da35cf778116d0abcb9cfcd53470c;p=fio.git diff --git a/verify.h b/verify.h index 43de887d..87675af8 100644 --- a/verify.h +++ b/verify.h @@ -7,6 +7,9 @@ enum { VERIFY_NONE = 0, /* no verification */ + VERIFY_HDR_ONLY, /* verify header only, kept for sake of + * compatibility with old configurations + * which use 'verify=meta' */ VERIFY_MD5, /* md5 sum data blocks */ VERIFY_CRC64, /* crc64 sum data blocks */ VERIFY_CRC32, /* crc32 sum data blocks */ @@ -17,9 +20,9 @@ enum { VERIFY_SHA256, /* sha256 sum data blocks */ VERIFY_SHA512, /* sha512 sum data blocks */ VERIFY_XXHASH, /* xxhash sum data blocks */ - VERIFY_META, /* block_num, timestamp etc. */ VERIFY_SHA1, /* sha1 sum data blocks */ VERIFY_PATTERN, /* verify specific patterns */ + VERIFY_PATTERN_NO_HDR, /* verify specific patterns, no hdr */ VERIFY_NULL, /* pretend to verify */ }; @@ -33,6 +36,11 @@ struct verify_header { uint16_t verify_type; uint32_t len; uint64_t rand_seed; + uint64_t offset; + uint32_t time_sec; + uint32_t time_usec; + uint16_t thread; + uint16_t numberio; uint32_t crc32; }; @@ -60,13 +68,6 @@ struct vhdr_crc16 { struct vhdr_crc7 { uint8_t crc7; }; -struct vhdr_meta { - uint64_t offset; - unsigned char thread; - unsigned short numberio; - unsigned long time_sec; - unsigned long time_usec; -}; struct vhdr_xxhash { uint32_t hash; }; @@ -88,10 +89,27 @@ extern void fio_verify_init(struct thread_data *td); extern int verify_async_init(struct thread_data *); extern void verify_async_exit(struct thread_data *); -struct thread_rand_state { +/* + * Callbacks for pasting formats in the pattern buffer + */ +extern int paste_blockoff(char *buf, unsigned int len, void *priv); + +struct thread_rand32_state { uint32_t s[4]; }; +struct thread_rand64_state { + uint64_t s[6]; +}; + +struct thread_rand_state { + uint64_t use64; + union { + struct thread_rand32_state state32; + struct thread_rand64_state state64; + }; +}; + /* * For dumping current write state */ @@ -105,12 +123,23 @@ struct thread_io_list { uint64_t offsets[0]; }; +struct thread_io_list_v1 { + uint64_t no_comps; + uint64_t depth; + uint64_t numberio; + uint64_t index; + struct thread_rand32_state rand; + uint8_t name[64]; + uint64_t offsets[0]; +}; + struct all_io_list { uint64_t threads; struct thread_io_list state[0]; }; -#define VSTATE_HDR_VERSION 0x01 +#define VSTATE_HDR_VERSION_V1 0x01 +#define VSTATE_HDR_VERSION 0x02 struct verify_state_hdr { uint64_t version; @@ -121,16 +150,22 @@ struct verify_state_hdr { #define IO_LIST_ALL 0xffffffff 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(void); +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 *, struct thread_io_list *); -extern int verify_state_hdr(struct verify_state_hdr *, struct thread_io_list *); +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 *); + +static inline size_t __thread_io_list_sz(uint64_t depth) +{ + return sizeof(struct thread_io_list) + depth * sizeof(uint64_t); +} static inline size_t thread_io_list_sz(struct thread_io_list *s) { - return sizeof(*s) + le64_to_cpu(s->depth) * sizeof(uint64_t); + return __thread_io_list_sz(le64_to_cpu(s->depth)); } static inline struct thread_io_list *io_list_next(struct thread_io_list *s)