projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Run the gluster engines through indent
[fio.git]
/
backend.c
diff --git
a/backend.c
b/backend.c
index 12e562b2a369fc9338001d7b8e8f4254704bf4f6..d1d55718b32ecb76009c6adc3484decee2f3a626 100644
(file)
--- a/
backend.c
+++ b/
backend.c
@@
-645,7
+645,7
@@
static unsigned int exceeds_number_ios(struct thread_data *td)
static int io_bytes_exceeded(struct thread_data *td)
{
static int io_bytes_exceeded(struct thread_data *td)
{
- unsigned long long bytes;
+ unsigned long long bytes
, limit
;
if (td_rw(td))
bytes = td->this_io_bytes[DDIR_READ] + td->this_io_bytes[DDIR_WRITE];
if (td_rw(td))
bytes = td->this_io_bytes[DDIR_READ] + td->this_io_bytes[DDIR_WRITE];
@@
-656,7
+656,12
@@
static int io_bytes_exceeded(struct thread_data *td)
else
bytes = td->this_io_bytes[DDIR_TRIM];
else
bytes = td->this_io_bytes[DDIR_TRIM];
- return bytes >= td->o.size || exceeds_number_ios(td);
+ if (td->o.io_limit)
+ limit = td->o.io_limit;
+ else
+ limit = td->o.size;
+
+ return bytes >= limit || exceeds_number_ios(td);
}
/*
}
/*
@@
-775,16
+780,21
@@
static uint64_t do_io(struct thread_data *td)
case FIO_Q_COMPLETED:
if (io_u->error) {
ret = -io_u->error;
case FIO_Q_COMPLETED:
if (io_u->error) {
ret = -io_u->error;
+ unlog_io_piece(td, io_u);
clear_io_u(td, io_u);
} else if (io_u->resid) {
int bytes = io_u->xfer_buflen - io_u->resid;
struct fio_file *f = io_u->file;
bytes_issued += bytes;
clear_io_u(td, io_u);
} else if (io_u->resid) {
int bytes = io_u->xfer_buflen - io_u->resid;
struct fio_file *f = io_u->file;
bytes_issued += bytes;
+
+ trim_io_piece(td, io_u);
+
/*
* zero read, fail
*/
if (!bytes) {
/*
* zero read, fail
*/
if (!bytes) {
+ unlog_io_piece(td, io_u);
td_verror(td, EIO, "full resid");
put_io_u(td, io_u);
break;
td_verror(td, EIO, "full resid");
put_io_u(td, io_u);
break;
@@
-825,6
+835,7
@@
sync_done:
bytes_issued += io_u->xfer_buflen;
break;
case FIO_Q_BUSY:
bytes_issued += io_u->xfer_buflen;
break;
case FIO_Q_BUSY:
+ unlog_io_piece(td, io_u);
requeue_io_u(td, &io_u);
ret2 = td_io_commit(td);
if (ret2 < 0)
requeue_io_u(td, &io_u);
ret2 = td_io_commit(td);
if (ret2 < 0)
@@
-1141,6
+1152,8
@@
static int switch_ioscheduler(struct thread_data *td)
static int keep_running(struct thread_data *td)
{
static int keep_running(struct thread_data *td)
{
+ unsigned long long limit;
+
if (td->done)
return 0;
if (td->o.time_based)
if (td->done)
return 0;
if (td->o.time_based)
@@
-1152,14
+1165,19
@@
static int keep_running(struct thread_data *td)
if (exceeds_number_ios(td))
return 0;
if (exceeds_number_ios(td))
return 0;
- if (td->o.size != -1ULL && ddir_rw_sum(td->io_bytes) < td->o.size) {
+ if (td->o.io_limit)
+ limit = td->o.io_limit;
+ else
+ limit = td->o.size;
+
+ if (limit != -1ULL && ddir_rw_sum(td->io_bytes) < limit) {
uint64_t diff;
/*
* If the difference is less than the minimum IO size, we
* are done.
*/
uint64_t diff;
/*
* If the difference is less than the minimum IO size, we
* are done.
*/
- diff =
td->o.size
- ddir_rw_sum(td->io_bytes);
+ diff =
limit
- ddir_rw_sum(td->io_bytes);
if (diff < td_max_bs(td))
return 0;
if (diff < td_max_bs(td))
return 0;
@@
-1327,6
+1345,7
@@
static void *thread_main(void *data)
#ifdef CONFIG_LIBNUMA
/* numa node setup */
if (o->numa_cpumask_set || o->numa_memmask_set) {
#ifdef CONFIG_LIBNUMA
/* numa node setup */
if (o->numa_cpumask_set || o->numa_memmask_set) {
+ struct bitmask *mask;
int ret;
if (numa_available() < 0) {
int ret;
if (numa_available() < 0) {
@@
-1335,7
+1354,9
@@
static void *thread_main(void *data)
}
if (o->numa_cpumask_set) {
}
if (o->numa_cpumask_set) {
- ret = numa_run_on_node_mask(o->numa_cpunodesmask);
+ mask = numa_parse_nodestring(o->numa_cpunodes);
+ ret = numa_run_on_node_mask(mask);
+ numa_free_nodemask(mask);
if (ret == -1) {
td_verror(td, errno, \
"numa_run_on_node_mask failed\n");
if (ret == -1) {
td_verror(td, errno, \
"numa_run_on_node_mask failed\n");
@@
-1345,12
+1366,16
@@
static void *thread_main(void *data)
if (o->numa_memmask_set) {
if (o->numa_memmask_set) {
+ mask = NULL;
+ if (o->numa_memnodes)
+ mask = numa_parse_nodestring(o->numa_memnodes);
+
switch (o->numa_mem_mode) {
case MPOL_INTERLEAVE:
switch (o->numa_mem_mode) {
case MPOL_INTERLEAVE:
- numa_set_interleave_mask(
o->numa_memnodes
mask);
+ numa_set_interleave_mask(mask);
break;
case MPOL_BIND:
break;
case MPOL_BIND:
- numa_set_membind(
o->numa_memnodes
mask);
+ numa_set_membind(mask);
break;
case MPOL_LOCAL:
numa_set_localalloc();
break;
case MPOL_LOCAL:
numa_set_localalloc();
@@
-1363,6
+1388,9
@@
static void *thread_main(void *data)
break;
}
break;
}
+ if (mask)
+ numa_free_nodemask(mask);
+
}
}
#endif
}
}
#endif