diff options
Diffstat (limited to 'tests/fs-tests/integrity')
| -rw-r--r-- | tests/fs-tests/integrity/integck.c | 20 | 
1 files changed, 17 insertions, 3 deletions
diff --git a/tests/fs-tests/integrity/integck.c b/tests/fs-tests/integrity/integck.c index f1a2f84..bbbc7cb 100644 --- a/tests/fs-tests/integrity/integck.c +++ b/tests/fs-tests/integrity/integck.c @@ -213,7 +213,6 @@ static int full   = 0; /* Flag that the file system is full */  static uint64_t operation_count = 0; /* Number of operations used to fill                                          up the file system */  static unsigned int check_run_no; -  static unsigned int random_seed;  /* @@ -1110,11 +1109,14 @@ static int file_mmap_write(struct file_info *file)  	uint64_t free_space;  	int fd; +	assert(!args.power_cut_mode); +  	if (!file->links)  		return 0;  	get_fs_space(NULL, &free_space);  	if (!free_space)  		return 0; +  	/* Randomly pick a written area of the file */  	if (!w)  		return 0; @@ -1191,8 +1193,20 @@ static int file_write(struct file_info *file, int fd)  	unsigned int seed;  	int ret, truncate = 0; -	if (fsinfo.can_mmap && !full && file->link_count && -	    random_no(100) == 1) +	/* +	 * Do not do 'mmap()' operations if: +	 * 1. we are in power cut testing mode, because an emulated power cut +	 *    failure may cause SIGBUS when we are writing to the 'mmap()'ed +	 *    area, and SIGBUS is not easy to ignore. +	 * 2. When the file-system is full, because again, writing to the +	 *    'mmap()'ed area may cause SIGBUS when the space allocation fails. +	 *    This is not enough to guarantee we never get SIGBUS, though. For +	 *    example, if we write a lot to a hole, this might require a lot of +	 *    additional space, and we may fail here. But I do not know why we +	 *    never observed this, probably this is just very unlikely. +	 */ +	if (!args.power_cut_mode && fsinfo.can_mmap && !full && +	    file->link_count && random_no(100) == 1)  		return file_mmap_write(file);  	get_offset_and_size(file, &offset, &size);  | 
