Random IO fixes
[fio.git] / filesetup.c
index a3bafca1ec10ef587f455170eb9e04ae9a570af7..f509220276c4097cb7c60e740b3f0204ba08a1fb 100644 (file)
@@ -50,14 +50,14 @@ static int extend_file(struct thread_data *td, struct fio_file *f)
                return 1;
        }
 
+       if (!new_layout)
+               goto done;
+
        if (ftruncate(f->fd, f->real_file_size) == -1) {
                td_verror(td, errno, "ftruncate");
                goto err;
        }
 
-       if (!new_layout)
-               goto done;
-
        if (posix_fallocate(f->fd, 0, f->real_file_size) < 0) {
                td_verror(td, errno, "posix_fallocate");
                goto err;
@@ -380,7 +380,7 @@ int setup_files(struct thread_data *td)
         * device/file sizes are zero and no size given, punt
         */
        if ((!total_size || total_size == -1ULL) && !td->o.size &&
-           !(td->io_ops->flags & FIO_NOIO)) {
+           !(td->io_ops->flags & FIO_NOIO) && !td->o.fill_device) {
                log_err("%s: you need to specify size=\n", td->o.name);
                td_verror(td, EINVAL, "total_file_size");
                return 1;
@@ -403,11 +403,8 @@ int setup_files(struct thread_data *td)
                         * zero, set it to the real file size.
                         */
                        f->io_size = td->o.size / td->o.nr_files;
-                       if (!f->io_size || f->io_size > f->real_file_size) {
-                               if (f->file_offset > f->real_file_size)
-                                       goto err_offset;
+                       if (!f->io_size)
                                f->io_size = f->real_file_size - f->file_offset;
-                       }
                } else if (f->real_file_size < td->o.file_size_low ||
                           f->real_file_size > td->o.file_size_high) {
                        if (f->file_offset > td->o.file_size_low) 
@@ -420,9 +417,7 @@ int setup_files(struct thread_data *td)
                                f->io_size = td->o.file_size_low - f->file_offset;
                        else
                                f->io_size = get_rand_file_size(td) - f->file_offset;
-               } else if (f->file_offset > f->real_file_size)
-                       goto err_offset;
-               else
+               } else
                        f->io_size = f->real_file_size - f->file_offset;
 
                if (f->io_size == -1ULL)