Merge branch 'wip-http-swift' of https://github.com/l-mb/fio
[fio.git] / filesetup.c
index 7cbce1327f8f21edb32159376be406841016ef62..94a025e6c1064e442dc18254d08e3f002dcae644 100644 (file)
@@ -5,8 +5,6 @@
 #include <dirent.h>
 #include <libgen.h>
 #include <sys/stat.h>
-#include <sys/mman.h>
-#include <sys/types.h>
 
 #include "fio.h"
 #include "smalloc.h"
@@ -109,7 +107,7 @@ static int extend_file(struct thread_data *td, struct fio_file *f)
 {
        int new_layout = 0, unlink_file = 0, flags;
        unsigned long long left;
-       unsigned int bs;
+       unsigned long long bs;
        char *b = NULL;
 
        if (read_only) {
@@ -262,7 +260,7 @@ static bool pre_read_file(struct thread_data *td, struct fio_file *f)
 {
        int r, did_open = 0, old_runstate;
        unsigned long long left;
-       unsigned int bs;
+       unsigned long long bs;
        bool ret = true;
        char *b;
 
@@ -492,7 +490,6 @@ static int __file_invalidate_cache(struct thread_data *td, struct fio_file *f,
        } else if (td_ioengine_flagged(td, FIO_DISKLESSIO)) {
                dprint(FD_IO, "invalidate not supported by ioengine %s\n",
                       td->io_ops->name);
-               ret = 0;
        } else if (f->filetype == FIO_TYPE_FILE) {
                dprint(FD_IO, "declare unneeded cache %s: %llu/%llu\n",
                        f->file_name, off, len);
@@ -519,14 +516,12 @@ static int __file_invalidate_cache(struct thread_data *td, struct fio_file *f,
                                log_err("fio: only root may flush block "
                                        "devices. Cache flush bypassed!\n");
                        }
-                       ret = 0;
                }
                if (ret < 0)
                        errval = errno;
        } else if (f->filetype == FIO_TYPE_CHAR ||
                   f->filetype == FIO_TYPE_PIPE) {
                dprint(FD_IO, "invalidate not supported %s\n", f->file_name);
-               ret = 0;
        }
 
        /*
@@ -679,7 +674,8 @@ open_again:
                        from_hash = file_lookup_open(f, flags);
        } else if (td_trim(td)) {
                assert(!td_rw(td)); /* should have matched above */
-               flags |= O_RDWR;
+               if (!read_only)
+                       flags |= O_RDWR;
                from_hash = file_lookup_open(f, flags);
        }
 
@@ -904,7 +900,7 @@ int setup_files(struct thread_data *td)
        unsigned int i, nr_fs_extra = 0;
        int err = 0, need_extend;
        int old_state;
-       const unsigned int bs = td_min_bs(td);
+       const unsigned long long bs = td_min_bs(td);
        uint64_t fs = 0;
 
        dprint(FD_FILE, "setup files\n");
@@ -1610,8 +1606,9 @@ int add_file(struct thread_data *td, const char *fname, int numjob, int inc)
                f->file_name = strdup(file_name);
        else
                f->file_name = smalloc_strdup(file_name);
-       if (!f->file_name)
-               assert(0);
+
+       /* can't handle smalloc failure from here */
+       assert(f->file_name);
 
        get_file_type(f);
 
@@ -1678,6 +1675,11 @@ int put_file(struct thread_data *td, struct fio_file *f)
        if (--f->references)
                return 0;
 
+       disk_util_dec(f->du);
+
+       if (td->o.file_lock_mode != FILE_LOCK_NONE)
+               unlock_file_all(td, f);
+
        if (should_fsync(td) && td->o.fsync_on_close) {
                f_ret = fsync(f->fd);
                if (f_ret < 0)
@@ -1691,6 +1693,7 @@ int put_file(struct thread_data *td, struct fio_file *f)
                ret = f_ret;
 
        td->nr_open_files--;
+       fio_file_clear_closing(f);
        fio_file_clear_open(f);
        assert(f->fd == -1);
        return ret;
@@ -1816,9 +1819,9 @@ void dup_files(struct thread_data *td, struct thread_data *org)
                                __f->file_name = strdup(f->file_name);
                        else
                                __f->file_name = smalloc_strdup(f->file_name);
-                       if (!__f->file_name)
-                               assert(0);
 
+                       /* can't handle smalloc failure from here */
+                       assert(__f->file_name);
                        __f->filetype = f->filetype;
                }