mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Fix comparison signedness in arc_is_overflowing()
When ARC size is very small, aggsum_lower_bound(&arc_size) may return negative values, that due to unsigned comparison caused delays, waiting for arc_adjust() to "fix" it by calling aggsum_value(&arc_size). Use of signed comparison there fixes the problem. Reviewed-by: Matt Ahrens <mahrens@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: George Melikov <mail@gmelikov.ru> Signed-off-by: Alexander Motin <mav@FreeBSD.org> Closes #8873
This commit is contained in:
		
							parent
							
								
									581c77e725
								
							
						
					
					
						commit
						72888812b0
					
				@ -5480,7 +5480,7 @@ static boolean_t
 | 
			
		||||
arc_is_overflowing(void)
 | 
			
		||||
{
 | 
			
		||||
	/* Always allow at least one block of overflow */
 | 
			
		||||
	uint64_t overflow = MAX(SPA_MAXBLOCKSIZE,
 | 
			
		||||
	int64_t overflow = MAX(SPA_MAXBLOCKSIZE,
 | 
			
		||||
	    arc_c >> zfs_arc_overflow_shift);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
@ -5492,7 +5492,7 @@ arc_is_overflowing(void)
 | 
			
		||||
	 * in the ARC. In practice, that's in the tens of MB, which is low
 | 
			
		||||
	 * enough to be safe.
 | 
			
		||||
	 */
 | 
			
		||||
	return (aggsum_lower_bound(&arc_size) >= arc_c + overflow);
 | 
			
		||||
	return (aggsum_lower_bound(&arc_size) >= (int64_t)arc_c + overflow);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static abd_t *
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user