dm cache metadata: fix metadata2 format's blocks_are_clean_separate_dirty
The dm_bitset_cursor_begin() call was using the incorrect nr_entries.
Also, the last dm_bitset_cursor_next() must be avoided if we're at the
end of the cursor.
Fixes: 7f1b21591a ("dm cache metadata: use cursor api in blocks_are_clean_separate_dirty()")
Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
			
			
This commit is contained in:
		
							parent
							
								
									f1a880a93b
								
							
						
					
					
						commit
						0d963b6e65
					
				| @ -932,7 +932,7 @@ static int blocks_are_clean_separate_dirty(struct dm_cache_metadata *cmd, | |||||||
| 	*result = true; | 	*result = true; | ||||||
| 
 | 
 | ||||||
| 	r = dm_bitset_cursor_begin(&cmd->dirty_info, cmd->dirty_root, | 	r = dm_bitset_cursor_begin(&cmd->dirty_info, cmd->dirty_root, | ||||||
| 				   from_cblock(begin), &cmd->dirty_cursor); | 				   from_cblock(cmd->cache_blocks), &cmd->dirty_cursor); | ||||||
| 	if (r) { | 	if (r) { | ||||||
| 		DMERR("%s: dm_bitset_cursor_begin for dirty failed", __func__); | 		DMERR("%s: dm_bitset_cursor_begin for dirty failed", __func__); | ||||||
| 		return r; | 		return r; | ||||||
| @ -959,14 +959,16 @@ static int blocks_are_clean_separate_dirty(struct dm_cache_metadata *cmd, | |||||||
| 			return 0; | 			return 0; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		begin = to_cblock(from_cblock(begin) + 1); | ||||||
|  | 		if (begin == end) | ||||||
|  | 			break; | ||||||
|  | 
 | ||||||
| 		r = dm_bitset_cursor_next(&cmd->dirty_cursor); | 		r = dm_bitset_cursor_next(&cmd->dirty_cursor); | ||||||
| 		if (r) { | 		if (r) { | ||||||
| 			DMERR("%s: dm_bitset_cursor_next for dirty failed", __func__); | 			DMERR("%s: dm_bitset_cursor_next for dirty failed", __func__); | ||||||
| 			dm_bitset_cursor_end(&cmd->dirty_cursor); | 			dm_bitset_cursor_end(&cmd->dirty_cursor); | ||||||
| 			return r; | 			return r; | ||||||
| 		} | 		} | ||||||
| 
 |  | ||||||
| 		begin = to_cblock(from_cblock(begin) + 1); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	dm_bitset_cursor_end(&cmd->dirty_cursor); | 	dm_bitset_cursor_end(&cmd->dirty_cursor); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user