diff options
Diffstat (limited to 'tests/fs-tests/integrity')
-rw-r--r-- | tests/fs-tests/integrity/integck.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/tests/fs-tests/integrity/integck.c b/tests/fs-tests/integrity/integck.c index 1dd424e..a35b7ae 100644 --- a/tests/fs-tests/integrity/integck.c +++ b/tests/fs-tests/integrity/integck.c @@ -2094,11 +2094,20 @@ static int operate_on_file(struct file_info *file) return 0; } +/* + * The operate on entry function is recursive because it calls + * 'operate_on_dir()' which calls 'operate_on_entry()' again. This variable is + * used to limit the recursion depth. + */ +static int recursion_depth; + /* Randomly select something to do with a directory entry */ static int operate_on_entry(struct dir_entry_info *entry) { int ret = 0; + recursion_depth += 1; + /* 1 time in 1000 rename */ if (random_no(1000) == 0) ret = rename_entry(entry); @@ -2111,7 +2120,7 @@ static int operate_on_entry(struct dir_entry_info *entry) /* If shrinking, 1 time in 50, remove a directory */ if (shrink && random_no(50) == 0) ret = dir_remove(entry->dir); - else + else if (recursion_depth < 20) ret = operate_on_dir(entry->dir); } else if (entry->type == 'f') { /* If shrinking, 1 time in 10, remove a file */ @@ -2124,6 +2133,8 @@ static int operate_on_entry(struct dir_entry_info *entry) else ret = operate_on_file(entry->file); } + + recursion_depth -= 1; return ret; } |