diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/fs-tests/integrity/integck.c | 114 |
1 files changed, 71 insertions, 43 deletions
diff --git a/tests/fs-tests/integrity/integck.c b/tests/fs-tests/integrity/integck.c index 5b1adc1..1703364 100644 --- a/tests/fs-tests/integrity/integck.c +++ b/tests/fs-tests/integrity/integck.c @@ -1953,16 +1953,21 @@ static void operate_on_an_open_file(void) } } -static void do_an_operation(void) +static int do_an_operation(void) { /* Half the time operate on already open files */ if (random_no(100) < 50) operate_on_dir(top_dir); else operate_on_an_open_file(); + + return 0; } -static void create_test_data(void) +/* + * Fill the tested file-system with random stuff. + */ +static int create_test_data(void) { uint64_t i, n; @@ -1971,28 +1976,77 @@ static void create_test_data(void) full = 0; operation_count = 0; while (!full) { - do_an_operation(); - ++operation_count; + if (do_an_operation()) + return -1; + operation_count += 1; } + + /* Drop to less than 90% full */ grow = 0; shrink = 1; - /* Drop to less than 90% full */ n = operation_count / 40; while (n--) { - uint64_t free; - uint64_t total; - for (i = 0; i < 10; ++i) - do_an_operation(); + uint64_t free, total; + + for (i = 0; i < 10; i++) + if (do_an_operation()) + return -1; + get_fs_space(&total, &free); if ((free * 100) / total >= 10) break; } + + grow = 0; + shrink = 0; + full = 0; + n = operation_count * 2; + for (i = 0; i < n; i++) + if (do_an_operation()) + return -1; + + return 0; +} + +/* + * Do more random operation on the tested file-system. + */ +static int update_test_data(void) +{ + uint64_t i, n; + + grow = 1; + shrink = 0; + full = 0; + while (!full) + if (do_an_operation()) + return -1; + + /* Drop to less than 50% full */ + grow = 0; + shrink = 1; + n = operation_count / 10; + while (n--) { + uint64_t free, total; + + for (i = 0; i < 10; i++) + if (do_an_operation()) + return -1; + + get_fs_space(&total, &free); + if ((free * 100) / total >= 50) + break; + } + grow = 0; shrink = 0; full = 0; n = operation_count * 2; - for (i = 0; i < n; ++i) - do_an_operation(); + for (i = 0; i < n; i++) + if (do_an_operation()) + return -1; + + return 0; } /* @@ -2042,36 +2096,6 @@ static int rm_minus_rf_dir(const char *dir_name) return 0; } -static void update_test_data(void) -{ - uint64_t i, n; - - grow = 1; - shrink = 0; - full = 0; - while (!full) - do_an_operation(); - grow = 0; - shrink = 1; - /* Drop to less than 50% full */ - n = operation_count / 10; - while (n--) { - uint64_t free; - uint64_t total; - for (i = 0; i < 10; ++i) - do_an_operation(); - get_fs_space(&total, &free); - if ((free * 100) / total >= 50) - break; - } - grow = 0; - shrink = 0; - full = 0; - n = operation_count * 2; - for (i = 0; i < n; ++i) - do_an_operation(); -} - /** * Re-mount the test file-system. This function randomly select how to * re-mount. @@ -2193,7 +2217,9 @@ static int integck(void) if (!top_dir) return -1; - create_test_data(); + ret = create_test_data(); + if (ret) + return -1; if (fsinfo.is_rootfs) { close_open_files(); @@ -2208,7 +2234,9 @@ static int integck(void) check_deleted_files(); for (rpt = 0; args.repeat_cnt == 0 || rpt < args.repeat_cnt; ++rpt) { - update_test_data(); + ret = update_test_data(); + if (ret) + return -1; if (!fsinfo.is_rootfs) { close_open_files(); |