mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	Btrfs: fix max chunk size check in chunk allocator
Fix a bug, where in case we need to adjust stripe_size so that the length of the resulting chunk is less than or equal to max_chunk_size, DUP chunks turn out to be only half as big as they could be. Cc: Arne Jansen <sensille@gmx.net> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
		
							parent
							
								
									b916a59adf
								
							
						
					
					
						commit
						37db63a400
					
				
					 1 changed files with 4 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -3324,12 +3324,14 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
 | 
			
		|||
	stripe_size = devices_info[ndevs-1].max_avail;
 | 
			
		||||
	num_stripes = ndevs * dev_stripes;
 | 
			
		||||
 | 
			
		||||
	if (stripe_size * num_stripes > max_chunk_size * ncopies) {
 | 
			
		||||
	if (stripe_size * ndevs > max_chunk_size * ncopies) {
 | 
			
		||||
		stripe_size = max_chunk_size * ncopies;
 | 
			
		||||
		do_div(stripe_size, num_stripes);
 | 
			
		||||
		do_div(stripe_size, ndevs);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	do_div(stripe_size, dev_stripes);
 | 
			
		||||
 | 
			
		||||
	/* align to BTRFS_STRIPE_LEN */
 | 
			
		||||
	do_div(stripe_size, BTRFS_STRIPE_LEN);
 | 
			
		||||
	stripe_size *= BTRFS_STRIPE_LEN;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue