X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=io_u.c;h=e283e7276a84ca75b6a11de4d3c40d9dcd93e716;hp=79a0ce84632ad9e13338e354926ceda842178d12;hb=e53bd0b3eb06e02b991d4ee05e6d0c427bbc20a0;hpb=756867bd127cfa1fb27ae2d4ba973af8cb341f13 diff --git a/io_u.c b/io_u.c index 79a0ce84..e283e727 100644 --- a/io_u.c +++ b/io_u.c @@ -335,9 +335,9 @@ static struct fio_file *get_next_file_rand(struct thread_data *td) do { long r = os_random_long(&td->next_file_state); - fileno = (unsigned int) ((double) (td->nr_files - 1) * r / (RAND_MAX + 1.0)); + fileno = (unsigned int) ((double) (td->open_files * r) / (RAND_MAX + 1.0)); f = &td->files[fileno]; - if (f->fd != -1) + if (f->open) return f; } while (1); } @@ -354,10 +354,10 @@ static struct fio_file *get_next_file_rr(struct thread_data *td) f = &td->files[td->next_file]; td->next_file++; - if (td->next_file >= td->nr_files) + if (td->next_file >= td->open_files) td->next_file = 0; - if (f->fd != -1) + if (f->open) break; f = NULL; @@ -441,7 +441,21 @@ struct io_u *get_io_u(struct thread_data *td) * No more to do for this file, close it */ io_u->file = NULL; - close_file(td, f); + td_io_close_file(td, f); + + /* + * probably not the right place to do this, but see + * if we need to open a new file + */ + if (td->nr_open_files < td->nr_files && + td->open_files != td->nr_files) { + int ret = td_io_open_file(td, f); + + if (ret) { + put_io_u(td, io_u); + return NULL; + } + } } while (1); if (td->zone_bytes >= td->zone_size) {