From: Jens Axboe Date: Fri, 20 Oct 2006 07:15:46 +0000 (+0200) Subject: [PATCH] Cleanup iolog handling X-Git-Tag: fio-1.7~12 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=fb71fbd73027a2d6202be9b9b1480bb845ea52df;hp=841ddd1322abbb48b2afe25712b4303dbf8cc5de [PATCH] Cleanup iolog handling Signed-off-by: Jens Axboe --- diff --git a/log.c b/log.c index 00e3913b..51eaee6e 100644 --- a/log.c +++ b/log.c @@ -82,44 +82,29 @@ void write_iolog_close(struct thread_data *td) free(td->iolog_buf); } -int init_iolog(struct thread_data *td) +/* + * Open a stored log and read in the entries. + */ +static int init_iolog_read(struct thread_data *td) { unsigned long long offset; unsigned int bytes; char *str, *p; FILE *f; - int rw, i, reads, writes; - - if (!td->read_iolog && !td->write_iolog) - return 0; - - if (td->read_iolog) - f = fopen(td->iolog_file, "r"); - else - f = fopen(td->iolog_file, "w"); + int rw, reads, writes; + f = fopen(td->iolog_file, "r"); if (!f) { - perror("fopen iolog"); - printf("file %s, %d/%d\n", td->iolog_file, td->read_iolog, td->write_iolog); + perror("fopen read iolog"); return 1; } - /* - * That's it for writing, setup a log buffer and we're done. - */ - if (td->write_iolog) { - td->iolog_f = f; - td->iolog_buf = malloc(8192); - setvbuf(f, td->iolog_buf, _IOFBF, 8192); - return 0; - } - /* * Read in the read iolog and store it, reuse the infrastructure * for doing verifications. */ str = malloc(4096); - reads = writes = i = 0; + reads = writes = 0; while ((p = fgets(str, 4096, f)) != NULL) { struct io_piece *ipo; @@ -144,16 +129,14 @@ int init_iolog(struct thread_data *td) td->max_bs = bytes; ipo->ddir = rw; list_add_tail(&ipo->list, &td->io_log_list); - i++; } free(str); fclose(f); - if (!i) + if (!reads && !writes) return 1; - - if (reads && !writes) + else if (reads && !writes) td->ddir = DDIR_READ; else if (!reads && writes) td->ddir = DDIR_READ; @@ -163,6 +146,38 @@ int init_iolog(struct thread_data *td) return 0; } +/* + * Setup a log for storing io patterns. + */ +static int init_iolog_write(struct thread_data *td) +{ + FILE *f = fopen(td->iolog_file, "w"); + + f = fopen(td->iolog_file, "w"); + if (!f) { + perror("fopen write iolog"); + return 1; + } + + /* + * That's it for writing, setup a log buffer and we're done. + */ + td->iolog_f = f; + td->iolog_buf = malloc(8192); + setvbuf(f, td->iolog_buf, _IOFBF, 8192); + return 0; +} + +int init_iolog(struct thread_data *td) +{ + if (td->read_iolog) + return init_iolog_read(td); + else if (td->write_iolog) + return init_iolog_write(td); + + return 0; +} + int setup_rate(struct thread_data *td) { int nr_reads_per_sec;