autofs4 - fix d_manage() return on rcu-walk
[firefly-linux-kernel-4.4.55.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);
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 = 0;
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         }
286         ino->last_used = jiffies;
287         return status;
288 }
289
290 static int do_expire_wait(struct dentry *dentry)
291 {
292         struct dentry *expiring;
293
294         expiring = autofs4_lookup_expiring(dentry);
295         if (!expiring)
296                 return autofs4_expire_wait(dentry);
297         else {
298                 /*
299                  * If we are racing with expire the request might not
300                  * be quite complete, but the directory has been removed
301                  * so it must have been successful, just wait for it.
302                  */
303                 autofs4_expire_wait(expiring);
304                 autofs4_del_expiring(expiring);
305                 dput(expiring);
306         }
307         return 0;
308 }
309
310 static struct dentry *autofs4_mountpoint_changed(struct path *path)
311 {
312         struct dentry *dentry = path->dentry;
313         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
314
315         /*
316          * If this is an indirect mount the dentry could have gone away
317          * as a result of an expire and a new one created.
318          */
319         if (autofs_type_indirect(sbi->type) && d_unhashed(dentry)) {
320                 struct dentry *parent = dentry->d_parent;
321                 struct autofs_info *ino;
322                 struct dentry *new = d_lookup(parent, &dentry->d_name);
323                 if (!new)
324                         return NULL;
325                 ino = autofs4_dentry_ino(new);
326                 ino->last_used = jiffies;
327                 dput(path->dentry);
328                 path->dentry = new;
329         }
330         return path->dentry;
331 }
332
333 static struct vfsmount *autofs4_d_automount(struct path *path)
334 {
335         struct dentry *dentry = path->dentry;
336         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
337         struct autofs_info *ino = autofs4_dentry_ino(dentry);
338         int status;
339
340         DPRINTK("dentry=%p %.*s",
341                 dentry, dentry->d_name.len, dentry->d_name.name);
342
343         /* The daemon never triggers a mount. */
344         if (autofs4_oz_mode(sbi))
345                 return NULL;
346
347         /*
348          * If an expire request is pending everyone must wait.
349          * If the expire fails we're still mounted so continue
350          * the follow and return. A return of -EAGAIN (which only
351          * happens with indirect mounts) means the expire completed
352          * and the directory was removed, so just go ahead and try
353          * the mount.
354          */
355         status = do_expire_wait(dentry);
356         if (status && status != -EAGAIN)
357                 return NULL;
358
359         /* Callback to the daemon to perform the mount or wait */
360         spin_lock(&sbi->fs_lock);
361         if (ino->flags & AUTOFS_INF_PENDING) {
362                 spin_unlock(&sbi->fs_lock);
363                 status = autofs4_mount_wait(dentry);
364                 if (status)
365                         return ERR_PTR(status);
366                 spin_lock(&sbi->fs_lock);
367                 goto done;
368         }
369
370         /*
371          * If the dentry is a symlink it's equivalent to a directory
372          * having d_mountpoint() true, so there's no need to call back
373          * to the daemon.
374          */
375         if (dentry->d_inode && S_ISLNK(dentry->d_inode->i_mode))
376                 goto done;
377         if (!d_mountpoint(dentry)) {
378                 /*
379                  * It's possible that user space hasn't removed directories
380                  * after umounting a rootless multi-mount, although it
381                  * should. For v5 have_submounts() is sufficient to handle
382                  * this because the leaves of the directory tree under the
383                  * mount never trigger mounts themselves (they have an autofs
384                  * trigger mount mounted on them). But v4 pseudo direct mounts
385                  * do need the leaves to to trigger mounts. In this case we
386                  * have no choice but to use the list_empty() check and
387                  * require user space behave.
388                  */
389                 if (sbi->version > 4) {
390                         if (have_submounts(dentry))
391                                 goto done;
392                 } else {
393                         spin_lock(&dentry->d_lock);
394                         if (!list_empty(&dentry->d_subdirs)) {
395                                 spin_unlock(&dentry->d_lock);
396                                 goto done;
397                         }
398                         spin_unlock(&dentry->d_lock);
399                 }
400                 ino->flags |= AUTOFS_INF_PENDING;
401                 spin_unlock(&sbi->fs_lock);
402                 status = autofs4_mount_wait(dentry);
403                 if (status)
404                         return ERR_PTR(status);
405                 spin_lock(&sbi->fs_lock);
406                 ino->flags &= ~AUTOFS_INF_PENDING;
407         }
408 done:
409         if (!(ino->flags & AUTOFS_INF_EXPIRING)) {
410                 /*
411                  * Any needed mounting has been completed and the path
412                  * updated so clear DCACHE_NEED_AUTOMOUNT so we don't
413                  * call ->d_automount() on rootless multi-mounts since
414                  * it can lead to an incorrect ELOOP error return.
415                  *
416                  * Only clear DMANAGED_AUTOMOUNT for rootless multi-mounts and
417                  * symlinks as in all other cases the dentry will be covered by
418                  * an actual mount so ->d_automount() won't be called during
419                  * the follow.
420                  */
421                 spin_lock(&dentry->d_lock);
422                 if ((!d_mountpoint(dentry) &&
423                     !list_empty(&dentry->d_subdirs)) ||
424                     (dentry->d_inode && S_ISLNK(dentry->d_inode->i_mode)))
425                         __managed_dentry_clear_automount(dentry);
426                 spin_unlock(&dentry->d_lock);
427         }
428         spin_unlock(&sbi->fs_lock);
429
430         /* Mount succeeded, check if we ended up with a new dentry */
431         dentry = autofs4_mountpoint_changed(path);
432         if (!dentry)
433                 return ERR_PTR(-ENOENT);
434
435         return NULL;
436 }
437
438 int autofs4_d_manage(struct dentry *dentry, bool rcu_walk)
439 {
440         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
441
442         DPRINTK("dentry=%p %.*s",
443                 dentry, dentry->d_name.len, dentry->d_name.name);
444
445         /* The daemon never waits. */
446         if (autofs4_oz_mode(sbi)) {
447                 if (rcu_walk)
448                         return 0;
449                 if (!d_mountpoint(dentry))
450                         return -EISDIR;
451                 return 0;
452         }
453
454         /* We need to sleep, so we need pathwalk to be in ref-mode */
455         if (rcu_walk)
456                 return -ECHILD;
457
458         /* Wait for pending expires */
459         do_expire_wait(dentry);
460
461         /*
462          * This dentry may be under construction so wait on mount
463          * completion.
464          */
465         return autofs4_mount_wait(dentry);
466 }
467
468 /* Lookups in the root directory */
469 static struct dentry *autofs4_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
470 {
471         struct autofs_sb_info *sbi;
472         struct autofs_info *ino;
473         struct dentry *active;
474
475         DPRINTK("name = %.*s", dentry->d_name.len, dentry->d_name.name);
476
477         /* File name too long to exist */
478         if (dentry->d_name.len > NAME_MAX)
479                 return ERR_PTR(-ENAMETOOLONG);
480
481         sbi = autofs4_sbi(dir->i_sb);
482
483         DPRINTK("pid = %u, pgrp = %u, catatonic = %d, oz_mode = %d",
484                 current->pid, task_pgrp_nr(current), sbi->catatonic,
485                 autofs4_oz_mode(sbi));
486
487         active = autofs4_lookup_active(dentry);
488         if (active) {
489                 return active;
490         } else {
491                 /*
492                  * A dentry that is not within the root can never trigger a
493                  * mount operation, unless the directory already exists, so we
494                  * can return fail immediately.  The daemon however does need
495                  * to create directories within the file system.
496                  */
497                 if (!autofs4_oz_mode(sbi) && !IS_ROOT(dentry->d_parent))
498                         return ERR_PTR(-ENOENT);
499
500                 /* Mark entries in the root as mount triggers */
501                 if (autofs_type_indirect(sbi->type) && IS_ROOT(dentry->d_parent))
502                         __managed_dentry_set_managed(dentry);
503
504                 ino = autofs4_new_ino(sbi);
505                 if (!ino)
506                         return ERR_PTR(-ENOMEM);
507
508                 dentry->d_fsdata = ino;
509                 ino->dentry = dentry;
510
511                 autofs4_add_active(dentry);
512
513                 d_instantiate(dentry, NULL);
514         }
515         return NULL;
516 }
517
518 static int autofs4_dir_symlink(struct inode *dir, 
519                                struct dentry *dentry,
520                                const char *symname)
521 {
522         struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
523         struct autofs_info *ino = autofs4_dentry_ino(dentry);
524         struct autofs_info *p_ino;
525         struct inode *inode;
526         size_t size = strlen(symname);
527         char *cp;
528
529         DPRINTK("%s <- %.*s", symname,
530                 dentry->d_name.len, dentry->d_name.name);
531
532         if (!autofs4_oz_mode(sbi))
533                 return -EACCES;
534
535         BUG_ON(!ino);
536
537         autofs4_clean_ino(ino);
538
539         autofs4_del_active(dentry);
540
541         cp = kmalloc(size + 1, GFP_KERNEL);
542         if (!cp)
543                 return -ENOMEM;
544
545         strcpy(cp, symname);
546
547         inode = autofs4_get_inode(dir->i_sb, S_IFLNK | 0555);
548         if (!inode) {
549                 kfree(cp);
550                 if (!dentry->d_fsdata)
551                         kfree(ino);
552                 return -ENOMEM;
553         }
554         inode->i_private = cp;
555         inode->i_size = size;
556         d_add(dentry, inode);
557
558         dget(dentry);
559         atomic_inc(&ino->count);
560         p_ino = autofs4_dentry_ino(dentry->d_parent);
561         if (p_ino && dentry->d_parent != dentry)
562                 atomic_inc(&p_ino->count);
563
564         dir->i_mtime = CURRENT_TIME;
565
566         return 0;
567 }
568
569 /*
570  * NOTE!
571  *
572  * Normal filesystems would do a "d_delete()" to tell the VFS dcache
573  * that the file no longer exists. However, doing that means that the
574  * VFS layer can turn the dentry into a negative dentry.  We don't want
575  * this, because the unlink is probably the result of an expire.
576  * We simply d_drop it and add it to a expiring list in the super block,
577  * which allows the dentry lookup to check for an incomplete expire.
578  *
579  * If a process is blocked on the dentry waiting for the expire to finish,
580  * it will invalidate the dentry and try to mount with a new one.
581  *
582  * Also see autofs4_dir_rmdir()..
583  */
584 static int autofs4_dir_unlink(struct inode *dir, struct dentry *dentry)
585 {
586         struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
587         struct autofs_info *ino = autofs4_dentry_ino(dentry);
588         struct autofs_info *p_ino;
589         
590         /* This allows root to remove symlinks */
591         if (!autofs4_oz_mode(sbi) && !capable(CAP_SYS_ADMIN))
592                 return -EACCES;
593
594         if (atomic_dec_and_test(&ino->count)) {
595                 p_ino = autofs4_dentry_ino(dentry->d_parent);
596                 if (p_ino && dentry->d_parent != dentry)
597                         atomic_dec(&p_ino->count);
598         }
599         dput(ino->dentry);
600
601         dentry->d_inode->i_size = 0;
602         clear_nlink(dentry->d_inode);
603
604         dir->i_mtime = CURRENT_TIME;
605
606         spin_lock(&autofs4_lock);
607         autofs4_add_expiring(dentry);
608         spin_lock(&dentry->d_lock);
609         __d_drop(dentry);
610         spin_unlock(&dentry->d_lock);
611         spin_unlock(&autofs4_lock);
612
613         return 0;
614 }
615
616 /*
617  * Version 4 of autofs provides a pseudo direct mount implementation
618  * that relies on directories at the leaves of a directory tree under
619  * an indirect mount to trigger mounts. To allow for this we need to
620  * set the DMANAGED_AUTOMOUNT and DMANAGED_TRANSIT flags on the leaves
621  * of the directory tree. There is no need to clear the automount flag
622  * following a mount or restore it after an expire because these mounts
623  * are always covered. However, it is neccessary to ensure that these
624  * flags are clear on non-empty directories to avoid unnecessary calls
625  * during path walks.
626  */
627 static void autofs_set_leaf_automount_flags(struct dentry *dentry)
628 {
629         struct dentry *parent;
630
631         /* root and dentrys in the root are already handled */
632         if (IS_ROOT(dentry->d_parent))
633                 return;
634
635         managed_dentry_set_managed(dentry);
636
637         parent = dentry->d_parent;
638         /* only consider parents below dentrys in the root */
639         if (IS_ROOT(parent->d_parent))
640                 return;
641         managed_dentry_clear_managed(parent);
642         return;
643 }
644
645 static void autofs_clear_leaf_automount_flags(struct dentry *dentry)
646 {
647         struct list_head *d_child;
648         struct dentry *parent;
649
650         /* flags for dentrys in the root are handled elsewhere */
651         if (IS_ROOT(dentry->d_parent))
652                 return;
653
654         managed_dentry_clear_managed(dentry);
655
656         parent = dentry->d_parent;
657         /* only consider parents below dentrys in the root */
658         if (IS_ROOT(parent->d_parent))
659                 return;
660         d_child = &dentry->d_u.d_child;
661         /* Set parent managed if it's becoming empty */
662         if (d_child->next == &parent->d_subdirs &&
663             d_child->prev == &parent->d_subdirs)
664                 managed_dentry_set_managed(parent);
665         return;
666 }
667
668 static int autofs4_dir_rmdir(struct inode *dir, struct dentry *dentry)
669 {
670         struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
671         struct autofs_info *ino = autofs4_dentry_ino(dentry);
672         struct autofs_info *p_ino;
673         
674         DPRINTK("dentry %p, removing %.*s",
675                 dentry, dentry->d_name.len, dentry->d_name.name);
676
677         if (!autofs4_oz_mode(sbi))
678                 return -EACCES;
679
680         spin_lock(&autofs4_lock);
681         spin_lock(&sbi->lookup_lock);
682         spin_lock(&dentry->d_lock);
683         if (!list_empty(&dentry->d_subdirs)) {
684                 spin_unlock(&dentry->d_lock);
685                 spin_unlock(&sbi->lookup_lock);
686                 spin_unlock(&autofs4_lock);
687                 return -ENOTEMPTY;
688         }
689         __autofs4_add_expiring(dentry);
690         spin_unlock(&sbi->lookup_lock);
691         __d_drop(dentry);
692         spin_unlock(&dentry->d_lock);
693         spin_unlock(&autofs4_lock);
694
695         if (sbi->version < 5)
696                 autofs_clear_leaf_automount_flags(dentry);
697
698         if (atomic_dec_and_test(&ino->count)) {
699                 p_ino = autofs4_dentry_ino(dentry->d_parent);
700                 if (p_ino && dentry->d_parent != dentry)
701                         atomic_dec(&p_ino->count);
702         }
703         dput(ino->dentry);
704         dentry->d_inode->i_size = 0;
705         clear_nlink(dentry->d_inode);
706
707         if (dir->i_nlink)
708                 drop_nlink(dir);
709
710         return 0;
711 }
712
713 static int autofs4_dir_mkdir(struct inode *dir, struct dentry *dentry, int mode)
714 {
715         struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
716         struct autofs_info *ino = autofs4_dentry_ino(dentry);
717         struct autofs_info *p_ino;
718         struct inode *inode;
719
720         if (!autofs4_oz_mode(sbi))
721                 return -EACCES;
722
723         DPRINTK("dentry %p, creating %.*s",
724                 dentry, dentry->d_name.len, dentry->d_name.name);
725
726         BUG_ON(!ino);
727
728         autofs4_clean_ino(ino);
729
730         autofs4_del_active(dentry);
731
732         inode = autofs4_get_inode(dir->i_sb, S_IFDIR | 0555);
733         if (!inode)
734                 return -ENOMEM;
735         d_add(dentry, inode);
736
737         if (sbi->version < 5)
738                 autofs_set_leaf_automount_flags(dentry);
739
740         dget(dentry);
741         atomic_inc(&ino->count);
742         p_ino = autofs4_dentry_ino(dentry->d_parent);
743         if (p_ino && dentry->d_parent != dentry)
744                 atomic_inc(&p_ino->count);
745         inc_nlink(dir);
746         dir->i_mtime = CURRENT_TIME;
747
748         return 0;
749 }
750
751 /* Get/set timeout ioctl() operation */
752 #ifdef CONFIG_COMPAT
753 static inline int autofs4_compat_get_set_timeout(struct autofs_sb_info *sbi,
754                                          compat_ulong_t __user *p)
755 {
756         int rv;
757         unsigned long ntimeout;
758
759         if ((rv = get_user(ntimeout, p)) ||
760              (rv = put_user(sbi->exp_timeout/HZ, p)))
761                 return rv;
762
763         if (ntimeout > UINT_MAX/HZ)
764                 sbi->exp_timeout = 0;
765         else
766                 sbi->exp_timeout = ntimeout * HZ;
767
768         return 0;
769 }
770 #endif
771
772 static inline int autofs4_get_set_timeout(struct autofs_sb_info *sbi,
773                                          unsigned long __user *p)
774 {
775         int rv;
776         unsigned long ntimeout;
777
778         if ((rv = get_user(ntimeout, p)) ||
779              (rv = put_user(sbi->exp_timeout/HZ, p)))
780                 return rv;
781
782         if (ntimeout > ULONG_MAX/HZ)
783                 sbi->exp_timeout = 0;
784         else
785                 sbi->exp_timeout = ntimeout * HZ;
786
787         return 0;
788 }
789
790 /* Return protocol version */
791 static inline int autofs4_get_protover(struct autofs_sb_info *sbi, int __user *p)
792 {
793         return put_user(sbi->version, p);
794 }
795
796 /* Return protocol sub version */
797 static inline int autofs4_get_protosubver(struct autofs_sb_info *sbi, int __user *p)
798 {
799         return put_user(sbi->sub_version, p);
800 }
801
802 /*
803 * Tells the daemon whether it can umount the autofs mount.
804 */
805 static inline int autofs4_ask_umount(struct vfsmount *mnt, int __user *p)
806 {
807         int status = 0;
808
809         if (may_umount(mnt))
810                 status = 1;
811
812         DPRINTK("returning %d", status);
813
814         status = put_user(status, p);
815
816         return status;
817 }
818
819 /* Identify autofs4_dentries - this is so we can tell if there's
820    an extra dentry refcount or not.  We only hold a refcount on the
821    dentry if its non-negative (ie, d_inode != NULL)
822 */
823 int is_autofs4_dentry(struct dentry *dentry)
824 {
825         return dentry && dentry->d_inode &&
826                 dentry->d_op == &autofs4_dentry_operations &&
827                 dentry->d_fsdata != NULL;
828 }
829
830 /*
831  * ioctl()'s on the root directory is the chief method for the daemon to
832  * generate kernel reactions
833  */
834 static int autofs4_root_ioctl_unlocked(struct inode *inode, struct file *filp,
835                                        unsigned int cmd, unsigned long arg)
836 {
837         struct autofs_sb_info *sbi = autofs4_sbi(inode->i_sb);
838         void __user *p = (void __user *)arg;
839
840         DPRINTK("cmd = 0x%08x, arg = 0x%08lx, sbi = %p, pgrp = %u",
841                 cmd,arg,sbi,task_pgrp_nr(current));
842
843         if (_IOC_TYPE(cmd) != _IOC_TYPE(AUTOFS_IOC_FIRST) ||
844              _IOC_NR(cmd) - _IOC_NR(AUTOFS_IOC_FIRST) >= AUTOFS_IOC_COUNT)
845                 return -ENOTTY;
846         
847         if (!autofs4_oz_mode(sbi) && !capable(CAP_SYS_ADMIN))
848                 return -EPERM;
849         
850         switch(cmd) {
851         case AUTOFS_IOC_READY:  /* Wait queue: go ahead and retry */
852                 return autofs4_wait_release(sbi,(autofs_wqt_t)arg,0);
853         case AUTOFS_IOC_FAIL:   /* Wait queue: fail with ENOENT */
854                 return autofs4_wait_release(sbi,(autofs_wqt_t)arg,-ENOENT);
855         case AUTOFS_IOC_CATATONIC: /* Enter catatonic mode (daemon shutdown) */
856                 autofs4_catatonic_mode(sbi);
857                 return 0;
858         case AUTOFS_IOC_PROTOVER: /* Get protocol version */
859                 return autofs4_get_protover(sbi, p);
860         case AUTOFS_IOC_PROTOSUBVER: /* Get protocol sub version */
861                 return autofs4_get_protosubver(sbi, p);
862         case AUTOFS_IOC_SETTIMEOUT:
863                 return autofs4_get_set_timeout(sbi, p);
864 #ifdef CONFIG_COMPAT
865         case AUTOFS_IOC_SETTIMEOUT32:
866                 return autofs4_compat_get_set_timeout(sbi, p);
867 #endif
868
869         case AUTOFS_IOC_ASKUMOUNT:
870                 return autofs4_ask_umount(filp->f_path.mnt, p);
871
872         /* return a single thing to expire */
873         case AUTOFS_IOC_EXPIRE:
874                 return autofs4_expire_run(inode->i_sb,filp->f_path.mnt,sbi, p);
875         /* same as above, but can send multiple expires through pipe */
876         case AUTOFS_IOC_EXPIRE_MULTI:
877                 return autofs4_expire_multi(inode->i_sb,filp->f_path.mnt,sbi, p);
878
879         default:
880                 return -ENOSYS;
881         }
882 }
883
884 static long autofs4_root_ioctl(struct file *filp,
885                                unsigned int cmd, unsigned long arg)
886 {
887         struct inode *inode = filp->f_dentry->d_inode;
888         return autofs4_root_ioctl_unlocked(inode, filp, cmd, arg);
889 }
890
891 #ifdef CONFIG_COMPAT
892 static long autofs4_root_compat_ioctl(struct file *filp,
893                              unsigned int cmd, unsigned long arg)
894 {
895         struct inode *inode = filp->f_path.dentry->d_inode;
896         int ret;
897
898         if (cmd == AUTOFS_IOC_READY || cmd == AUTOFS_IOC_FAIL)
899                 ret = autofs4_root_ioctl_unlocked(inode, filp, cmd, arg);
900         else
901                 ret = autofs4_root_ioctl_unlocked(inode, filp, cmd,
902                         (unsigned long)compat_ptr(arg));
903
904         return ret;
905 }
906 #endif