]> git.karo-electronics.de Git - mv-sheeva.git/blob - fs/autofs4/root.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
[mv-sheeva.git] / fs / autofs4 / root.c
1 /* -*- c -*- --------------------------------------------------------------- *
2  *
3  * linux/fs/autofs/root.c
4  *
5  *  Copyright 1997-1998 Transmeta Corporation -- All Rights Reserved
6  *  Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org>
7  *  Copyright 2001-2006 Ian Kent <raven@themaw.net>
8  *
9  * This file is part of the Linux kernel and is made available under
10  * the terms of the GNU General Public License, version 2, or at your
11  * option, any later version, incorporated herein by reference.
12  *
13  * ------------------------------------------------------------------------- */
14
15 #include <linux/capability.h>
16 #include <linux/errno.h>
17 #include <linux/stat.h>
18 #include <linux/slab.h>
19 #include <linux/param.h>
20 #include <linux/time.h>
21 #include <linux/compat.h>
22 #include <linux/mutex.h>
23
24 #include "autofs_i.h"
25
26 DEFINE_SPINLOCK(autofs4_lock);
27
28 static int autofs4_dir_symlink(struct inode *,struct dentry *,const char *);
29 static int autofs4_dir_unlink(struct inode *,struct dentry *);
30 static int autofs4_dir_rmdir(struct inode *,struct dentry *);
31 static int autofs4_dir_mkdir(struct inode *,struct dentry *,int);
32 static long autofs4_root_ioctl(struct file *,unsigned int,unsigned long);
33 #ifdef CONFIG_COMPAT
34 static long autofs4_root_compat_ioctl(struct file *,unsigned int,unsigned long);
35 #endif
36 static int autofs4_dir_open(struct inode *inode, struct file *file);
37 static struct dentry *autofs4_lookup(struct inode *,struct dentry *, struct nameidata *);
38 static struct vfsmount *autofs4_d_automount(struct path *);
39 static int autofs4_d_manage(struct dentry *, bool, bool);
40 static void autofs4_dentry_release(struct dentry *);
41
42 const struct file_operations autofs4_root_operations = {
43         .open           = dcache_dir_open,
44         .release        = dcache_dir_close,
45         .read           = generic_read_dir,
46         .readdir        = dcache_readdir,
47         .llseek         = dcache_dir_lseek,
48         .unlocked_ioctl = autofs4_root_ioctl,
49 #ifdef CONFIG_COMPAT
50         .compat_ioctl   = autofs4_root_compat_ioctl,
51 #endif
52 };
53
54 const struct file_operations autofs4_dir_operations = {
55         .open           = autofs4_dir_open,
56         .release        = dcache_dir_close,
57         .read           = generic_read_dir,
58         .readdir        = dcache_readdir,
59         .llseek         = dcache_dir_lseek,
60 };
61
62 const struct inode_operations autofs4_dir_inode_operations = {
63         .lookup         = autofs4_lookup,
64         .unlink         = autofs4_dir_unlink,
65         .symlink        = autofs4_dir_symlink,
66         .mkdir          = autofs4_dir_mkdir,
67         .rmdir          = autofs4_dir_rmdir,
68 };
69
70 const struct dentry_operations autofs4_dentry_operations = {
71         .d_automount    = autofs4_d_automount,
72         .d_manage       = autofs4_d_manage,
73         .d_release      = autofs4_dentry_release,
74 };
75
76 static void autofs4_add_active(struct dentry *dentry)
77 {
78         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
79         struct autofs_info *ino = autofs4_dentry_ino(dentry);
80         if (ino) {
81                 spin_lock(&sbi->lookup_lock);
82                 if (!ino->active_count) {
83                         if (list_empty(&ino->active))
84                                 list_add(&ino->active, &sbi->active_list);
85                 }
86                 ino->active_count++;
87                 spin_unlock(&sbi->lookup_lock);
88         }
89         return;
90 }
91
92 static void autofs4_del_active(struct dentry *dentry)
93 {
94         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
95         struct autofs_info *ino = autofs4_dentry_ino(dentry);
96         if (ino) {
97                 spin_lock(&sbi->lookup_lock);
98                 ino->active_count--;
99                 if (!ino->active_count) {
100                         if (!list_empty(&ino->active))
101                                 list_del_init(&ino->active);
102                 }
103                 spin_unlock(&sbi->lookup_lock);
104         }
105         return;
106 }
107
108 static int autofs4_dir_open(struct inode *inode, struct file *file)
109 {
110         struct dentry *dentry = file->f_path.dentry;
111         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
112
113         DPRINTK("file=%p dentry=%p %.*s",
114                 file, dentry, dentry->d_name.len, dentry->d_name.name);
115
116         if (autofs4_oz_mode(sbi))
117                 goto out;
118
119         /*
120          * An empty directory in an autofs file system is always a
121          * mount point. The daemon must have failed to mount this
122          * during lookup so it doesn't exist. This can happen, for
123          * example, if user space returns an incorrect status for a
124          * mount request. Otherwise we're doing a readdir on the
125          * autofs file system so just let the libfs routines handle
126          * it.
127          */
128         spin_lock(&autofs4_lock);
129         spin_lock(&dentry->d_lock);
130         if (!d_mountpoint(dentry) && list_empty(&dentry->d_subdirs)) {
131                 spin_unlock(&dentry->d_lock);
132                 spin_unlock(&autofs4_lock);
133                 return -ENOENT;
134         }
135         spin_unlock(&dentry->d_lock);
136         spin_unlock(&autofs4_lock);
137
138 out:
139         return dcache_dir_open(inode, file);
140 }
141
142 static void autofs4_dentry_release(struct dentry *de)
143 {
144         struct autofs_info *ino = autofs4_dentry_ino(de);
145         struct autofs_sb_info *sbi = autofs4_sbi(de->d_sb);
146
147         DPRINTK("releasing %p", de);
148
149         if (!ino)
150                 return;
151
152         if (sbi) {
153                 spin_lock(&sbi->lookup_lock);
154                 if (!list_empty(&ino->active))
155                         list_del(&ino->active);
156                 if (!list_empty(&ino->expiring))
157                         list_del(&ino->expiring);
158                 spin_unlock(&sbi->lookup_lock);
159         }
160
161         autofs4_free_ino(ino);
162 }
163
164 static struct dentry *autofs4_lookup_active(struct dentry *dentry)
165 {
166         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
167         struct dentry *parent = dentry->d_parent;
168         struct qstr *name = &dentry->d_name;
169         unsigned int len = name->len;
170         unsigned int hash = name->hash;
171         const unsigned char *str = name->name;
172         struct list_head *p, *head;
173
174         spin_lock(&autofs4_lock);
175         spin_lock(&sbi->lookup_lock);
176         head = &sbi->active_list;
177         list_for_each(p, head) {
178                 struct autofs_info *ino;
179                 struct dentry *active;
180                 struct qstr *qstr;
181
182                 ino = list_entry(p, struct autofs_info, active);
183                 active = ino->dentry;
184
185                 spin_lock(&active->d_lock);
186
187                 /* Already gone? */
188                 if (active->d_count == 0)
189                         goto next;
190
191                 qstr = &active->d_name;
192
193                 if (active->d_name.hash != hash)
194                         goto next;
195                 if (active->d_parent != parent)
196                         goto next;
197
198                 if (qstr->len != len)
199                         goto next;
200                 if (memcmp(qstr->name, str, len))
201                         goto next;
202
203                 if (d_unhashed(active)) {
204                         dget_dlock(active);
205                         spin_unlock(&active->d_lock);
206                         spin_unlock(&sbi->lookup_lock);
207                         spin_unlock(&autofs4_lock);
208                         return active;
209                 }
210 next:
211                 spin_unlock(&active->d_lock);
212         }
213         spin_unlock(&sbi->lookup_lock);
214         spin_unlock(&autofs4_lock);
215
216         return NULL;
217 }
218
219 static struct dentry *autofs4_lookup_expiring(struct dentry *dentry)
220 {
221         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
222         struct dentry *parent = dentry->d_parent;
223         struct qstr *name = &dentry->d_name;
224         unsigned int len = name->len;
225         unsigned int hash = name->hash;
226         const unsigned char *str = name->name;
227         struct list_head *p, *head;
228
229         spin_lock(&autofs4_lock);
230         spin_lock(&sbi->lookup_lock);
231         head = &sbi->expiring_list;
232         list_for_each(p, head) {
233                 struct autofs_info *ino;
234                 struct dentry *expiring;
235                 struct qstr *qstr;
236
237                 ino = list_entry(p, struct autofs_info, expiring);
238                 expiring = ino->dentry;
239
240                 spin_lock(&expiring->d_lock);
241
242                 /* Bad luck, we've already been dentry_iput */
243                 if (!expiring->d_inode)
244                         goto next;
245
246                 qstr = &expiring->d_name;
247
248                 if (expiring->d_name.hash != hash)
249                         goto next;
250                 if (expiring->d_parent != parent)
251                         goto next;
252
253                 if (qstr->len != len)
254                         goto next;
255                 if (memcmp(qstr->name, str, len))
256                         goto next;
257
258                 if (d_unhashed(expiring)) {
259                         dget_dlock(expiring);
260                         spin_unlock(&expiring->d_lock);
261                         spin_unlock(&sbi->lookup_lock);
262                         spin_unlock(&autofs4_lock);
263                         return expiring;
264                 }
265 next:
266                 spin_unlock(&expiring->d_lock);
267         }
268         spin_unlock(&sbi->lookup_lock);
269         spin_unlock(&autofs4_lock);
270
271         return NULL;
272 }
273
274 static int autofs4_mount_wait(struct dentry *dentry)
275 {
276         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
277         struct autofs_info *ino = autofs4_dentry_ino(dentry);
278         int status;
279
280         if (ino->flags & AUTOFS_INF_PENDING) {
281                 DPRINTK("waiting for mount name=%.*s",
282                         dentry->d_name.len, dentry->d_name.name);
283                 status = autofs4_wait(sbi, dentry, NFY_MOUNT);
284                 DPRINTK("mount wait done status=%d", status);
285                 ino->last_used = jiffies;
286                 return status;
287         }
288         return 0;
289 }
290
291 static int do_expire_wait(struct dentry *dentry)
292 {
293         struct dentry *expiring;
294
295         expiring = autofs4_lookup_expiring(dentry);
296         if (!expiring)
297                 return autofs4_expire_wait(dentry);
298         else {
299                 /*
300                  * If we are racing with expire the request might not
301                  * be quite complete, but the directory has been removed
302                  * so it must have been successful, just wait for it.
303                  */
304                 autofs4_expire_wait(expiring);
305                 autofs4_del_expiring(expiring);
306                 dput(expiring);
307         }
308         return 0;
309 }
310
311 static struct dentry *autofs4_mountpoint_changed(struct path *path)
312 {
313         struct dentry *dentry = path->dentry;
314         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
315
316         /*
317          * If this is an indirect mount the dentry could have gone away
318          * as a result of an expire and a new one created.
319          */
320         if (autofs_type_indirect(sbi->type) && d_unhashed(dentry)) {
321                 struct dentry *parent = dentry->d_parent;
322                 struct dentry *new = d_lookup(parent, &dentry->d_name);
323                 if (!new)
324                         return NULL;
325                 dput(path->dentry);
326                 path->dentry = new;
327         }
328         return path->dentry;
329 }
330
331 static struct vfsmount *autofs4_d_automount(struct path *path)
332 {
333         struct dentry *dentry = path->dentry;
334         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
335         struct autofs_info *ino = autofs4_dentry_ino(dentry);
336         int status;
337
338         DPRINTK("dentry=%p %.*s",
339                 dentry, dentry->d_name.len, dentry->d_name.name);
340
341         /*
342          * Someone may have manually umounted this or it was a submount
343          * that has gone away.
344          */
345         spin_lock(&dentry->d_lock);
346         if (!d_mountpoint(dentry) && list_empty(&dentry->d_subdirs)) {
347                 if (!(dentry->d_flags & DCACHE_MANAGE_TRANSIT) &&
348                      (dentry->d_flags & DCACHE_NEED_AUTOMOUNT))
349                         __managed_dentry_set_transit(path->dentry);
350         }
351         spin_unlock(&dentry->d_lock);
352
353         /* The daemon never triggers a mount. */
354         if (autofs4_oz_mode(sbi))
355                 return NULL;
356
357         /*
358          * If an expire request is pending everyone must wait.
359          * If the expire fails we're still mounted so continue
360          * the follow and return. A return of -EAGAIN (which only
361          * happens with indirect mounts) means the expire completed
362          * and the directory was removed, so just go ahead and try
363          * the mount.
364          */
365         status = do_expire_wait(dentry);
366         if (status && status != -EAGAIN)
367                 return NULL;
368
369         /* Callback to the daemon to perform the mount or wait */
370         spin_lock(&sbi->fs_lock);
371         if (ino->flags & AUTOFS_INF_PENDING) {
372                 spin_unlock(&sbi->fs_lock);
373                 status = autofs4_mount_wait(dentry);
374                 if (status)
375                         return ERR_PTR(status);
376                 spin_lock(&sbi->fs_lock);
377                 goto done;
378         }
379
380         /*
381          * If the dentry is a symlink it's equivalent to a directory
382          * having d_mountpoint() true, so there's no need to call back
383          * to the daemon.
384          */
385         if (dentry->d_inode && S_ISLNK(dentry->d_inode->i_mode))
386                 goto done;
387         if (!d_mountpoint(dentry)) {
388                 /*
389                  * It's possible that user space hasn't removed directories
390                  * after umounting a rootless multi-mount, although it
391                  * should. For v5 have_submounts() is sufficient to handle
392                  * this because the leaves of the directory tree under the
393                  * mount never trigger mounts themselves (they have an autofs
394                  * trigger mount mounted on them). But v4 pseudo direct mounts
395                  * do need the leaves to to trigger mounts. In this case we
396                  * have no choice but to use the list_empty() check and
397                  * require user space behave.
398                  */
399                 if (sbi->version > 4) {
400                         if (have_submounts(dentry))
401                                 goto done;
402                 } else {
403                         spin_lock(&dentry->d_lock);
404                         if (!list_empty(&dentry->d_subdirs)) {
405                                 spin_unlock(&dentry->d_lock);
406                                 goto done;
407                         }
408                         spin_unlock(&dentry->d_lock);
409                 }
410                 ino->flags |= AUTOFS_INF_PENDING;
411                 spin_unlock(&sbi->fs_lock);
412                 status = autofs4_mount_wait(dentry);
413                 if (status)
414                         return ERR_PTR(status);
415                 spin_lock(&sbi->fs_lock);
416                 ino->flags &= ~AUTOFS_INF_PENDING;
417         }
418 done:
419         if (!(ino->flags & AUTOFS_INF_EXPIRING)) {
420                 /*
421                  * Any needed mounting has been completed and the path updated
422                  * so turn this into a normal dentry so we don't continually
423                  * call ->d_automount() and ->d_manage().
424                  */
425                 spin_lock(&dentry->d_lock);
426                 __managed_dentry_clear_transit(dentry);
427                 /*
428                  * Only clear DMANAGED_AUTOMOUNT for rootless multi-mounts and
429                  * symlinks as in all other cases the dentry will be covered by
430                  * an actual mount so ->d_automount() won't be called during
431                  * the follow.
432                  */
433                 if ((!d_mountpoint(dentry) &&
434                     !list_empty(&dentry->d_subdirs)) ||
435                     (dentry->d_inode && S_ISLNK(dentry->d_inode->i_mode)))
436                         __managed_dentry_clear_automount(dentry);
437                 spin_unlock(&dentry->d_lock);
438         }
439         spin_unlock(&sbi->fs_lock);
440
441         /* Mount succeeded, check if we ended up with a new dentry */
442         dentry = autofs4_mountpoint_changed(path);
443         if (!dentry)
444                 return ERR_PTR(-ENOENT);
445
446         return NULL;
447 }
448
449 int autofs4_d_manage(struct dentry *dentry, bool mounting_here, bool rcu_walk)
450 {
451         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
452
453         DPRINTK("dentry=%p %.*s",
454                 dentry, dentry->d_name.len, dentry->d_name.name);
455
456         /* The daemon never waits. */
457         if (autofs4_oz_mode(sbi) || mounting_here) {
458                 if (!d_mountpoint(dentry))
459                         return -EISDIR;
460                 return 0;
461         }
462
463         /* We need to sleep, so we need pathwalk to be in ref-mode */
464         if (rcu_walk)
465                 return -ECHILD;
466
467         /* Wait for pending expires */
468         do_expire_wait(dentry);
469
470         /*
471          * This dentry may be under construction so wait on mount
472          * completion.
473          */
474         return autofs4_mount_wait(dentry);
475 }
476
477 /* Lookups in the root directory */
478 static struct dentry *autofs4_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
479 {
480         struct autofs_sb_info *sbi;
481         struct autofs_info *ino;
482         struct dentry *active;
483
484         DPRINTK("name = %.*s", dentry->d_name.len, dentry->d_name.name);
485
486         /* File name too long to exist */
487         if (dentry->d_name.len > NAME_MAX)
488                 return ERR_PTR(-ENAMETOOLONG);
489
490         sbi = autofs4_sbi(dir->i_sb);
491
492         DPRINTK("pid = %u, pgrp = %u, catatonic = %d, oz_mode = %d",
493                 current->pid, task_pgrp_nr(current), sbi->catatonic,
494                 autofs4_oz_mode(sbi));
495
496         active = autofs4_lookup_active(dentry);
497         if (active) {
498                 return active;
499         } else {
500                 /*
501                  * A dentry that is not within the root can never trigger a
502                  * mount operation, unless the directory already exists, so we
503                  * can return fail immediately.  The daemon however does need
504                  * to create directories within the file system.
505                  */
506                 if (!autofs4_oz_mode(sbi) && !IS_ROOT(dentry->d_parent))
507                         return ERR_PTR(-ENOENT);
508
509                 /* Mark entries in the root as mount triggers */
510                 if (autofs_type_indirect(sbi->type) && IS_ROOT(dentry->d_parent))
511                         __managed_dentry_set_managed(dentry);
512
513                 ino = autofs4_new_ino(sbi);
514                 if (!ino)
515                         return ERR_PTR(-ENOMEM);
516
517                 dentry->d_fsdata = ino;
518                 ino->dentry = dentry;
519
520                 autofs4_add_active(dentry);
521
522                 d_instantiate(dentry, NULL);
523         }
524         return NULL;
525 }
526
527 static int autofs4_dir_symlink(struct inode *dir, 
528                                struct dentry *dentry,
529                                const char *symname)
530 {
531         struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
532         struct autofs_info *ino = autofs4_dentry_ino(dentry);
533         struct autofs_info *p_ino;
534         struct inode *inode;
535         size_t size = strlen(symname);
536         char *cp;
537
538         DPRINTK("%s <- %.*s", symname,
539                 dentry->d_name.len, dentry->d_name.name);
540
541         if (!autofs4_oz_mode(sbi))
542                 return -EACCES;
543
544         BUG_ON(!ino);
545
546         autofs4_clean_ino(ino);
547
548         autofs4_del_active(dentry);
549
550         cp = kmalloc(size + 1, GFP_KERNEL);
551         if (!cp)
552                 return -ENOMEM;
553
554         strcpy(cp, symname);
555
556         inode = autofs4_get_inode(dir->i_sb, S_IFLNK | 0555);
557         if (!inode) {
558                 kfree(cp);
559                 if (!dentry->d_fsdata)
560                         kfree(ino);
561                 return -ENOMEM;
562         }
563         inode->i_private = cp;
564         inode->i_size = size;
565         d_add(dentry, inode);
566
567         dget(dentry);
568         atomic_inc(&ino->count);
569         p_ino = autofs4_dentry_ino(dentry->d_parent);
570         if (p_ino && dentry->d_parent != dentry)
571                 atomic_inc(&p_ino->count);
572
573         dir->i_mtime = CURRENT_TIME;
574
575         return 0;
576 }
577
578 /*
579  * NOTE!
580  *
581  * Normal filesystems would do a "d_delete()" to tell the VFS dcache
582  * that the file no longer exists. However, doing that means that the
583  * VFS layer can turn the dentry into a negative dentry.  We don't want
584  * this, because the unlink is probably the result of an expire.
585  * We simply d_drop it and add it to a expiring list in the super block,
586  * which allows the dentry lookup to check for an incomplete expire.
587  *
588  * If a process is blocked on the dentry waiting for the expire to finish,
589  * it will invalidate the dentry and try to mount with a new one.
590  *
591  * Also see autofs4_dir_rmdir()..
592  */
593 static int autofs4_dir_unlink(struct inode *dir, struct dentry *dentry)
594 {
595         struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
596         struct autofs_info *ino = autofs4_dentry_ino(dentry);
597         struct autofs_info *p_ino;
598         
599         /* This allows root to remove symlinks */
600         if (!autofs4_oz_mode(sbi) && !capable(CAP_SYS_ADMIN))
601                 return -EACCES;
602
603         if (atomic_dec_and_test(&ino->count)) {
604                 p_ino = autofs4_dentry_ino(dentry->d_parent);
605                 if (p_ino && dentry->d_parent != dentry)
606                         atomic_dec(&p_ino->count);
607         }
608         dput(ino->dentry);
609
610         dentry->d_inode->i_size = 0;
611         clear_nlink(dentry->d_inode);
612
613         dir->i_mtime = CURRENT_TIME;
614
615         spin_lock(&autofs4_lock);
616         autofs4_add_expiring(dentry);
617         spin_lock(&dentry->d_lock);
618         __d_drop(dentry);
619         spin_unlock(&dentry->d_lock);
620         spin_unlock(&autofs4_lock);
621
622         return 0;
623 }
624
625 /*
626  * Version 4 of autofs provides a pseudo direct mount implementation
627  * that relies on directories at the leaves of a directory tree under
628  * an indirect mount to trigger mounts. To allow for this we need to
629  * set the DMANAGED_AUTOMOUNT and DMANAGED_TRANSIT flags on the leaves
630  * of the directory tree. There is no need to clear the automount flag
631  * following a mount or restore it after an expire because these mounts
632  * are always covered. However, it is neccessary to ensure that these
633  * flags are clear on non-empty directories to avoid unnecessary calls
634  * during path walks.
635  */
636 static void autofs_set_leaf_automount_flags(struct dentry *dentry)
637 {
638         struct dentry *parent;
639
640         /* root and dentrys in the root are already handled */
641         if (IS_ROOT(dentry->d_parent))
642                 return;
643
644         managed_dentry_set_managed(dentry);
645
646         parent = dentry->d_parent;
647         /* only consider parents below dentrys in the root */
648         if (IS_ROOT(parent->d_parent))
649                 return;
650         managed_dentry_clear_managed(parent);
651         return;
652 }
653
654 static void autofs_clear_leaf_automount_flags(struct dentry *dentry)
655 {
656         struct list_head *d_child;
657         struct dentry *parent;
658
659         /* flags for dentrys in the root are handled elsewhere */
660         if (IS_ROOT(dentry->d_parent))
661                 return;
662
663         managed_dentry_clear_managed(dentry);
664
665         parent = dentry->d_parent;
666         /* only consider parents below dentrys in the root */
667         if (IS_ROOT(parent->d_parent))
668                 return;
669         d_child = &dentry->d_u.d_child;
670         /* Set parent managed if it's becoming empty */
671         if (d_child->next == &parent->d_subdirs &&
672             d_child->prev == &parent->d_subdirs)
673                 managed_dentry_set_managed(parent);
674         return;
675 }
676
677 static int autofs4_dir_rmdir(struct inode *dir, struct dentry *dentry)
678 {
679         struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
680         struct autofs_info *ino = autofs4_dentry_ino(dentry);
681         struct autofs_info *p_ino;
682         
683         DPRINTK("dentry %p, removing %.*s",
684                 dentry, dentry->d_name.len, dentry->d_name.name);
685
686         if (!autofs4_oz_mode(sbi))
687                 return -EACCES;
688
689         spin_lock(&autofs4_lock);
690         spin_lock(&sbi->lookup_lock);
691         spin_lock(&dentry->d_lock);
692         if (!list_empty(&dentry->d_subdirs)) {
693                 spin_unlock(&dentry->d_lock);
694                 spin_unlock(&sbi->lookup_lock);
695                 spin_unlock(&autofs4_lock);
696                 return -ENOTEMPTY;
697         }
698         __autofs4_add_expiring(dentry);
699         spin_unlock(&sbi->lookup_lock);
700         __d_drop(dentry);
701         spin_unlock(&dentry->d_lock);
702         spin_unlock(&autofs4_lock);
703
704         if (sbi->version < 5)
705                 autofs_clear_leaf_automount_flags(dentry);
706
707         if (atomic_dec_and_test(&ino->count)) {
708                 p_ino = autofs4_dentry_ino(dentry->d_parent);
709                 if (p_ino && dentry->d_parent != dentry)
710                         atomic_dec(&p_ino->count);
711         }
712         dput(ino->dentry);
713         dentry->d_inode->i_size = 0;
714         clear_nlink(dentry->d_inode);
715
716         if (dir->i_nlink)
717                 drop_nlink(dir);
718
719         return 0;
720 }
721
722 static int autofs4_dir_mkdir(struct inode *dir, struct dentry *dentry, int mode)
723 {
724         struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
725         struct autofs_info *ino = autofs4_dentry_ino(dentry);
726         struct autofs_info *p_ino;
727         struct inode *inode;
728
729         if (!autofs4_oz_mode(sbi))
730                 return -EACCES;
731
732         DPRINTK("dentry %p, creating %.*s",
733                 dentry, dentry->d_name.len, dentry->d_name.name);
734
735         BUG_ON(!ino);
736
737         autofs4_clean_ino(ino);
738
739         autofs4_del_active(dentry);
740
741         inode = autofs4_get_inode(dir->i_sb, S_IFDIR | 0555);
742         if (!inode)
743                 return -ENOMEM;
744         d_add(dentry, inode);
745
746         if (sbi->version < 5)
747                 autofs_set_leaf_automount_flags(dentry);
748
749         dget(dentry);
750         atomic_inc(&ino->count);
751         p_ino = autofs4_dentry_ino(dentry->d_parent);
752         if (p_ino && dentry->d_parent != dentry)
753                 atomic_inc(&p_ino->count);
754         inc_nlink(dir);
755         dir->i_mtime = CURRENT_TIME;
756
757         return 0;
758 }
759
760 /* Get/set timeout ioctl() operation */
761 #ifdef CONFIG_COMPAT
762 static inline int autofs4_compat_get_set_timeout(struct autofs_sb_info *sbi,
763                                          compat_ulong_t __user *p)
764 {
765         int rv;
766         unsigned long ntimeout;
767
768         if ((rv = get_user(ntimeout, p)) ||
769              (rv = put_user(sbi->exp_timeout/HZ, p)))
770                 return rv;
771
772         if (ntimeout > UINT_MAX/HZ)
773                 sbi->exp_timeout = 0;
774         else
775                 sbi->exp_timeout = ntimeout * HZ;
776
777         return 0;
778 }
779 #endif
780
781 static inline int autofs4_get_set_timeout(struct autofs_sb_info *sbi,
782                                          unsigned long __user *p)
783 {
784         int rv;
785         unsigned long ntimeout;
786
787         if ((rv = get_user(ntimeout, p)) ||
788              (rv = put_user(sbi->exp_timeout/HZ, p)))
789                 return rv;
790
791         if (ntimeout > ULONG_MAX/HZ)
792                 sbi->exp_timeout = 0;
793         else
794                 sbi->exp_timeout = ntimeout * HZ;
795
796         return 0;
797 }
798
799 /* Return protocol version */
800 static inline int autofs4_get_protover(struct autofs_sb_info *sbi, int __user *p)
801 {
802         return put_user(sbi->version, p);
803 }
804
805 /* Return protocol sub version */
806 static inline int autofs4_get_protosubver(struct autofs_sb_info *sbi, int __user *p)
807 {
808         return put_user(sbi->sub_version, p);
809 }
810
811 /*
812 * Tells the daemon whether it can umount the autofs mount.
813 */
814 static inline int autofs4_ask_umount(struct vfsmount *mnt, int __user *p)
815 {
816         int status = 0;
817
818         if (may_umount(mnt))
819                 status = 1;
820
821         DPRINTK("returning %d", status);
822
823         status = put_user(status, p);
824
825         return status;
826 }
827
828 /* Identify autofs4_dentries - this is so we can tell if there's
829    an extra dentry refcount or not.  We only hold a refcount on the
830    dentry if its non-negative (ie, d_inode != NULL)
831 */
832 int is_autofs4_dentry(struct dentry *dentry)
833 {
834         return dentry && dentry->d_inode &&
835                 dentry->d_op == &autofs4_dentry_operations &&
836                 dentry->d_fsdata != NULL;
837 }
838
839 /*
840  * ioctl()'s on the root directory is the chief method for the daemon to
841  * generate kernel reactions
842  */
843 static int autofs4_root_ioctl_unlocked(struct inode *inode, struct file *filp,
844                                        unsigned int cmd, unsigned long arg)
845 {
846         struct autofs_sb_info *sbi = autofs4_sbi(inode->i_sb);
847         void __user *p = (void __user *)arg;
848
849         DPRINTK("cmd = 0x%08x, arg = 0x%08lx, sbi = %p, pgrp = %u",
850                 cmd,arg,sbi,task_pgrp_nr(current));
851
852         if (_IOC_TYPE(cmd) != _IOC_TYPE(AUTOFS_IOC_FIRST) ||
853              _IOC_NR(cmd) - _IOC_NR(AUTOFS_IOC_FIRST) >= AUTOFS_IOC_COUNT)
854                 return -ENOTTY;
855         
856         if (!autofs4_oz_mode(sbi) && !capable(CAP_SYS_ADMIN))
857                 return -EPERM;
858         
859         switch(cmd) {
860         case AUTOFS_IOC_READY:  /* Wait queue: go ahead and retry */
861                 return autofs4_wait_release(sbi,(autofs_wqt_t)arg,0);
862         case AUTOFS_IOC_FAIL:   /* Wait queue: fail with ENOENT */
863                 return autofs4_wait_release(sbi,(autofs_wqt_t)arg,-ENOENT);
864         case AUTOFS_IOC_CATATONIC: /* Enter catatonic mode (daemon shutdown) */
865                 autofs4_catatonic_mode(sbi);
866                 return 0;
867         case AUTOFS_IOC_PROTOVER: /* Get protocol version */
868                 return autofs4_get_protover(sbi, p);
869         case AUTOFS_IOC_PROTOSUBVER: /* Get protocol sub version */
870                 return autofs4_get_protosubver(sbi, p);
871         case AUTOFS_IOC_SETTIMEOUT:
872                 return autofs4_get_set_timeout(sbi, p);
873 #ifdef CONFIG_COMPAT
874         case AUTOFS_IOC_SETTIMEOUT32:
875                 return autofs4_compat_get_set_timeout(sbi, p);
876 #endif
877
878         case AUTOFS_IOC_ASKUMOUNT:
879                 return autofs4_ask_umount(filp->f_path.mnt, p);
880
881         /* return a single thing to expire */
882         case AUTOFS_IOC_EXPIRE:
883                 return autofs4_expire_run(inode->i_sb,filp->f_path.mnt,sbi, p);
884         /* same as above, but can send multiple expires through pipe */
885         case AUTOFS_IOC_EXPIRE_MULTI:
886                 return autofs4_expire_multi(inode->i_sb,filp->f_path.mnt,sbi, p);
887
888         default:
889                 return -ENOSYS;
890         }
891 }
892
893 static long autofs4_root_ioctl(struct file *filp,
894                                unsigned int cmd, unsigned long arg)
895 {
896         struct inode *inode = filp->f_dentry->d_inode;
897         return autofs4_root_ioctl_unlocked(inode, filp, cmd, arg);
898 }
899
900 #ifdef CONFIG_COMPAT
901 static long autofs4_root_compat_ioctl(struct file *filp,
902                              unsigned int cmd, unsigned long arg)
903 {
904         struct inode *inode = filp->f_path.dentry->d_inode;
905         int ret;
906
907         if (cmd == AUTOFS_IOC_READY || cmd == AUTOFS_IOC_FAIL)
908                 ret = autofs4_root_ioctl_unlocked(inode, filp, cmd, arg);
909         else
910                 ret = autofs4_root_ioctl_unlocked(inode, filp, cmd,
911                         (unsigned long)compat_ptr(arg));
912
913         return ret;
914 }
915 #endif