Fix iodepth_batch=0
[fio.git] / iolog.c
diff --git a/iolog.c b/iolog.c
index aec0881ed51784f69d16d32ce01132f070674f66..9391507940112d372c644c6180575a7a4e523398 100644 (file)
--- a/iolog.c
+++ b/iolog.c
@@ -587,6 +587,15 @@ void setup_log(struct io_log **log, struct log_params *p,
        l->filename = strdup(filename);
        l->td = p->td;
 
+       if (l->td && l->td->o.io_submit_mode != IO_MODE_OFFLOAD) {
+               struct io_logs *p;
+
+               p = calloc(1, sizeof(*l->pending));
+               p->max_samples = DEF_LOG_ENTRIES;
+               p->log = calloc(p->max_samples, log_entry_sz(l));
+               l->pending = p;
+       }
+
        if (l->log_offset)
                l->log_ddir_mask = LOG_OFFSET_SAMPLE_BIT;
 
@@ -595,7 +604,7 @@ void setup_log(struct io_log **log, struct log_params *p,
        if (l->log_gz && !p->td)
                l->log_gz = 0;
        else if (l->log_gz || l->log_gz_store) {
-               pthread_mutex_init(&l->chunk_lock, NULL);
+               mutex_init_pshared(&l->chunk_lock);
                p->td->flags |= TD_F_COMPRESS_LOG;
        }
 
@@ -638,6 +647,13 @@ void free_log(struct io_log *log)
                free(cur_log->log);
        }
 
+       if (log->pending) {
+               free(log->pending->log);
+               free(log->pending);
+               log->pending = NULL;
+       }
+
+       free(log->pending);
        free(log->filename);
        sfree(log);
 }