diff --git a/kernel/mars_copy.c b/kernel/mars_copy.c index 7aa74be1..1bfc3087 100644 --- a/kernel/mars_copy.c +++ b/kernel/mars_copy.c @@ -57,6 +57,9 @@ int mars_copy_overlap = 1; EXPORT_SYMBOL_GPL(mars_copy_overlap); +/* Always leave at 1, disable only for throughput _testing_ */ +int mars_copy_strict_write_order = 1; + int mars_copy_timeout = 180; int mars_copy_read_prio = MARS_PRIO_NORMAL; @@ -551,7 +554,9 @@ restart: * Currenty, bio and aio are obeying this. Be careful when * implementing new IO bricks! */ - if (st->prev >= 0 && !GET_STATE(brick, st->prev).writeout) { + if (mars_copy_strict_write_order && + st->prev >= 0 && + !GET_STATE(brick, st->prev).writeout) { goto idle; } mref0 = st->table[0]; diff --git a/kernel/mars_copy.h b/kernel/mars_copy.h index a5c0dc8e..fe8e42bb 100644 --- a/kernel/mars_copy.h +++ b/kernel/mars_copy.h @@ -33,6 +33,7 @@ #define COPY_INPUT_NR 4 extern int mars_copy_overlap; +extern int mars_copy_strict_write_order; extern int mars_copy_timeout; extern int mars_copy_read_prio; extern int mars_copy_write_prio; diff --git a/kernel/sy_old/mars_proc.c b/kernel/sy_old/mars_proc.c index 1c439377..807a2888 100644 --- a/kernel/sy_old/mars_proc.c +++ b/kernel/sy_old/mars_proc.c @@ -322,6 +322,7 @@ struct ctl_table mars_table[] = { #endif INT_ENTRY("io_flying_count", mars_global_io_flying, 0400), INT_ENTRY("copy_overlap", mars_copy_overlap, 0600), + INT_ENTRY("copy_strict_write_order", mars_copy_strict_write_order, 0600), INT_ENTRY("copy_timeout", mars_copy_timeout, 0600), INT_ENTRY("copy_read_prio", mars_copy_read_prio, 0600), INT_ENTRY("copy_write_prio", mars_copy_write_prio, 0600),