filesetup: fix size percentage calculations when using offset
[fio.git] / filesetup.c
index 612e79474dc4b43c0707d6a43dccf3d98a2f9e8f..8a0968d66debfe329e816ee0f5f92abc749f018e 100644 (file)
@@ -986,7 +986,14 @@ int setup_files(struct thread_data *td)
                        total_size = -1ULL;
                else {
                         if (o->size_percent) {
-                               f->io_size = (f->io_size * o->size_percent) / 100;
+                               uint64_t file_size;
+
+                               file_size = f->io_size + f->file_offset;
+                               f->io_size = (file_size *
+                                             o->size_percent) / 100;
+                               if (f->io_size > (file_size - f->file_offset))
+                                       f->io_size = file_size - f->file_offset;
+
                                f->io_size -= (f->io_size % td_min_bs(td));
                        }
                        total_size += f->io_size;