projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix return value of make_filename() when no filename_format
[fio.git]
/
init.c
diff --git
a/init.c
b/init.c
index 324dc7bdb3bb5780fe537163fdc183a8bebe92bc..6af6c450fb6c3f98bfdee648344ae9dc69923ed1 100644
(file)
--- a/
init.c
+++ b/
init.c
@@
-356,6
+356,8
@@
static int setup_thread_area(void)
perror("shmat");
return 1;
}
perror("shmat");
return 1;
}
+ if (shm_attach_to_open_removed())
+ shmctl(shm_id, IPC_RMID, NULL);
#endif
memset(threads, 0, max_jobs * sizeof(struct thread_data));
#endif
memset(threads, 0, max_jobs * sizeof(struct thread_data));
@@
-432,8
+434,8
@@
static void copy_opt_list(struct thread_data *dst, struct thread_data *src)
/*
* Return a free job structure.
*/
/*
* Return a free job structure.
*/
-static struct thread_data *get_new_job(
int
global, struct thread_data *parent,
-
int
preserve_eo, const char *jobname)
+static struct thread_data *get_new_job(
bool
global, struct thread_data *parent,
+
bool
preserve_eo, const char *jobname)
{
struct thread_data *td;
{
struct thread_data *td;
@@
-457,6
+459,7
@@
static struct thread_data *get_new_job(int global, struct thread_data *parent,
copy_opt_list(td, parent);
td->io_ops = NULL;
copy_opt_list(td, parent);
td->io_ops = NULL;
+ td->io_ops_init = 0;
if (!preserve_eo)
td->eo = NULL;
if (!preserve_eo)
td->eo = NULL;
@@
-584,7
+587,7
@@
static int fixup_options(struct thread_data *td)
struct thread_options *o = &td->o;
int ret = 0;
struct thread_options *o = &td->o;
int ret = 0;
-#ifndef
FIO_HAVE_PSHARED_MUTEX
+#ifndef
CONFIG_PSHARED
if (!o->use_thread) {
log_info("fio: this platform does not support process shared"
" mutexes, forcing use of threads. Use the 'thread'"
if (!o->use_thread) {
log_info("fio: this platform does not support process shared"
" mutexes, forcing use of threads. Use the 'thread'"
@@
-617,7
+620,7
@@
static int fixup_options(struct thread_data *td)
/*
* Reads can do overwrites, we always need to pre-create the file
*/
/*
* Reads can do overwrites, we always need to pre-create the file
*/
- if (td_read(td)
|| td_rw(td)
)
+ if (td_read(td))
o->overwrite = 1;
if (!o->min_bs[DDIR_READ])
o->overwrite = 1;
if (!o->min_bs[DDIR_READ])
@@
-762,7
+765,11
@@
static int fixup_options(struct thread_data *td)
}
if (o->pre_read) {
}
if (o->pre_read) {
- o->invalidate_cache = 0;
+ if (o->invalidate_cache) {
+ log_info("fio: ignore invalidate option for %s\n",
+ o->name);
+ o->invalidate_cache = 0;
+ }
if (td_ioengine_flagged(td, FIO_PIPEIO)) {
log_info("fio: cannot pre-read files with an IO engine"
" that isn't seekable. Pre-read disabled.\n");
if (td_ioengine_flagged(td, FIO_PIPEIO)) {
log_info("fio: cannot pre-read files with an IO engine"
" that isn't seekable. Pre-read disabled.\n");
@@
-1020,7
+1027,7
@@
int ioengine_load(struct thread_data *td)
*/
if (origeo) {
memcpy(td->eo, origeo, td->io_ops->option_struct_size);
*/
if (origeo) {
memcpy(td->eo, origeo, td->io_ops->option_struct_size);
- options_mem_dupe(td->
eo, td->io_ops->options
);
+ options_mem_dupe(td->
io_ops->options, td->eo
);
} else {
memset(td->eo, 0, td->io_ops->option_struct_size);
fill_default_options(td->eo, td->io_ops->options);
} else {
memset(td->eo, 0, td->io_ops->option_struct_size);
fill_default_options(td->eo, td->io_ops->options);
@@
-1114,7
+1121,7
@@
static char *make_filename(char *buf, size_t buf_size,struct thread_options *o,
if (!o->filename_format || !strlen(o->filename_format)) {
sprintf(buf, "%s.%d.%d", jobname, jobnum, filenum);
if (!o->filename_format || !strlen(o->filename_format)) {
sprintf(buf, "%s.%d.%d", jobname, jobnum, filenum);
- return
NULL
;
+ return
buf
;
}
for (f = &fpre_keywords[0]; f->keyword; f++)
}
for (f = &fpre_keywords[0]; f->keyword; f++)
@@
-1528,10
+1535,10
@@
static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
ddir_str(o->td_ddir));
if (o->bs_is_seq_rand)
ddir_str(o->td_ddir));
if (o->bs_is_seq_rand)
- log_info("bs=
%s-%s,
%s-%s, bs_is_seq_rand, ",
+ log_info("bs=
(R) %s-%s, (W)
%s-%s, bs_is_seq_rand, ",
c1, c2, c3, c4);
else
c1, c2, c3, c4);
else
- log_info("bs=
%s-%s,%s-%s,
%s-%s, ",
+ log_info("bs=
(R) %s-%s, (W) %s-%s, (T)
%s-%s, ",
c1, c2, c3, c4, c5, c6);
log_info("ioengine=%s, iodepth=%u\n",
c1, c2, c3, c4, c5, c6);
log_info("ioengine=%s, iodepth=%u\n",
@@
-1557,7
+1564,7
@@
static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
*/
numjobs = o->numjobs;
while (--numjobs) {
*/
numjobs = o->numjobs;
while (--numjobs) {
- struct thread_data *td_new = get_new_job(
0, td, 1
, jobname);
+ struct thread_data *td_new = get_new_job(
false, td, true
, jobname);
if (!td_new)
goto err;
if (!td_new)
goto err;
@@
-1618,11
+1625,11
@@
void add_job_opts(const char **o, int client_type)
sprintf(jobname, "%s", o[i] + 5);
}
if (in_global && !td_parent)
sprintf(jobname, "%s", o[i] + 5);
}
if (in_global && !td_parent)
- td_parent = get_new_job(
1, &def_thread, 0
, jobname);
+ td_parent = get_new_job(
true, &def_thread, false
, jobname);
else if (!in_global && !td) {
if (!td_parent)
td_parent = &def_thread;
else if (!in_global && !td) {
if (!td_parent)
td_parent = &def_thread;
- td = get_new_job(
0, td_parent, 0
, jobname);
+ td = get_new_job(
false, td_parent, false
, jobname);
}
if (in_global)
fio_options_parse(td_parent, (char **) &o[i], 1);
}
if (in_global)
fio_options_parse(td_parent, (char **) &o[i], 1);
@@
-1674,7
+1681,7
@@
static int __parse_jobs_ini(struct thread_data *td,
char *file, int is_buf, int stonewall_flag, int type,
int nested, char *name, char ***popts, int *aopts, int *nopts)
{
char *file, int is_buf, int stonewall_flag, int type,
int nested, char *name, char ***popts, int *aopts, int *nopts)
{
-
unsigned int global = 0
;
+
bool global = false
;
char *string;
FILE *f;
char *p;
char *string;
FILE *f;
char *p;
@@
-1783,7
+1790,7
@@
static int __parse_jobs_ini(struct thread_data *td,
first_sect = 0;
}
first_sect = 0;
}
- td = get_new_job(global, &def_thread,
0
, name);
+ td = get_new_job(global, &def_thread,
false
, name);
if (!td) {
ret = 1;
break;
if (!td) {
ret = 1;
break;
@@
-2323,17
+2330,22
@@
int parse_cmd_line(int argc, char *argv[], int client_type)
case 'b':
write_bw_log = 1;
break;
case 'b':
write_bw_log = 1;
break;
- case 'o':
+ case 'o': {
+ FILE *tmp;
+
if (f_out && f_out != stdout)
fclose(f_out);
if (f_out && f_out != stdout)
fclose(f_out);
- f_out = fopen(optarg, "w+");
- if (!f_out) {
- perror("fopen output");
- exit(1);
+ tmp = fopen(optarg, "w+");
+ if (!tmp) {
+ log_err("fio: output file open error: %s\n", strerror(errno));
+ exit_val = 1;
+ do_exit++;
+ break;
}
}
- f_err = f_out;
+ f_err = f_out
= tmp
;
break;
break;
+ }
case 'm':
output_format = FIO_OUTPUT_TERSE;
break;
case 'm':
output_format = FIO_OUTPUT_TERSE;
break;
@@
-2467,7
+2479,7
@@
int parse_cmd_line(int argc, char *argv[], int client_type)
if (is_section && skip_this_section(val))
continue;
if (is_section && skip_this_section(val))
continue;
- td = get_new_job(global, &def_thread,
1
, NULL);
+ td = get_new_job(global, &def_thread,
true
, NULL);
if (!td || ioengine_load(td)) {
if (td) {
put_job(td);
if (!td || ioengine_load(td)) {
if (td) {
put_job(td);
@@
-2705,7
+2717,7
@@
int parse_cmd_line(int argc, char *argv[], int client_type)
if (!ret) {
ret = add_job(td, td->o.name ?: "fio", 0, 0, client_type);
if (ret)
if (!ret) {
ret = add_job(td, td->o.name ?: "fio", 0, 0, client_type);
if (ret)
-
did_arg = 1
;
+
exit(1)
;
}
}
}
}
@@
-2785,7
+2797,7
@@
int parse_options(int argc, char *argv[])
if (did_arg)
return 0;
if (did_arg)
return 0;
- log_err("No job
s
(s) defined\n\n");
+ log_err("No job(s) defined\n\n");
if (!did_arg) {
usage(argv[0]);
if (!did_arg) {
usage(argv[0]);