25 lines
		
	
	
	
		
			614 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			25 lines
		
	
	
	
		
			614 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#include <linux/atomic.h>
							 | 
						||
| 
								 | 
							
								#include <linux/debugfs.h>
							 | 
						||
| 
								 | 
							
								#include <linux/notifier.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct notifier_err_inject_action {
							 | 
						||
| 
								 | 
							
									unsigned long val;
							 | 
						||
| 
								 | 
							
									int error;
							 | 
						||
| 
								 | 
							
									const char *name;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define NOTIFIER_ERR_INJECT_ACTION(action)	\
							 | 
						||
| 
								 | 
							
									.name = #action, .val = (action),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct notifier_err_inject {
							 | 
						||
| 
								 | 
							
									struct notifier_block nb;
							 | 
						||
| 
								 | 
							
									struct notifier_err_inject_action actions[];
							 | 
						||
| 
								 | 
							
									/* The last slot must be terminated with zero sentinel */
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								extern struct dentry *notifier_err_inject_dir;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								extern struct dentry *notifier_err_inject_init(const char *name,
							 | 
						||
| 
								 | 
							
										struct dentry *parent, struct notifier_err_inject *err_inject,
							 | 
						||
| 
								 | 
							
										int priority);
							 |