+static unsigned long long set_rand_file_size(struct thread_data *td,
+ unsigned long long total_size)
+{
+ unsigned long long upper = total_size;
+ unsigned long long ret;
+ long r;
+
+ if (upper > td->file_size_high)
+ upper = td->file_size_high;
+ else if (upper < td->file_size_low)
+ return 0;
+ else if (!upper)
+ return 0;
+
+ r = os_random_long(&td->file_size_state);
+ ret = td->file_size_low + (unsigned long long) ((double) upper * (r / (RAND_MAX + 1.0)));
+ ret -= (ret % td->rw_min_bs);
+ if (ret > upper)
+ ret = upper;
+ return ret;
+}
+