Add 'allow_mounted_write' option
[fio.git] / options.c
index ede7cda6f018f614374184b9b31a570294fbfa95..7f9075b4a118504bbf860b7c1784c46c2b803c46 100644 (file)
--- a/options.c
+++ b/options.c
@@ -8,6 +8,7 @@
 #include <fcntl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <netinet/in.h>
 
 #include "fio.h"
 #include "verify.h"
@@ -17,7 +18,7 @@
 
 #include "crc/crc32c.h"
 
-char client_sockaddr_str[INET6_ADDRSTRLEN] = {0};
+char client_sockaddr_str[INET6_ADDRSTRLEN] = { 0 };
 
 /*
  * Check if mmap/mmaphuge has a :/foo/bar/file at the end. If so, return that.
@@ -822,7 +823,7 @@ static int get_max_name_idx(char *input)
  * Returns the directory at the index, indexes > entires will be
  * assigned via modulo division of the index
  */
-int set_name_idx(char *target, char *input, int index)
+int set_name_idx(char *target, size_t tlen, char *input, int index)
 {
        unsigned int cur_idx;
        int len;
@@ -835,11 +836,12 @@ int set_name_idx(char *target, char *input, int index)
                fname = get_next_name(&str);
 
        if (client_sockaddr_str[0]) {
-               len = sprintf(target, "%s/%s.", fname, client_sockaddr_str);
-       } else {
-               len = sprintf(target, "%s/", fname);
-       }
+               len = snprintf(target, tlen, "%s/%s.", fname,
+                               client_sockaddr_str);
+       } else
+               len = snprintf(target, tlen, "%s/", fname);
 
+       target[tlen - 1] = '\0';
        free(p);
 
        return len;
@@ -1843,6 +1845,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                .type   = FIO_OPT_STR_VAL,
                .off1   = td_var_offset(rand_seed),
                .help   = "Set the random generator seed value",
+               .def    = "0x89",
                .parent = "rw",
                .category = FIO_OPT_C_IO,
                .group  = FIO_OPT_G_RANDOM,
@@ -3036,6 +3039,26 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                .category = FIO_OPT_C_FILE,
                .def    = "0",
        },
+       {
+               .name   = "allow_file_create",
+               .lname  = "Allow file create",
+               .type   = FIO_OPT_BOOL,
+               .off1   = td_var_offset(allow_create),
+               .help   = "Permit fio to create files, if they don't exist",
+               .def    = "1",
+               .category = FIO_OPT_C_FILE,
+               .group  = FIO_OPT_G_FILENAME,
+       },
+       {
+               .name   = "allow_mounted_write",
+               .lname  = "Allow mounted write",
+               .type   = FIO_OPT_BOOL,
+               .off1   = td_var_offset(allow_mounted_write),
+               .help   = "Allow writes to a mounted partition",
+               .def    = "0",
+               .category = FIO_OPT_C_FILE,
+               .group  = FIO_OPT_G_FILENAME,
+       },
        {
                .name   = "pre_read",
                .lname  = "Pre-read files",
@@ -3180,6 +3203,15 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                .category = FIO_OPT_C_GENERAL,
                .group  = FIO_OPT_G_PROCESS,
        },
+       {
+               .name   = "per_job_logs",
+               .type   = FIO_OPT_BOOL,
+               .off1   = td_var_offset(per_job_logs),
+               .help   = "Include job number in generated log files or not",
+               .def    = "1",
+               .category = FIO_OPT_C_LOG,
+               .group  = FIO_OPT_G_INVALID,
+       },
        {
                .name   = "write_bw_log",
                .lname  = "Write bandwidth log",
@@ -3820,6 +3852,18 @@ static struct fio_keyword fio_keywords[] = {
        },
 };
 
+void fio_keywords_exit(void)
+{
+       struct fio_keyword *kw;
+
+       kw = &fio_keywords[0];
+       while (kw->word) {
+               free(kw->replace);
+               kw->replace = NULL;
+               kw++;
+       }
+}
+
 void fio_keywords_init(void)
 {
        unsigned long long mb_memory;