Fix FreeBSD support
[fio.git] / init.c
diff --git a/init.c b/init.c
index 95c7efb434ec9c8e17a35493b1e0da81c3e7ef22..af8375759343d80dbb2e728da51a44cbf2c22bc5 100644 (file)
--- a/init.c
+++ b/init.c
@@ -20,7 +20,7 @@
 #include "filehash.h"
 #include "verify.h"
 
-static char fio_version_string[] = "fio 1.36-rc1";
+static char fio_version_string[] = "fio 1.36";
 
 #define FIO_RANDSEED           (0xb1899bedUL)
 
@@ -205,21 +205,19 @@ static void put_job(struct thread_data *td)
 static int __setup_rate(struct thread_data *td, enum fio_ddir ddir)
 {
        unsigned int bs = td->o.min_bs[ddir];
-       unsigned long long rate;
-       unsigned long ios_per_msec;
+       unsigned long long bytes_per_sec;
 
-       if (td->o.rate[ddir]) {
-               rate = td->o.rate[ddir];
-               ios_per_msec = (rate * 1000LL) / bs;
-       } else
-               ios_per_msec = td->o.rate_iops[ddir] * 1000UL;
+       if (td->o.rate[ddir])
+               bytes_per_sec = td->o.rate[ddir];
+       else
+               bytes_per_sec = td->o.rate_iops[ddir] * bs;
 
-       if (!ios_per_msec) {
+       if (!bytes_per_sec) {
                log_err("rate lower than supported\n");
                return -1;
        }
 
-       td->rate_usec_cycle[ddir] = 1000000000ULL / ios_per_msec;
+       td->rate_nsec_cycle[ddir] = 1000000000ULL / bytes_per_sec;
        td->rate_pending_usleep[ddir] = 0;
        return 0;
 }
@@ -384,6 +382,17 @@ static int fixup_options(struct thread_data *td)
                                 " that isn't seekable. Pre-read disabled.\n");
        }
 
+#ifndef FIO_HAVE_FDATASYNC
+       if (td->o.fdatasync_blocks) {
+               log_info("fio: this platform does not support fdatasync()"
+                        " falling back to using fsync().  Use the 'fsync'"
+                        " option instead of 'fdatasync' to get rid of"
+                        " this warning\n");
+               td->o.fsync_blocks = td->o.fdatasync_blocks;
+               td->o.fdatasync_blocks = 0;
+       }
+#endif
+
        return 0;
 }