X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=filesetup.c;h=6427f3e4e2317901159f7061ce9a74538d288aaa;hp=88d6565afca65335ea88627f810862385a15da94;hb=19a9409009c6ef4eff9342c5aa291acaa09dccd2;hpb=de98bd30b02bd89a78059d162b2c8426e889703d diff --git a/filesetup.c b/filesetup.c index 88d6565a..6427f3e4 100644 --- a/filesetup.c +++ b/filesetup.c @@ -97,9 +97,9 @@ static int extend_file(struct thread_data *td, struct fio_file *f) r = fallocate(f->fd, FALLOC_FL_KEEP_SIZE, 0, f->real_file_size); - if (r != 0) { + if (r != 0) td_verror(td, errno, "fallocate"); - } + break; #endif /* CONFIG_LINUX_FALLOCATE */ default: @@ -127,7 +127,6 @@ static int extend_file(struct thread_data *td, struct fio_file *f) } b = malloc(td->o.max_bs[DDIR_WRITE]); - memset(b, 0, td->o.max_bs[DDIR_WRITE]); left = f->real_file_size; while (left && !td->terminate) { @@ -135,6 +134,8 @@ static int extend_file(struct thread_data *td, struct fio_file *f) if (bs > left) bs = left; + fill_io_buffer(td, b, bs, bs); + r = write(f->fd, b, bs); if (r > 0) { @@ -355,7 +356,8 @@ static int get_file_size(struct thread_data *td, struct fio_file *f) if (f->file_offset > f->real_file_size) { log_err("%s: offset extends end (%llu > %llu)\n", td->o.name, - f->file_offset, f->real_file_size); + (unsigned long long) f->file_offset, + (unsigned long long) f->real_file_size); return 1; } @@ -723,9 +725,13 @@ int setup_files(struct thread_data *td) struct fio_file *f; unsigned int i; int err = 0, need_extend; + int old_state; dprint(FD_FILE, "setup files\n"); + old_state = td->runstate; + td_set_runstate(td, TD_SETTING_UP); + if (o->read_iolog_file) goto done; @@ -740,7 +746,7 @@ int setup_files(struct thread_data *td) err = get_file_sizes(td); if (err) - return err; + goto err_out; /* * check sizes. if the files/devices do not exist and the size @@ -765,7 +771,7 @@ int setup_files(struct thread_data *td) !(o->nr_files && (o->file_size_low || o->file_size_high))) { log_err("%s: you need to specify size=\n", o->name); td_verror(td, EINVAL, "total_file_size"); - return 1; + goto err_out; } /* @@ -866,7 +872,7 @@ int setup_files(struct thread_data *td) } if (err) - return err; + goto err_out; if (!o->zone_size) o->zone_size = o->size; @@ -882,9 +888,12 @@ done: if (o->create_only) td->done = 1; + td_set_runstate(td, old_state); return 0; err_offset: log_err("%s: you need to specify valid offset=\n", o->name); +err_out: + td_set_runstate(td, old_state); return 1; } @@ -918,9 +927,9 @@ static int __init_rand_distribution(struct thread_data *td, struct fio_file *f) seed = td->rand_seeds[4]; if (td->o.random_distribution == FIO_RAND_DIST_ZIPF) - zipf_init(&f->zipf, nranges, td->o.zipf_theta, seed); + zipf_init(&f->zipf, nranges, td->o.zipf_theta.u.f, seed); else - pareto_init(&f->zipf, nranges, td->o.pareto_h, seed); + pareto_init(&f->zipf, nranges, td->o.pareto_h.u.f, seed); return 1; }