projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sfree(NULL) is ok
[fio.git]
/
fio.c
diff --git
a/fio.c
b/fio.c
index 434b50372832c49952fd2195c4e4377ae3088227..ae62d23329839c1c9bc28c5f57a6a826cb42c6f1 100644
(file)
--- a/
fio.c
+++ b/
fio.c
@@
-39,6
+39,9
@@
#include "smalloc.h"
#include "verify.h"
#include "diskutil.h"
#include "smalloc.h"
#include "verify.h"
#include "diskutil.h"
+#include "cgroup.h"
+#include "profile.h"
+#include "lib/rand.h"
unsigned long page_mask;
unsigned long page_size;
unsigned long page_mask;
unsigned long page_size;
@@
-60,6
+63,8
@@
static volatile int fio_abort;
static int exit_value;
static struct itimerval itimer;
static pthread_t gtod_thread;
static int exit_value;
static struct itimerval itimer;
static pthread_t gtod_thread;
+static struct flist_head *cgroup_list;
+static char *cgroup_mnt;
struct io_log *agg_io_log[2];
struct io_log *agg_io_log[2];
@@
-131,7
+136,7
@@
static void sig_quit(int sig)
static void sig_int(int sig)
{
if (threads) {
static void sig_int(int sig)
{
if (threads) {
-
printf
("\nfio: terminating on signal %d\n", sig);
+
log_info
("\nfio: terminating on signal %d\n", sig);
fflush(stdout);
terminate_threads(TERMINATE_ALL);
}
fflush(stdout);
terminate_threads(TERMINATE_ALL);
}
@@
-429,6
+434,8
@@
static void do_verify(struct thread_data *td)
int ret, min_events;
unsigned int i;
int ret, min_events;
unsigned int i;
+ dprint(FD_VERIFY, "starting loop\n");
+
/*
* sync io first and invalidate cache, to make sure we really
* read from disk.
/*
* sync io first and invalidate cache, to make sure we really
* read from disk.
@@
-566,6
+573,8
@@
sync_done:
cleanup_pending_aio(td);
td_set_runstate(td, TD_RUNNING);
cleanup_pending_aio(td);
td_set_runstate(td, TD_RUNNING);
+
+ dprint(FD_VERIFY, "exiting loop\n");
}
/*
}
/*
@@
-1038,6
+1047,15
@@
static void *thread_main(void *data)
*/
fio_mutex_remove(td->mutex);
*/
fio_mutex_remove(td->mutex);
+ if (td->o.uid != -1U && setuid(td->o.uid)) {
+ td_verror(td, errno, "setuid");
+ goto err;
+ }
+ if (td->o.gid != -1U && setgid(td->o.gid)) {
+ td_verror(td, errno, "setgid");
+ goto err;
+ }
+
/*
* May alter parameters that init_io_u() will use, so we need to
* do this first.
/*
* May alter parameters that init_io_u() will use, so we need to
* do this first.
@@
-1075,6
+1093,9
@@
static void *thread_main(void *data)
}
}
}
}
+ if (td->o.cgroup_weight && cgroup_setup(td, cgroup_list, &cgroup_mnt))
+ goto err;
+
if (nice(td->o.nice) == -1) {
td_verror(td, errno, "nice");
goto err;
if (nice(td->o.nice) == -1) {
td_verror(td, errno, "nice");
goto err;
@@
-1195,7
+1216,7
@@
static void *thread_main(void *data)
err:
if (td->error)
err:
if (td->error)
-
printf
("fio: pid=%d, err=%d/%s\n", (int) td->pid, td->error,
+
log_info
("fio: pid=%d, err=%d/%s\n", (int) td->pid, td->error,
td->verror);
if (td->o.verify_async)
td->verror);
if (td->o.verify_async)
@@
-1204,6
+1225,7
@@
err:
close_and_free_files(td);
close_ioengine(td);
cleanup_io_u(td);
close_and_free_files(td);
close_ioengine(td);
cleanup_io_u(td);
+ cgroup_shutdown(td, &cgroup_mnt);
if (td->o.cpumask_set) {
int ret = fio_cpuset_exit(&td->o.cpumask);
if (td->o.cpumask_set) {
int ret = fio_cpuset_exit(&td->o.cpumask);
@@
-1396,17
+1418,17
@@
static void run_threads(void)
return;
if (!terse_output) {
return;
if (!terse_output) {
-
printf
("Starting ");
+
log_info
("Starting ");
if (nr_thread)
if (nr_thread)
-
printf
("%d thread%s", nr_thread,
+
log_info
("%d thread%s", nr_thread,
nr_thread > 1 ? "s" : "");
if (nr_process) {
if (nr_thread)
printf(" and ");
nr_thread > 1 ? "s" : "");
if (nr_process) {
if (nr_thread)
printf(" and ");
-
printf
("%d process%s", nr_process,
+
log_info
("%d process%s", nr_process,
nr_process > 1 ? "es" : "");
}
nr_process > 1 ? "es" : "");
}
-
printf
("\n");
+
log_info
("\n");
fflush(stdout);
}
fflush(stdout);
}
@@
-1615,6
+1637,7
@@
int main(int argc, char *argv[])
long ps;
sinit();
long ps;
sinit();
+ init_rand(&__fio_rand_state);
/*
* We need locale for number printing, if it isn't set then just
/*
* We need locale for number printing, if it isn't set then just
@@
-1637,6
+1660,9
@@
int main(int argc, char *argv[])
if (parse_options(argc, argv))
return 1;
if (parse_options(argc, argv))
return 1;
+ if (exec_profile && load_profile(exec_profile))
+ return 1;
+
if (!thread_number)
return 0;
if (!thread_number)
return 0;
@@
-1652,6
+1678,9
@@
int main(int argc, char *argv[])
status_timer_arm();
status_timer_arm();
+ cgroup_list = smalloc(sizeof(*cgroup_list));
+ INIT_FLIST_HEAD(cgroup_list);
+
run_threads();
if (!fio_abort) {
run_threads();
if (!fio_abort) {
@@
-1663,6
+1692,10
@@
int main(int argc, char *argv[])
}
}
}
}
+ cgroup_kill(cgroup_list);
+ sfree(cgroup_list);
+ sfree(cgroup_mnt);
+
fio_mutex_remove(startup_mutex);
fio_mutex_remove(writeout_mutex);
return exit_value;
fio_mutex_remove(startup_mutex);
fio_mutex_remove(writeout_mutex);
return exit_value;