From: Alberto Faria Date: Tue, 15 Mar 2022 21:06:39 +0000 (+0000) Subject: Properly encode engine flags in thread_data::flags X-Git-Tag: fio-3.30~9^2 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=cf1f424af7d098e8dce9064c8b0faef0aae9cb34;p=fio.git Properly encode engine flags in thread_data::flags We have 16 engine flags and an 18-bit shift, so cast engine flags to unsigned long long before shifting to avoid dropping FIO_ASYNCIO_SYNC_TRIM and FIO_NO_OFFLOAD. Also make thread_data::flags unsigned long long to ensure it fits all flags even when longs are 32 bit, and fix TD_ENG_FLAG_MASK. Signed-off-by: Alberto Faria --- diff --git a/fio.h b/fio.h index c314f0a8..776fb51f 100644 --- a/fio.h +++ b/fio.h @@ -184,7 +184,7 @@ struct zone_split_index { */ struct thread_data { struct flist_head opt_list; - unsigned long flags; + unsigned long long flags; struct thread_options o; void *eo; pthread_t thread; @@ -681,12 +681,12 @@ enum { }; #define TD_ENG_FLAG_SHIFT 18 -#define TD_ENG_FLAG_MASK ((1U << 18) - 1) +#define TD_ENG_FLAG_MASK ((1ULL << 18) - 1) static inline void td_set_ioengine_flags(struct thread_data *td) { td->flags = (~(TD_ENG_FLAG_MASK << TD_ENG_FLAG_SHIFT) & td->flags) | - (td->io_ops->flags << TD_ENG_FLAG_SHIFT); + ((unsigned long long)td->io_ops->flags << TD_ENG_FLAG_SHIFT); } static inline bool td_ioengine_flagged(struct thread_data *td,