ext4: add WARN_ON to check the length of allocated blocks
In commit 921f266b: ext4: add self-testing infrastructure to do a
sanity check, some sanity checks were added in map_blocks to make sure
'retval == map->m_len'.
Enable these checks by default and report any assertion failures using
ext4_warning() and WARN_ON() since they can help us to figure out some
bugs that are otherwise hard to hit.
Signed-off-by: Zheng Liu <wenqing.lz@taobao.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
			
			
This commit is contained in:
		
							parent
							
								
									94eec0fc35
								
							
						
					
					
						commit
						44fb851dfb
					
				| @ -555,14 +555,13 @@ int ext4_map_blocks(handle_t *handle, struct inode *inode, | ||||
| 		int ret; | ||||
| 		unsigned long long status; | ||||
| 
 | ||||
| #ifdef ES_AGGRESSIVE_TEST | ||||
| 		if (retval != map->m_len) { | ||||
| 			printk("ES len assertion failed for inode: %lu " | ||||
| 			       "retval %d != map->m_len %d " | ||||
| 			       "in %s (lookup)\n", inode->i_ino, retval, | ||||
| 			       map->m_len, __func__); | ||||
| 		if (unlikely(retval != map->m_len)) { | ||||
| 			ext4_warning(inode->i_sb, | ||||
| 				     "ES len assertion failed for inode " | ||||
| 				     "%lu: retval %d != map->m_len %d", | ||||
| 				     inode->i_ino, retval, map->m_len); | ||||
| 			WARN_ON(1); | ||||
| 		} | ||||
| #endif | ||||
| 
 | ||||
| 		status = map->m_flags & EXT4_MAP_UNWRITTEN ? | ||||
| 				EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN; | ||||
| @ -656,14 +655,13 @@ found: | ||||
| 		int ret; | ||||
| 		unsigned long long status; | ||||
| 
 | ||||
| #ifdef ES_AGGRESSIVE_TEST | ||||
| 		if (retval != map->m_len) { | ||||
| 			printk("ES len assertion failed for inode: %lu " | ||||
| 			       "retval %d != map->m_len %d " | ||||
| 			       "in %s (allocation)\n", inode->i_ino, retval, | ||||
| 			       map->m_len, __func__); | ||||
| 		if (unlikely(retval != map->m_len)) { | ||||
| 			ext4_warning(inode->i_sb, | ||||
| 				     "ES len assertion failed for inode " | ||||
| 				     "%lu: retval %d != map->m_len %d", | ||||
| 				     inode->i_ino, retval, map->m_len); | ||||
| 			WARN_ON(1); | ||||
| 		} | ||||
| #endif | ||||
| 
 | ||||
| 		/*
 | ||||
| 		 * If the extent has been zeroed out, we don't need to update | ||||
| @ -1637,14 +1635,13 @@ add_delayed: | ||||
| 		int ret; | ||||
| 		unsigned long long status; | ||||
| 
 | ||||
| #ifdef ES_AGGRESSIVE_TEST | ||||
| 		if (retval != map->m_len) { | ||||
| 			printk("ES len assertion failed for inode: %lu " | ||||
| 			       "retval %d != map->m_len %d " | ||||
| 			       "in %s (lookup)\n", inode->i_ino, retval, | ||||
| 			       map->m_len, __func__); | ||||
| 		if (unlikely(retval != map->m_len)) { | ||||
| 			ext4_warning(inode->i_sb, | ||||
| 				     "ES len assertion failed for inode " | ||||
| 				     "%lu: retval %d != map->m_len %d", | ||||
| 				     inode->i_ino, retval, map->m_len); | ||||
| 			WARN_ON(1); | ||||
| 		} | ||||
| #endif | ||||
| 
 | ||||
| 		status = map->m_flags & EXT4_MAP_UNWRITTEN ? | ||||
| 				EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user