mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	openvswitch: meter: fix the incorrect calculation of max delta_t
Max delat_t should be the full_bucket/rate instead of the full_bucket.
Also report EINVAL if the rate is zero.
Fixes: 96fbc13d7e ("openvswitch: Add meter infrastructure")
Cc: Andy Zhou <azhou@ovn.org>
Signed-off-by: zhangliping <zhangliping02@baidu.com>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
			
			
This commit is contained in:
		
							parent
							
								
									13fbcc8dc5
								
							
						
					
					
						commit
						ddc502dfed
					
				
					 1 changed files with 9 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -242,14 +242,20 @@ static struct dp_meter *dp_meter_create(struct nlattr **a)
 | 
			
		|||
 | 
			
		||||
		band->type = nla_get_u32(attr[OVS_BAND_ATTR_TYPE]);
 | 
			
		||||
		band->rate = nla_get_u32(attr[OVS_BAND_ATTR_RATE]);
 | 
			
		||||
		if (band->rate == 0) {
 | 
			
		||||
			err = -EINVAL;
 | 
			
		||||
			goto exit_free_meter;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		band->burst_size = nla_get_u32(attr[OVS_BAND_ATTR_BURST]);
 | 
			
		||||
		/* Figure out max delta_t that is enough to fill any bucket.
 | 
			
		||||
		 * Keep max_delta_t size to the bucket units:
 | 
			
		||||
		 * pkts => 1/1000 packets, kilobits => bits.
 | 
			
		||||
		 *
 | 
			
		||||
		 * Start with a full bucket.
 | 
			
		||||
		 */
 | 
			
		||||
		band_max_delta_t = (band->burst_size + band->rate) * 1000;
 | 
			
		||||
		/* Start with a full bucket. */
 | 
			
		||||
		band->bucket = band_max_delta_t;
 | 
			
		||||
		band->bucket = (band->burst_size + band->rate) * 1000;
 | 
			
		||||
		band_max_delta_t = band->bucket / band->rate;
 | 
			
		||||
		if (band_max_delta_t > meter->max_delta_t)
 | 
			
		||||
			meter->max_delta_t = band_max_delta_t;
 | 
			
		||||
		band++;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue