diff options
Diffstat (limited to 'tests/fs-tests/integrity')
| -rw-r--r-- | tests/fs-tests/integrity/integck.c | 44 | 
1 files changed, 23 insertions, 21 deletions
| diff --git a/tests/fs-tests/integrity/integck.c b/tests/fs-tests/integrity/integck.c index f99caae..c3c3813 100644 --- a/tests/fs-tests/integrity/integck.c +++ b/tests/fs-tests/integrity/integck.c @@ -1881,27 +1881,27 @@ static int symlink_remove(struct symlink_info *symlink)  static int operate_on_dir(struct dir_info *dir);  /* Randomly select something to do with a file */ -static void operate_on_file(struct file_info *file) +static int operate_on_file(struct file_info *file)  {  	/* Try to keep at least 10 files open */  	if (open_files_count < 10) {  		file_open(file); -		return; +		return 0;  	}  	/* Try to keep about 20 files open */  	if (open_files_count < 20 && random_no(2) == 0) {  		file_open(file); -		return; +		return 0;  	}  	/* Try to keep up to 40 files open */  	if (open_files_count < 40 && random_no(20) == 0) {  		file_open(file); -		return; +		return 0;  	}  	/* Occasionly truncate */  	if (shrink && random_no(100) == 0) {  		file_truncate_file(file); -		return; +		return 0;  	}  	/* Mostly just write */  	file_write_file(file); @@ -1918,38 +1918,40 @@ static void operate_on_file(struct file_info *file)  			file_check(file, fd);  		}  	} +	return 0;  }  /* Randomly select something to do with a directory entry */  static int operate_on_entry(struct dir_entry_info *entry)  { +	int ret = 0; +  	/* 1 time in 1000 rename */  	if (random_no(1000) == 0) -		return rename_entry(entry); -	if (entry->type == 's') { +		ret = rename_entry(entry); +	else if (entry->type == 's') {  		symlink_check(entry->symlink);  		/* If shrinking, 1 time in 50, remove a symlink */  		if (shrink && random_no(50) == 0) -			return symlink_remove(entry->symlink); -		return 0; -	} -	if (entry->type == 'd') { +			ret = symlink_remove(entry->symlink); +	} else if (entry->type == 'd') {  		/* If shrinking, 1 time in 50, remove a directory */  		if (shrink && random_no(50) == 0) -			return dir_remove(entry->dir); -		return operate_on_dir(entry->dir); -	} -	if (entry->type == 'f') { +			ret = dir_remove(entry->dir); +		else +			ret = operate_on_dir(entry->dir); +	} else if (entry->type == 'f') {  		/* If shrinking, 1 time in 10, remove a file */  		if (shrink && random_no(10) == 0) -			return file_delete(entry->file); +			ret = file_delete(entry->file);  		/* If not growing, 1 time in 10, unlink a file with links > 1 */ -		if (!grow && entry->file->link_count > 1 && -		    random_no(10) == 0) -			return file_unlink_file(entry->file); -		operate_on_file(entry->file); +		else if (!grow && entry->file->link_count > 1 && +			 random_no(10) == 0) +			ret = file_unlink_file(entry->file); +		else +			ret = operate_on_file(entry->file);  	} -	return 0; +	return ret;  }  /* | 
