X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=filesetup.c;h=84cd7f7dfe2bffa93ed62d3ea7aaa790cd6e02b3;hp=610981b437594d32c90587178b323c2ce6dcc348;hb=145dad6d3e1ae4bf44dd49eea9d0c025500b97d0;hpb=ed92ac0ce9ce1cc64697272d307d4fa7d18ed64c diff --git a/filesetup.c b/filesetup.c index 610981b4..84cd7f7d 100644 --- a/filesetup.c +++ b/filesetup.c @@ -15,7 +15,7 @@ static int file_ok(struct thread_data *td, struct fio_file *f) { struct stat st; - if (td->filetype != FIO_TYPE_FILE) + if (td->filetype != FIO_TYPE_FILE || (td->io_ops->flags & FIO_NULLIO)) return 0; if (stat(f->file_name, &st) == -1) @@ -154,6 +154,16 @@ static int file_size(struct thread_data *td, struct fio_file *f) { struct stat st; + /* + * if we are not doing real io, just pretend the file is as large + * as the size= given. this works fine with nrfiles > 1 as well, + * we only really care about it being at least as big as size= + */ + if (td->io_ops->flags & FIO_NULLIO) { + f->real_file_size = f->file_size = td->total_file_size; + return 0; + } + if (td->overwrite) { if (fstat(f->fd, &st) == -1) { td_verror(td, errno); @@ -332,29 +342,38 @@ static int setup_file(struct thread_data *td, struct fio_file *f) if (td->io_ops->flags & FIO_NETIO) return 0; - if (td->odirect) - flags |= OS_O_DIRECT; - if (td->sync_io) - flags |= O_SYNC; - if (td_write(td) || td_rw(td)) { - flags |= O_RDWR; + /* + * we need a valid file descriptor, but don't create a real file. + * lets just dup stdout, seems like a sensible approach. + */ + if (td->io_ops->flags & FIO_NULLIO) + f->fd = dup(STDOUT_FILENO); + else { + if (td->odirect) + flags |= OS_O_DIRECT; + if (td->sync_io) + flags |= O_SYNC; + + if (td_write(td) || td_rw(td)) { + flags |= O_RDWR; - if (td->filetype == FIO_TYPE_FILE) { - if (!td->overwrite) - flags |= O_TRUNC; + if (td->filetype == FIO_TYPE_FILE) { + if (!td->overwrite) + flags |= O_TRUNC; - flags |= O_CREAT; - } + flags |= O_CREAT; + } - f->fd = open(f->file_name, flags, 0600); - } else { - if (td->filetype == FIO_TYPE_CHAR) - flags |= O_RDWR; - else - flags |= O_RDONLY; + f->fd = open(f->file_name, flags, 0600); + } else { + if (td->filetype == FIO_TYPE_CHAR) + flags |= O_RDWR; + else + flags |= O_RDONLY; - f->fd = open(f->file_name, flags); + f->fd = open(f->file_name, flags); + } } if (f->fd == -1) {