diff options
Diffstat (limited to 'tests/fs-tests/integrity')
| -rw-r--r-- | tests/fs-tests/integrity/integck.c | 101 | 
1 files changed, 45 insertions, 56 deletions
diff --git a/tests/fs-tests/integrity/integck.c b/tests/fs-tests/integrity/integck.c index 437922e..748b6cb 100644 --- a/tests/fs-tests/integrity/integck.c +++ b/tests/fs-tests/integrity/integck.c @@ -1702,65 +1702,54 @@ static void dir_check(struct dir_info *dir)  	int link_count = 2; /* Parent and dot */  	struct stat st; -	/* Create an array of entries */ -	sz = sizeof(struct dir_entry_info *); -	n = dir->number_of_entries; -	entry_array = malloc(sz * n); -	CHECK(entry_array != NULL); - -	entry = dir->first; -	p = entry_array; -	while (entry) { -		*p++ = entry; -		entry->checked = 0; -		entry = entry->next; -	} +	path = dir_path(dir->parent, dir->entry->name); -	/* Sort it by name */ -	qsort(entry_array, n, sz, sort_comp); +	if (!args.power_cut_mode || dir->clean) { +		v("checking dir %s", path); -	/* Go through directory on file system checking entries match */ -	path = dir_path(dir->parent, dir->entry->name); +		/* Create an array of entries */ +		sz = sizeof(struct dir_entry_info *); +		n = dir->number_of_entries; +		entry_array = malloc(sz * n); +		CHECK(entry_array != NULL); -	v("checking dir %s", path); +		entry = dir->first; +		p = entry_array; +		while (entry) { +			*p++ = entry; +			entry->checked = 0; +			entry = entry->next; +		} -	d = opendir(path); -	if (!d) { -		if (args.power_cut_mode && !dir->clean) -			/* -			 * We are doing power cut testing and the directory -			 * was not synchronized, which means it might not -			 * exist. -			 */ -			return; +		/* Sort it by name */ +		qsort(entry_array, n, sz, sort_comp); -		errmsg("cannot open directory %s", path); -		CHECK(0); -	} +		/* Go through directory on file system checking entries match */ +		d = opendir(path); +		if (!d) { +			errmsg("cannot open directory %s", path); +			CHECK(0); +		} -	for (;;) { -		errno = 0; -		ent = readdir(d); -		if (ent) { -			if (strcmp(".",ent->d_name) != 0 && -					strcmp("..",ent->d_name) != 0) { -				dir_entry_check(entry_array, n, ent); -				checked += 1; +		for (;;) { +			errno = 0; +			ent = readdir(d); +			if (ent) { +				if (strcmp(".",ent->d_name) != 0 && +						strcmp("..",ent->d_name) != 0) { +					dir_entry_check(entry_array, n, ent); +					checked += 1; +				} +			} else { +				CHECK(errno == 0); +				break;  			} -		} else { -			CHECK(errno == 0); -			break;  		} -	} -	CHECK(closedir(d) == 0); +		free(entry_array); +		CHECK(closedir(d) == 0); -	/* -	 * In power cut mode the file-system may miss some directory entries -	 * because it is possible that they have not reached the media by the -	 * time of the emulated power cut. -	 */ -	if (!args.power_cut_mode || dir->clean)  		CHECK(checked == dir->number_of_entries); +	}  	/* Now check each entry */  	entry = dir->first; @@ -1777,15 +1766,15 @@ static void dir_check(struct dir_info *dir)  		entry = entry->next;  	} -	CHECK(stat(path, &st) == 0); - -	if (link_count != st.st_nlink) { -		errmsg("calculated link count %d, FS reports %d for dir %s", -		       link_count, (int)st.st_nlink, path); -		CHECK(0); +	if (!args.power_cut_mode || dir->clean) { +		CHECK(stat(path, &st) == 0); +		if (link_count != st.st_nlink) { +			errmsg("calculated link count %d, FS reports %d for dir %s", +			       link_count, (int)st.st_nlink, path); +			CHECK(0); +		}  	} -	free(entry_array);  	free(path);  }  | 
