mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 08:26:29 +00:00 
			
		
		
		
	 f40c396a9a
			
		
	
	
		f40c396a9a
		
	
	
	
	
		
			
			For now, all users of ratelimit_state allocates it statically, so DEFINE_RATELIMIT_STATE() is enough. But, I want to use ratelimit_state for fs, i.e. per super_block to suppress too many error reports. So, this adds ratelimit_state_init() to initialize ratelimite_state which is dynamically allocated, instead of opencoding. Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
			
				
	
	
		
			43 lines
		
	
	
		
			961 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			961 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _LINUX_RATELIMIT_H
 | |
| #define _LINUX_RATELIMIT_H
 | |
| 
 | |
| #include <linux/param.h>
 | |
| #include <linux/spinlock.h>
 | |
| 
 | |
| #define DEFAULT_RATELIMIT_INTERVAL	(5 * HZ)
 | |
| #define DEFAULT_RATELIMIT_BURST		10
 | |
| 
 | |
| struct ratelimit_state {
 | |
| 	spinlock_t	lock;		/* protect the state */
 | |
| 
 | |
| 	int		interval;
 | |
| 	int		burst;
 | |
| 	int		printed;
 | |
| 	int		missed;
 | |
| 	unsigned long	begin;
 | |
| };
 | |
| 
 | |
| #define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init)		\
 | |
| 									\
 | |
| 	struct ratelimit_state name = {					\
 | |
| 		.lock		= __SPIN_LOCK_UNLOCKED(name.lock),	\
 | |
| 		.interval	= interval_init,			\
 | |
| 		.burst		= burst_init,				\
 | |
| 	}
 | |
| 
 | |
| static inline void ratelimit_state_init(struct ratelimit_state *rs,
 | |
| 					int interval, int burst)
 | |
| {
 | |
| 	spin_lock_init(&rs->lock);
 | |
| 	rs->interval = interval;
 | |
| 	rs->burst = burst;
 | |
| 	rs->printed = 0;
 | |
| 	rs->missed = 0;
 | |
| 	rs->begin = 0;
 | |
| }
 | |
| 
 | |
| extern int ___ratelimit(struct ratelimit_state *rs, const char *func);
 | |
| #define __ratelimit(state) ___ratelimit(state, __func__)
 | |
| 
 | |
| #endif /* _LINUX_RATELIMIT_H */
 |