ed repository; edit this file 'description' to name the repository.
summaryrefslogblamecommitdiffstats
path: root/init/initramfs.c
blob: a67ef9dbda9dae0ea7a1619a393c55157a6d8592 (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                                                                      






                         
                         
                           
                        







                                 

               

                                             

                               
                     
                          
                                     








                                                       
                                                            
                                                       








                                                                       

                                                 

                                  
                                                     

                                                        
                         


                         
                              











                                            
                                 



                 
                                                         









































                                                                             


                                                         
                               




















                                                          
                          























                                                            
                                         





                         
                                   









































                                                                       



                                                                        






                                                                 








































                                                                
                                                                          





                                                                       
                                                       










                                                                     









                                                   
                                    
                            






                                                                   


                                                          

                                                                     
                                                                            






                                                 
                                          





                                                         
                                                   









                                                 

                                            













                                                       
                                 

                                                              
                                   

























                                                       
                                                        
 
                                  
                    
                          
                    
                          












                                                                      
                       

 
                                                                             
 
                                     
 
                                                              
 
                         
                                 

                                           
 


                                                                            

                                                     
                                                
 


















                                                         
                                                                         

                                                                            
                                                     


                                                             





                                                                                

                                                            
                                   



                                                            
         
                    


                           


                       










                                                

                                      
                         
                        


                                    


                                                                           


                             
 
                   
















                                                                               
     



                         
                         





                                     
                
 
                                        










                                            


                                                 











                                                                 
                                              



                                                             
                                                         




                      
      
 
                                       
 
                                                                          
                
                                                                             
                           
                         
                       
                                                                                    
                                                            
                                                   
                           
                                      
                                  

                                       
                                                                              
                 

                                                                     
                                              
                                                      



                                                                   
                                      
                 
             
     
                                                             
                                                            
                                                   

                                                                                   

                              




                                                                          
         
                 
 
                                 
/*
 * Many of the syscalls used in this file expect some of the arguments
 * to be __user pointers not __kernel pointers.  To limit the sparse
 * noise, turn off sparse checking for this file.
 */
#ifdef __CHECKER__
#undef __CHECKER__
#warning "Sparse checking disabled for this file"
#endif

#include <linux/init.h>
#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/types.h>
#include <linux/fcntl.h>
#include <linux/delay.h>
#include <linux/string.h>
#include <linux/dirent.h>
#include <linux/syscalls.h>
#include <linux/utime.h>

static __initdata char *message;
static void __init error(char *x)
{
	if (!message)
		message = x;
}

/* link hash */

#define N_ALIGN(len) ((((len) + 1) & ~3) + 2)

static __initdata struct hash {
	int ino, minor, major;
	umode_t mode;
	struct hash *next;
	char name[N_ALIGN(PATH_MAX)];
} *head[32];

static inline int hash(int major, int minor, int ino)
{
	unsigned long tmp = ino + minor + (major << 3);
	tmp += tmp >> 5;
	return tmp & 31;
}

static char __init *find_link(int major, int minor, int ino,
			      umode_t mode, char *name)
{
	struct hash **p, *q;
	for (p = head + hash(major, minor, ino); *p; p = &(*p)->next) {
		if ((*p)->ino != ino)
			continue;
		if ((*p)->minor != minor)
			continue;
		if ((*p)->major != major)
			continue;