~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/autofs/autofs_i.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /fs/autofs/autofs_i.h (Version linux-6.12-rc7) and /fs/autofs/autofs_i.h (Version linux-4.14.336)


  1 /* SPDX-License-Identifier: GPL-2.0-or-later *      1 
  2 /*                                                
  3  *  Copyright 1997-1998 Transmeta Corporation     
  4  *  Copyright 2005-2006 Ian Kent <raven@themaw    
  5  */                                               
  6                                                   
  7 /* Internal header file for autofs */             
  8                                                   
  9 #include <linux/auto_fs.h>                        
 10 #include <linux/auto_dev-ioctl.h>                 
 11                                                   
 12 #include <linux/kernel.h>                         
 13 #include <linux/slab.h>                           
 14 #include <linux/time.h>                           
 15 #include <linux/string.h>                         
 16 #include <linux/wait.h>                           
 17 #include <linux/sched.h>                          
 18 #include <linux/sched/signal.h>                   
 19 #include <linux/mount.h>                          
 20 #include <linux/namei.h>                          
 21 #include <linux/uaccess.h>                        
 22 #include <linux/mutex.h>                          
 23 #include <linux/spinlock.h>                       
 24 #include <linux/list.h>                           
 25 #include <linux/completion.h>                     
 26 #include <linux/file.h>                           
 27 #include <linux/magic.h>                          
 28 #include <linux/fs_context.h>                     
 29 #include <linux/fs_parser.h>                      
 30                                                   
 31 /* This is the range of ioctl() numbers we cla    
 32 #define AUTOFS_IOC_FIRST     AUTOFS_IOC_READY     
 33 #define AUTOFS_IOC_COUNT     32                   
 34                                                   
 35 #define AUTOFS_DEV_IOCTL_IOC_FIRST      (AUTOF    
 36 #define AUTOFS_DEV_IOCTL_IOC_COUNT \              
 37         (AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD - A    
 38                                                   
 39 #ifdef pr_fmt                                     
 40 #undef pr_fmt                                     
 41 #endif                                            
 42 #define pr_fmt(fmt) KBUILD_MODNAME ":pid:%d:%s    
 43                                                   
 44 extern struct file_system_type autofs_fs_type;    
 45                                                   
 46 /*                                                
 47  * Unified info structure.  This is pointed to    
 48  * inode structures.  Each file in the filesys    
 49  * structure.  It holds a reference to the den    
 50  * flushed while the file exists.  All name lo    
 51  * dentry level, although the filesystem can i    
 52  * process.  Readdir is implemented by travers    
 53  */                                               
 54 struct autofs_info {                              
 55         struct dentry   *dentry;                  
 56         int             flags;                    
 57                                                   
 58         struct completion expire_complete;        
 59                                                   
 60         struct list_head active;                  
 61                                                   
 62         struct list_head expiring;                
 63                                                   
 64         struct autofs_sb_info *sbi;               
 65         unsigned long exp_timeout;                
 66         unsigned long last_used;                  
 67         int count;                                
 68                                                   
 69         kuid_t uid;                               
 70         kgid_t gid;                               
 71         struct rcu_head rcu;                      
 72 };                                                
 73                                                   
 74 #define AUTOFS_INF_EXPIRING     (1<<0) /* dent    
 75 #define AUTOFS_INF_WANT_EXPIRE  (1<<1) /* the     
 76                                         * for     
 77                                         * not     
 78                                         * actu    
 79                                         * not     
 80                                         * in t    
 81                                         * when    
 82                                         */        
 83 #define AUTOFS_INF_PENDING      (1<<2) /* dent    
 84                                                   
 85 #define AUTOFS_INF_EXPIRE_SET   (1<<3) /* per-    
 86                                           this    
 87                                         */        
 88 struct autofs_wait_queue {                        
 89         wait_queue_head_t queue;                  
 90         struct autofs_wait_queue *next;           
 91         autofs_wqt_t wait_queue_token;            
 92         /* We use the following to see what we    
 93         struct qstr name;                         
 94         u32 offset;                               
 95         u32 dev;                                  
 96         u64 ino;                                  
 97         kuid_t uid;                               
 98         kgid_t gid;                               
 99         pid_t pid;                                
100         pid_t tgid;                               
101         /* This is for status reporting upon r    
102         int status;                               
103         unsigned int wait_ctr;                    
104 };                                                
105                                                   
106 #define AUTOFS_SBI_MAGIC 0x6d4a556d               
107                                                   
108 #define AUTOFS_SBI_CATATONIC    0x0001            
109 #define AUTOFS_SBI_STRICTEXPIRE 0x0002            
110 #define AUTOFS_SBI_IGNORE       0x0004            
111                                                   
112 struct autofs_sb_info {                           
113         u32 magic;                                
114         int pipefd;                               
115         struct file *pipe;                        
116         struct pid *oz_pgrp;                      
117         int version;                              
118         int sub_version;                          
119         int min_proto;                            
120         int max_proto;                            
121         unsigned int flags;                       
122         unsigned long exp_timeout;                
123         unsigned int type;                        
124         struct super_block *sb;                   
125         struct mutex wq_mutex;                    
126         struct mutex pipe_mutex;                  
127         spinlock_t fs_lock;                       
128         struct autofs_wait_queue *queues; /* W    
129         spinlock_t lookup_lock;                   
130         struct list_head active_list;             
131         struct list_head expiring_list;           
132         struct rcu_head rcu;                      
133 };                                                
134                                                   
135 static inline struct autofs_sb_info *autofs_sb    
136 {                                                 
137         return (struct autofs_sb_info *)(sb->s    
138 }                                                 
139                                                   
140 static inline struct autofs_info *autofs_dentr    
141 {                                                 
142         return (struct autofs_info *)(dentry->    
143 }                                                 
144                                                   
145 /* autofs_oz_mode(): do we see the man behind     
146  * processes which do manipulations for us in     
147  * filesystem without "magic".)                   
148  */                                               
149 static inline int autofs_oz_mode(struct autofs    
150 {                                                 
151         return ((sbi->flags & AUTOFS_SBI_CATAT    
152                  task_pgrp(current) == sbi->oz    
153 }                                                 
154                                                   
155 static inline bool autofs_empty(struct autofs_    
156 {                                                 
157         return ino->count < 2;                    
158 }                                                 
159                                                   
160 struct inode *autofs_get_inode(struct super_bl    
161 void autofs_free_ino(struct autofs_info *);       
162                                                   
163 /* Expiration */                                  
164 int is_autofs_dentry(struct dentry *);            
165 int autofs_expire_wait(const struct path *path    
166 int autofs_expire_run(struct super_block *, st    
167                       struct autofs_sb_info *,    
168                       struct autofs_packet_exp    
169 int autofs_do_expire_multi(struct super_block     
170                            struct autofs_sb_in    
171 int autofs_expire_multi(struct super_block *,     
172                         struct autofs_sb_info     
173                                                   
174 /* Device node initialization */                  
175                                                   
176 int autofs_dev_ioctl_init(void);                  
177 void autofs_dev_ioctl_exit(void);                 
178                                                   
179 /* Operations structures */                       
180                                                   
181 extern const struct inode_operations autofs_sy    
182 extern const struct inode_operations autofs_di    
183 extern const struct file_operations autofs_dir    
184 extern const struct file_operations autofs_roo    
185 extern const struct dentry_operations autofs_d    
186                                                   
187 /* VFS automount flags management functions */    
188 static inline void __managed_dentry_set_manage    
189 {                                                 
190         dentry->d_flags |= (DCACHE_NEED_AUTOMO    
191 }                                                 
192                                                   
193 static inline void managed_dentry_set_managed(    
194 {                                                 
195         spin_lock(&dentry->d_lock);               
196         __managed_dentry_set_managed(dentry);     
197         spin_unlock(&dentry->d_lock);             
198 }                                                 
199                                                   
200 static inline void __managed_dentry_clear_mana    
201 {                                                 
202         dentry->d_flags &= ~(DCACHE_NEED_AUTOM    
203 }                                                 
204                                                   
205 static inline void managed_dentry_clear_manage    
206 {                                                 
207         spin_lock(&dentry->d_lock);               
208         __managed_dentry_clear_managed(dentry)    
209         spin_unlock(&dentry->d_lock);             
210 }                                                 
211                                                   
212 /* Initializing function */                       
213                                                   
214 extern const struct fs_parameter_spec autofs_p    
215 int autofs_init_fs_context(struct fs_context *    
216 struct autofs_info *autofs_new_ino(struct auto    
217 void autofs_clean_ino(struct autofs_info *);      
218                                                   
219 static inline int autofs_check_pipe(struct fil    
220 {                                                 
221         if (!(pipe->f_mode & FMODE_CAN_WRITE))    
222                 return -EINVAL;                   
223         if (!S_ISFIFO(file_inode(pipe)->i_mode    
224                 return -EINVAL;                   
225         return 0;                                 
226 }                                                 
227                                                   
228 static inline void autofs_set_packet_pipe_flag    
229 {                                                 
230         /* We want a packet pipe */               
231         pipe->f_flags |= O_DIRECT;                
232         /* We don't expect -EAGAIN */             
233         pipe->f_flags &= ~O_NONBLOCK;             
234 }                                                 
235                                                   
236 static inline int autofs_prepare_pipe(struct f    
237 {                                                 
238         int ret = autofs_check_pipe(pipe);        
239         if (ret < 0)                              
240                 return ret;                       
241         autofs_set_packet_pipe_flags(pipe);       
242         return 0;                                 
243 }                                                 
244                                                   
245 /* Queue management functions */                  
246                                                   
247 int autofs_wait(struct autofs_sb_info *,          
248                  const struct path *, enum aut    
249 int autofs_wait_release(struct autofs_sb_info     
250 void autofs_catatonic_mode(struct autofs_sb_in    
251                                                   
252 static inline u32 autofs_get_dev(struct autofs    
253 {                                                 
254         return new_encode_dev(sbi->sb->s_dev);    
255 }                                                 
256                                                   
257 static inline u64 autofs_get_ino(struct autofs    
258 {                                                 
259         return d_inode(sbi->sb->s_root)->i_ino    
260 }                                                 
261                                                   
262 static inline void __autofs_add_expiring(struc    
263 {                                                 
264         struct autofs_sb_info *sbi = autofs_sb    
265         struct autofs_info *ino = autofs_dentr    
266                                                   
267         if (ino) {                                
268                 if (list_empty(&ino->expiring)    
269                         list_add(&ino->expirin    
270         }                                         
271 }                                                 
272                                                   
273 static inline void autofs_add_expiring(struct     
274 {                                                 
275         struct autofs_sb_info *sbi = autofs_sb    
276         struct autofs_info *ino = autofs_dentr    
277                                                   
278         if (ino) {                                
279                 spin_lock(&sbi->lookup_lock);     
280                 if (list_empty(&ino->expiring)    
281                         list_add(&ino->expirin    
282                 spin_unlock(&sbi->lookup_lock)    
283         }                                         
284 }                                                 
285                                                   
286 static inline void autofs_del_expiring(struct     
287 {                                                 
288         struct autofs_sb_info *sbi = autofs_sb    
289         struct autofs_info *ino = autofs_dentr    
290                                                   
291         if (ino) {                                
292                 spin_lock(&sbi->lookup_lock);     
293                 if (!list_empty(&ino->expiring    
294                         list_del_init(&ino->ex    
295                 spin_unlock(&sbi->lookup_lock)    
296         }                                         
297 }                                                 
298                                                   
299 void autofs_kill_sb(struct super_block *);        
300                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php