+#ifdef FIO_USE_GENERIC_BDEV_SIZE
+static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
+{
+ off_t end;
+
+ *bytes = 0;
+
+ end = lseek(f->fd, 0, SEEK_END);
+ if (end < 0)
+ return errno;
+
+ *bytes = end;
+ return 0;
+}
+#endif
+
+#ifdef FIO_USE_GENERIC_RAND
+typedef unsigned int os_random_state_t;
+
+static inline void os_random_seed(unsigned long seed, os_random_state_t *rs)
+{
+ srand(seed);
+}
+
+static inline long os_random_long(os_random_state_t *rs)
+{
+ long val;
+
+ val = rand_r(rs);
+ return val;
+}
+#endif
+
+#ifdef FIO_USE_GENERIC_INIT_RANDOM_STATE
+static inline int init_random_seeds(unsigned long *rand_seeds, int size)
+{
+ int fd;
+
+ fd = open("/dev/urandom", O_RDONLY);
+ if (fd == -1) {
+ return 1;
+ }
+
+ if (read(fd, rand_seeds, size) < size) {
+ close(fd);
+ return 1;
+ }
+
+ close(fd);
+ return 0;
+}
+#endif
+
+#ifndef FIO_HAVE_FS_STAT
+static inline unsigned long long get_fs_free_size(const char *path)
+{
+ return 0;
+}
+#endif
+
+#ifndef FIO_HAVE_CPU_ONLINE_SYSCONF
+static inline unsigned int cpus_online(void)
+{
+ return sysconf(_SC_NPROCESSORS_ONLN);
+}
+#endif
+
+#ifndef CPU_COUNT
+#ifdef FIO_HAVE_CPU_AFFINITY
+static inline int CPU_COUNT(os_cpu_mask_t *mask)
+{
+ int max_cpus = cpus_online();
+ int nr_cpus, i;
+
+ for (i = 0, nr_cpus = 0; i < max_cpus; i++)
+ if (fio_cpu_isset(mask, i))
+ nr_cpus++;
+
+ return nr_cpus;
+}
+#endif
+#endif
+
+#ifndef FIO_HAVE_GETTID
+static inline int gettid(void)
+{
+ return getpid();
+}
+#endif
+
+#ifndef FIO_HAVE_SHM_ATTACH_REMOVED
+static inline int shm_attach_to_open_removed(void)
+{
+ return 0;
+}
+#endif
+
+#ifndef FIO_HAVE_NATIVE_FALLOCATE
+static inline bool fio_fallocate(struct fio_file *f, uint64_t offset, uint64_t len)
+{
+ errno = ENOSYS;
+ return false;
+}
+#endif
+
+#if defined(CONFIG_POSIX_FALLOCATE) || defined(FIO_HAVE_NATIVE_FALLOCATE)
+# define FIO_HAVE_ANY_FALLOCATE
+#endif
+