bloom: if we're not setting bits, break after first failed mask check
[fio.git] / init.c
diff --git a/init.c b/init.c
index 1ba8fe6e5b08f359d92f582ff10b51099d3ef46e..0a2ace186f88bbaccc5bfccc39bb7c8e8cc854b7 100644 (file)
--- a/init.c
+++ b/init.c
@@ -356,6 +356,9 @@ static int setup_thread_area(void)
                perror("shmat");
                return 1;
        }
+#ifdef FIO_HAVE_SHM_ATTACH_REMOVED
+       shmctl(shm_id, IPC_RMID, NULL);
+#endif
 #endif
 
        memset(threads, 0, max_jobs * sizeof(struct thread_data));
@@ -564,22 +567,15 @@ static unsigned long long get_rand_start_delay(struct thread_data *td)
        return delayrange;
 }
 
+/*
+ * <3 Johannes
+ */
 static unsigned int gcd(unsigned int m, unsigned int n)
 {
-       unsigned int r;
-
-       if (!m || !n)
-               return 0;
-
-       do {
-               r = m % n;
-               if (!r)
-                       break;
-               m = n;
-               n = r;
-       } while (1);
+       if (!n)
+               return m;
 
-       return n;
+       return gcd(n, m % n);
 }
 
 /*
@@ -1027,7 +1023,7 @@ int ioengine_load(struct thread_data *td)
                 */
                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);
@@ -2330,17 +2326,22 @@ int parse_cmd_line(int argc, char *argv[], int client_type)
                case 'b':
                        write_bw_log = 1;
                        break;
-               case 'o':
+               case 'o': {
+                       FILE *tmp;
+
                        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;
+                       }
                case 'm':
                        output_format = FIO_OUTPUT_TERSE;
                        break;
@@ -2724,9 +2725,6 @@ int parse_cmd_line(int argc, char *argv[], int client_type)
        }
 
 out_free:
-       if (pid_file)
-               free(pid_file);
-
        return ini_idx;
 }
 
@@ -2795,7 +2793,7 @@ int parse_options(int argc, char *argv[])
                if (did_arg)
                        return 0;
 
-               log_err("No jobs(s) defined\n\n");
+               log_err("No job(s) defined\n\n");
 
                if (!did_arg) {
                        usage(argv[0]);