autofs4: Add d_manage() dentry operation
[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
39 #define TRIGGER_FLAGS   (LOOKUP_CONTINUE | LOOKUP_DIRECTORY)
40 #define TRIGGER_INTENTS (LOOKUP_OPEN | LOOKUP_CREATE)
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_indirect_root_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 inode_operations autofs4_direct_root_inode_operations = {
71         .lookup         = autofs4_lookup,
72         .unlink         = autofs4_dir_unlink,
73         .mkdir          = autofs4_dir_mkdir,
74         .rmdir          = autofs4_dir_rmdir,
75 };
76
77 const struct inode_operations autofs4_dir_inode_operations = {
78         .lookup         = autofs4_lookup,
79         .unlink         = autofs4_dir_unlink,
80         .symlink        = autofs4_dir_symlink,
81         .mkdir          = autofs4_dir_mkdir,
82         .rmdir          = autofs4_dir_rmdir,
83 };
84
85 static void autofs4_add_active(struct dentry *dentry)
86 {
87         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
88         struct autofs_info *ino = autofs4_dentry_ino(dentry);
89         if (ino) {
90                 spin_lock(&sbi->lookup_lock);
91                 if (!ino->active_count) {
92                         if (list_empty(&ino->active))
93                                 list_add(&ino->active, &sbi->active_list);
94                 }
95                 ino->active_count++;
96                 spin_unlock(&sbi->lookup_lock);
97         }
98         return;
99 }
100
101 static void autofs4_del_active(struct dentry *dentry)
102 {
103         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
104         struct autofs_info *ino = autofs4_dentry_ino(dentry);
105         if (ino) {
106                 spin_lock(&sbi->lookup_lock);
107                 ino->active_count--;
108                 if (!ino->active_count) {
109                         if (!list_empty(&ino->active))
110                                 list_del_init(&ino->active);
111                 }
112                 spin_unlock(&sbi->lookup_lock);
113         }
114         return;
115 }
116
117 static unsigned int autofs4_need_mount(unsigned int flags)
118 {
119         unsigned int res = 0;
120         if (flags & (TRIGGER_FLAGS | TRIGGER_INTENTS))
121                 res = 1;
122         return res;
123 }
124
125 static int autofs4_dir_open(struct inode *inode, struct file *file)
126 {
127         struct dentry *dentry = file->f_path.dentry;
128         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
129
130         DPRINTK("file=%p dentry=%p %.*s",
131                 file, dentry, dentry->d_name.len, dentry->d_name.name);
132
133         if (autofs4_oz_mode(sbi))
134                 goto out;
135
136         /*
137          * An empty directory in an autofs file system is always a
138          * mount point. The daemon must have failed to mount this
139          * during lookup so it doesn't exist. This can happen, for
140          * example, if user space returns an incorrect status for a
141          * mount request. Otherwise we're doing a readdir on the
142          * autofs file system so just let the libfs routines handle
143          * it.
144          */
145         spin_lock(&autofs4_lock);
146         spin_lock(&dentry->d_lock);
147         if (!d_mountpoint(dentry) && list_empty(&dentry->d_subdirs)) {
148                 spin_unlock(&dentry->d_lock);
149                 spin_unlock(&autofs4_lock);
150                 return -ENOENT;
151         }
152         spin_unlock(&dentry->d_lock);
153         spin_unlock(&autofs4_lock);
154
155 out:
156         return dcache_dir_open(inode, file);
157 }
158
159 static int try_to_fill_dentry(struct dentry *dentry, int flags)
160 {
161         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
162         struct autofs_info *ino = autofs4_dentry_ino(dentry);
163         int status;
164
165         DPRINTK("dentry=%p %.*s ino=%p",
166                  dentry, dentry->d_name.len, dentry->d_name.name, dentry->d_inode);
167
168         /*
169          * Wait for a pending mount, triggering one if there
170          * isn't one already
171          */
172         if (dentry->d_inode == NULL) {
173                 DPRINTK("waiting for mount name=%.*s",
174                          dentry->d_name.len, dentry->d_name.name);
175
176                 status = autofs4_wait(sbi, dentry, NFY_MOUNT);
177
178                 DPRINTK("mount done status=%d", status);
179
180                 /* Turn this into a real negative dentry? */
181                 if (status == -ENOENT) {
182                         spin_lock(&sbi->fs_lock);
183                         ino->flags &= ~AUTOFS_INF_PENDING;
184                         spin_unlock(&sbi->fs_lock);
185                         return status;
186                 } else if (status) {
187                         /* Return a negative dentry, but leave it "pending" */
188                         return status;
189                 }
190         /* Trigger mount for path component or follow link */
191         } else if (ino->flags & AUTOFS_INF_PENDING ||
192                         autofs4_need_mount(flags)) {
193                 DPRINTK("waiting for mount name=%.*s",
194                         dentry->d_name.len, dentry->d_name.name);
195
196                 spin_lock(&sbi->fs_lock);
197                 ino->flags |= AUTOFS_INF_PENDING;
198                 spin_unlock(&sbi->fs_lock);
199                 status = autofs4_wait(sbi, dentry, NFY_MOUNT);
200
201                 DPRINTK("mount done status=%d", status);
202
203                 if (status) {
204                         spin_lock(&sbi->fs_lock);
205                         ino->flags &= ~AUTOFS_INF_PENDING;
206                         spin_unlock(&sbi->fs_lock);
207                         return status;
208                 }
209         }
210
211         /* Initialize expiry counter after successful mount */
212         ino->last_used = jiffies;
213
214         spin_lock(&sbi->fs_lock);
215         ino->flags &= ~AUTOFS_INF_PENDING;
216         spin_unlock(&sbi->fs_lock);
217
218         return 0;
219 }
220
221 /* For autofs direct mounts the follow link triggers the mount */
222 static void *autofs4_follow_link(struct dentry *dentry, struct nameidata *nd)
223 {
224         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
225         struct autofs_info *ino = autofs4_dentry_ino(dentry);
226         int oz_mode = autofs4_oz_mode(sbi);
227         unsigned int lookup_type;
228         int status;
229
230         DPRINTK("dentry=%p %.*s oz_mode=%d nd->flags=%d",
231                 dentry, dentry->d_name.len, dentry->d_name.name, oz_mode,
232                 nd->flags);
233         /*
234          * For an expire of a covered direct or offset mount we need
235          * to break out of follow_down_one() at the autofs mount trigger
236          * (d_mounted--), so we can see the expiring flag, and manage
237          * the blocking and following here until the expire is completed.
238          */
239         if (oz_mode) {
240                 spin_lock(&sbi->fs_lock);
241                 if (ino->flags & AUTOFS_INF_EXPIRING) {
242                         spin_unlock(&sbi->fs_lock);
243                         /* Follow down to our covering mount. */
244                         if (!follow_down_one(&nd->path))
245                                 goto done;
246                         goto follow;
247                 }
248                 spin_unlock(&sbi->fs_lock);
249                 goto done;
250         }
251
252         /* If an expire request is pending everyone must wait. */
253         autofs4_expire_wait(dentry);
254
255         /* We trigger a mount for almost all flags */
256         lookup_type = autofs4_need_mount(nd->flags);
257         spin_lock(&sbi->fs_lock);
258         spin_lock(&autofs4_lock);
259         spin_lock(&dentry->d_lock);
260         if (!(lookup_type || ino->flags & AUTOFS_INF_PENDING)) {
261                 spin_unlock(&dentry->d_lock);
262                 spin_unlock(&autofs4_lock);
263                 spin_unlock(&sbi->fs_lock);
264                 goto follow;
265         }
266
267         /*
268          * If the dentry contains directories then it is an autofs
269          * multi-mount with no root mount offset. So don't try to
270          * mount it again.
271          */
272         if (ino->flags & AUTOFS_INF_PENDING ||
273             (!d_mountpoint(dentry) && list_empty(&dentry->d_subdirs))) {
274                 spin_unlock(&dentry->d_lock);
275                 spin_unlock(&autofs4_lock);
276                 spin_unlock(&sbi->fs_lock);
277
278                 status = try_to_fill_dentry(dentry, nd->flags);
279                 if (status)
280                         goto out_error;
281
282                 goto follow;
283         }
284         spin_unlock(&dentry->d_lock);
285         spin_unlock(&autofs4_lock);
286         spin_unlock(&sbi->fs_lock);
287 follow:
288         /*
289          * If there is no root mount it must be an autofs
290          * multi-mount with no root offset so we don't need
291          * to follow it.
292          */
293         if (d_managed(dentry)) {
294                 status = follow_down(&nd->path, false);
295                 if (status < 0)
296                         goto out_error;
297         }
298
299 done:
300         return NULL;
301
302 out_error:
303         path_put(&nd->path);
304         return ERR_PTR(status);
305 }
306
307 /*
308  * Revalidate is called on every cache lookup.  Some of those
309  * cache lookups may actually happen while the dentry is not
310  * yet completely filled in, and revalidate has to delay such
311  * lookups..
312  */
313 static int autofs4_revalidate(struct dentry *dentry, struct nameidata *nd)
314 {
315         struct inode *dir;
316         struct autofs_sb_info *sbi;
317         int oz_mode;
318         int flags = nd ? nd->flags : 0;
319         int status = 1;
320
321         if (flags & LOOKUP_RCU)
322                 return -ECHILD;
323
324         dir = dentry->d_parent->d_inode;
325         sbi = autofs4_sbi(dir->i_sb);
326         oz_mode = autofs4_oz_mode(sbi);
327
328         /* Pending dentry */
329         spin_lock(&sbi->fs_lock);
330         if (autofs4_ispending(dentry)) {
331                 /* The daemon never causes a mount to trigger */
332                 spin_unlock(&sbi->fs_lock);
333
334                 if (oz_mode)
335                         return 1;
336
337                 /*
338                  * If the directory has gone away due to an expire
339                  * we have been called as ->d_revalidate() and so
340                  * we need to return false and proceed to ->lookup().
341                  */
342                 if (autofs4_expire_wait(dentry) == -EAGAIN)
343                         return 0;
344
345                 /*
346                  * A zero status is success otherwise we have a
347                  * negative error code.
348                  */
349                 status = try_to_fill_dentry(dentry, flags);
350                 if (status == 0)
351                         return 1;
352
353                 return status;
354         }
355         spin_unlock(&sbi->fs_lock);
356
357         /* Negative dentry.. invalidate if "old" */
358         if (dentry->d_inode == NULL)
359                 return 0;
360
361         /* Check for a non-mountpoint directory with no contents */
362         spin_lock(&autofs4_lock);
363         spin_lock(&dentry->d_lock);
364         if (S_ISDIR(dentry->d_inode->i_mode) &&
365             !d_mountpoint(dentry) && list_empty(&dentry->d_subdirs)) {
366                 DPRINTK("dentry=%p %.*s, emptydir",
367                          dentry, dentry->d_name.len, dentry->d_name.name);
368                 spin_unlock(&dentry->d_lock);
369                 spin_unlock(&autofs4_lock);
370
371                 /* The daemon never causes a mount to trigger */
372                 if (oz_mode)
373                         return 1;
374
375                 /*
376                  * A zero status is success otherwise we have a
377                  * negative error code.
378                  */
379                 status = try_to_fill_dentry(dentry, flags);
380                 if (status == 0)
381                         return 1;
382
383                 return status;
384         }
385         spin_unlock(&dentry->d_lock);
386         spin_unlock(&autofs4_lock);
387
388         return 1;
389 }
390
391 void autofs4_dentry_release(struct dentry *de)
392 {
393         struct autofs_info *inf;
394
395         DPRINTK("releasing %p", de);
396
397         inf = autofs4_dentry_ino(de);
398         de->d_fsdata = NULL;
399
400         if (inf) {
401                 struct autofs_sb_info *sbi = autofs4_sbi(de->d_sb);
402
403                 if (sbi) {
404                         spin_lock(&sbi->lookup_lock);
405                         if (!list_empty(&inf->active))
406                                 list_del(&inf->active);
407                         if (!list_empty(&inf->expiring))
408                                 list_del(&inf->expiring);
409                         spin_unlock(&sbi->lookup_lock);
410                 }
411
412                 inf->dentry = NULL;
413                 inf->inode = NULL;
414
415                 autofs4_free_ino(inf);
416         }
417 }
418
419 /* For dentries of directories in the root dir */
420 static const struct dentry_operations autofs4_root_dentry_operations = {
421         .d_release      = autofs4_dentry_release,
422 };
423
424 /* For other dentries */
425 static const struct dentry_operations autofs4_dentry_operations = {
426         .d_automount    = autofs4_d_automount,
427         .d_manage       = autofs4_d_manage,
428         .d_release      = autofs4_dentry_release,
429 };
430
431 static struct dentry *autofs4_lookup_active(struct dentry *dentry)
432 {
433         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
434         struct dentry *parent = dentry->d_parent;
435         struct qstr *name = &dentry->d_name;
436         unsigned int len = name->len;
437         unsigned int hash = name->hash;
438         const unsigned char *str = name->name;
439         struct list_head *p, *head;
440
441         spin_lock(&autofs4_lock);
442         spin_lock(&sbi->lookup_lock);
443         head = &sbi->active_list;
444         list_for_each(p, head) {
445                 struct autofs_info *ino;
446                 struct dentry *active;
447                 struct qstr *qstr;
448
449                 ino = list_entry(p, struct autofs_info, active);
450                 active = ino->dentry;
451
452                 spin_lock(&active->d_lock);
453
454                 /* Already gone? */
455                 if (active->d_count == 0)
456                         goto next;
457
458                 qstr = &active->d_name;
459
460                 if (active->d_name.hash != hash)
461                         goto next;
462                 if (active->d_parent != parent)
463                         goto next;
464
465                 if (qstr->len != len)
466                         goto next;
467                 if (memcmp(qstr->name, str, len))
468                         goto next;
469
470                 if (d_unhashed(active)) {
471                         dget_dlock(active);
472                         spin_unlock(&active->d_lock);
473                         spin_unlock(&sbi->lookup_lock);
474                         spin_unlock(&autofs4_lock);
475                         return active;
476                 }
477 next:
478                 spin_unlock(&active->d_lock);
479         }
480         spin_unlock(&sbi->lookup_lock);
481         spin_unlock(&autofs4_lock);
482
483         return NULL;
484 }
485
486 static struct dentry *autofs4_lookup_expiring(struct dentry *dentry)
487 {
488         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
489         struct dentry *parent = dentry->d_parent;
490         struct qstr *name = &dentry->d_name;
491         unsigned int len = name->len;
492         unsigned int hash = name->hash;
493         const unsigned char *str = name->name;
494         struct list_head *p, *head;
495
496         spin_lock(&autofs4_lock);
497         spin_lock(&sbi->lookup_lock);
498         head = &sbi->expiring_list;
499         list_for_each(p, head) {
500                 struct autofs_info *ino;
501                 struct dentry *expiring;
502                 struct qstr *qstr;
503
504                 ino = list_entry(p, struct autofs_info, expiring);
505                 expiring = ino->dentry;
506
507                 spin_lock(&expiring->d_lock);
508
509                 /* Bad luck, we've already been dentry_iput */
510                 if (!expiring->d_inode)
511                         goto next;
512
513                 qstr = &expiring->d_name;
514
515                 if (expiring->d_name.hash != hash)
516                         goto next;
517                 if (expiring->d_parent != parent)
518                         goto next;
519
520                 if (qstr->len != len)
521                         goto next;
522                 if (memcmp(qstr->name, str, len))
523                         goto next;
524
525                 if (d_unhashed(expiring)) {
526                         dget_dlock(expiring);
527                         spin_unlock(&expiring->d_lock);
528                         spin_unlock(&sbi->lookup_lock);
529                         spin_unlock(&autofs4_lock);
530                         return expiring;
531                 }
532 next:
533                 spin_unlock(&expiring->d_lock);
534         }
535         spin_unlock(&sbi->lookup_lock);
536         spin_unlock(&autofs4_lock);
537
538         return NULL;
539 }
540
541 static int autofs4_mount_wait(struct dentry *dentry)
542 {
543         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
544         struct autofs_info *ino = autofs4_dentry_ino(dentry);
545         int status;
546
547         if (ino->flags & AUTOFS_INF_PENDING) {
548                 DPRINTK("waiting for mount name=%.*s",
549                         dentry->d_name.len, dentry->d_name.name);
550                 status = autofs4_wait(sbi, dentry, NFY_MOUNT);
551                 DPRINTK("mount wait done status=%d", status);
552                 ino->last_used = jiffies;
553                 return status;
554         }
555         return 0;
556 }
557
558 static int do_expire_wait(struct dentry *dentry)
559 {
560         struct dentry *expiring;
561
562         expiring = autofs4_lookup_expiring(dentry);
563         if (!expiring)
564                 return autofs4_expire_wait(dentry);
565         else {
566                 /*
567                  * If we are racing with expire the request might not
568                  * be quite complete, but the directory has been removed
569                  * so it must have been successful, just wait for it.
570                  */
571                 autofs4_expire_wait(expiring);
572                 autofs4_del_expiring(expiring);
573                 dput(expiring);
574         }
575         return 0;
576 }
577
578 static struct dentry *autofs4_mountpoint_changed(struct path *path)
579 {
580         struct dentry *dentry = path->dentry;
581         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
582
583         /*
584          * If this is an indirect mount the dentry could have gone away
585          * as a result of an expire and a new one created.
586          */
587         if (autofs_type_indirect(sbi->type) && d_unhashed(dentry)) {
588                 struct dentry *parent = dentry->d_parent;
589                 struct dentry *new = d_lookup(parent, &dentry->d_name);
590                 if (!new)
591                         return NULL;
592                 dput(path->dentry);
593                 path->dentry = new;
594         }
595         return path->dentry;
596 }
597
598 struct vfsmount *autofs4_d_automount(struct path *path)
599 {
600         struct dentry *dentry = path->dentry;
601         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
602         struct autofs_info *ino = autofs4_dentry_ino(dentry);
603         int status;
604
605         DPRINTK("dentry=%p %.*s",
606                 dentry, dentry->d_name.len, dentry->d_name.name);
607
608         /*
609          * Someone may have manually umounted this or it was a submount
610          * that has gone away.
611          */
612         spin_lock(&dentry->d_lock);
613         if (!d_mountpoint(dentry) && list_empty(&dentry->d_subdirs)) {
614                 if (!(dentry->d_flags & DCACHE_MANAGE_TRANSIT) &&
615                      (dentry->d_flags & DCACHE_NEED_AUTOMOUNT))
616                         __managed_dentry_set_transit(path->dentry);
617         }
618         spin_unlock(&dentry->d_lock);
619
620         /* The daemon never triggers a mount. */
621         if (autofs4_oz_mode(sbi))
622                 return NULL;
623
624         /*
625          * If an expire request is pending everyone must wait.
626          * If the expire fails we're still mounted so continue
627          * the follow and return. A return of -EAGAIN (which only
628          * happens with indirect mounts) means the expire completed
629          * and the directory was removed, so just go ahead and try
630          * the mount.
631          */
632         status = do_expire_wait(dentry);
633         if (status && status != -EAGAIN)
634                 return NULL;
635
636         /* Callback to the daemon to perform the mount or wait */
637         spin_lock(&sbi->fs_lock);
638         if (ino->flags & AUTOFS_INF_PENDING) {
639                 spin_unlock(&sbi->fs_lock);
640                 status = autofs4_mount_wait(dentry);
641                 if (status)
642                         return ERR_PTR(status);
643                 spin_lock(&sbi->fs_lock);
644                 goto done;
645         }
646
647         /*
648          * If the dentry is a symlink it's equivalent to a directory
649          * having d_mountpoint() true, so there's no need to call back
650          * to the daemon.
651          */
652         if (dentry->d_inode && S_ISLNK(dentry->d_inode->i_mode))
653                 goto done;
654         if (!d_mountpoint(dentry)) {
655                 /*
656                  * It's possible that user space hasn't removed directories
657                  * after umounting a rootless multi-mount, although it
658                  * should. For v5 have_submounts() is sufficient to handle
659                  * this because the leaves of the directory tree under the
660                  * mount never trigger mounts themselves (they have an autofs
661                  * trigger mount mounted on them). But v4 pseudo direct mounts
662                  * do need the leaves to to trigger mounts. In this case we
663                  * have no choice but to use the list_empty() check and
664                  * require user space behave.
665                  */
666                 if (sbi->version > 4) {
667                         if (have_submounts(dentry))
668                                 goto done;
669                 } else {
670                         spin_lock(&dentry->d_lock);
671                         if (!list_empty(&dentry->d_subdirs)) {
672                                 spin_unlock(&dentry->d_lock);
673                                 goto done;
674                         }
675                         spin_unlock(&dentry->d_lock);
676                 }
677                 ino->flags |= AUTOFS_INF_PENDING;
678                 spin_unlock(&sbi->fs_lock);
679                 status = autofs4_mount_wait(dentry);
680                 if (status)
681                         return ERR_PTR(status);
682                 spin_lock(&sbi->fs_lock);
683                 ino->flags &= ~AUTOFS_INF_PENDING;
684         }
685 done:
686         if (!(ino->flags & AUTOFS_INF_EXPIRING)) {
687                 /*
688                  * Any needed mounting has been completed and the path updated
689                  * so turn this into a normal dentry so we don't continually
690                  * call ->d_automount() and ->d_manage().
691                  */
692                 spin_lock(&dentry->d_lock);
693                 __managed_dentry_clear_transit(dentry);
694                 /*
695                  * Only clear DMANAGED_AUTOMOUNT for rootless multi-mounts and
696                  * symlinks as in all other cases the dentry will be covered by
697                  * an actual mount so ->d_automount() won't be called during
698                  * the follow.
699                  */
700                 if ((!d_mountpoint(dentry) &&
701                     !list_empty(&dentry->d_subdirs)) ||
702                     (dentry->d_inode && S_ISLNK(dentry->d_inode->i_mode)))
703                         __managed_dentry_clear_automount(dentry);
704                 spin_unlock(&dentry->d_lock);
705         }
706         spin_unlock(&sbi->fs_lock);
707
708         /* Mount succeeded, check if we ended up with a new dentry */
709         dentry = autofs4_mountpoint_changed(path);
710         if (!dentry)
711                 return ERR_PTR(-ENOENT);
712
713         return NULL;
714 }
715
716 int autofs4_d_manage(struct dentry *dentry, bool mounting_here)
717 {
718         struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
719
720         DPRINTK("dentry=%p %.*s",
721                 dentry, dentry->d_name.len, dentry->d_name.name);
722
723         /* The daemon never waits. */
724         if (autofs4_oz_mode(sbi) || mounting_here) {
725                 if (!d_mountpoint(dentry))
726                         return -EISDIR;
727                 return 0;
728         }
729
730         /* Wait for pending expires */
731         do_expire_wait(dentry);
732
733         /*
734          * This dentry may be under construction so wait on mount
735          * completion.
736          */
737         return autofs4_mount_wait(dentry);
738 }
739
740 /* Lookups in the root directory */
741 static struct dentry *autofs4_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
742 {
743         struct autofs_sb_info *sbi;
744         struct autofs_info *ino;
745         struct dentry *active;
746
747         DPRINTK("name = %.*s", dentry->d_name.len, dentry->d_name.name);
748
749         /* File name too long to exist */
750         if (dentry->d_name.len > NAME_MAX)
751                 return ERR_PTR(-ENAMETOOLONG);
752
753         sbi = autofs4_sbi(dir->i_sb);
754
755         DPRINTK("pid = %u, pgrp = %u, catatonic = %d, oz_mode = %d",
756                 current->pid, task_pgrp_nr(current), sbi->catatonic, oz_mode);
757
758         active = autofs4_lookup_active(dentry);
759         if (active) {
760                 return active;
761         } else {
762                 d_set_d_op(dentry, &autofs4_root_dentry_operations);
763
764                 /*
765                  * A dentry that is not within the root can never trigger a
766                  * mount operation, unless the directory already exists, so we
767                  * can return fail immediately.  The daemon however does need
768                  * to create directories within the file system.
769                  */
770                 if (!autofs4_oz_mode(sbi) && !IS_ROOT(dentry->d_parent))
771                         return ERR_PTR(-ENOENT);
772
773                 /* Mark entries in the root as mount triggers */
774                 if (autofs_type_indirect(sbi->type) && IS_ROOT(dentry->d_parent)) {
775                         d_set_d_op(dentry, &autofs4_dentry_operations);
776                         __managed_dentry_set_managed(dentry);
777                 }
778
779                 ino = autofs4_init_ino(NULL, sbi, 0555);
780                 if (!ino)
781                         return ERR_PTR(-ENOMEM);
782
783                 dentry->d_fsdata = ino;
784                 ino->dentry = dentry;
785
786                 autofs4_add_active(dentry);
787
788                 d_instantiate(dentry, NULL);
789         }
790         return NULL;
791 }
792
793 static int autofs4_dir_symlink(struct inode *dir, 
794                                struct dentry *dentry,
795                                const char *symname)
796 {
797         struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
798         struct autofs_info *ino = autofs4_dentry_ino(dentry);
799         struct autofs_info *p_ino;
800         struct inode *inode;
801         char *cp;
802
803         DPRINTK("%s <- %.*s", symname,
804                 dentry->d_name.len, dentry->d_name.name);
805
806         if (!autofs4_oz_mode(sbi))
807                 return -EACCES;
808
809         ino = autofs4_init_ino(ino, sbi, S_IFLNK | 0555);
810         if (!ino)
811                 return -ENOMEM;
812
813         autofs4_del_active(dentry);
814
815         ino->size = strlen(symname);
816         cp = kmalloc(ino->size + 1, GFP_KERNEL);
817         if (!cp) {
818                 if (!dentry->d_fsdata)
819                         kfree(ino);
820                 return -ENOMEM;
821         }
822
823         strcpy(cp, symname);
824
825         inode = autofs4_get_inode(dir->i_sb, ino);
826         if (!inode) {
827                 kfree(cp);
828                 if (!dentry->d_fsdata)
829                         kfree(ino);
830                 return -ENOMEM;
831         }
832         d_add(dentry, inode);
833
834         dentry->d_fsdata = ino;
835         ino->dentry = dget(dentry);
836         atomic_inc(&ino->count);
837         p_ino = autofs4_dentry_ino(dentry->d_parent);
838         if (p_ino && dentry->d_parent != dentry)
839                 atomic_inc(&p_ino->count);
840         ino->inode = inode;
841
842         ino->u.symlink = cp;
843         dir->i_mtime = CURRENT_TIME;
844
845         return 0;
846 }
847
848 /*
849  * NOTE!
850  *
851  * Normal filesystems would do a "d_delete()" to tell the VFS dcache
852  * that the file no longer exists. However, doing that means that the
853  * VFS layer can turn the dentry into a negative dentry.  We don't want
854  * this, because the unlink is probably the result of an expire.
855  * We simply d_drop it and add it to a expiring list in the super block,
856  * which allows the dentry lookup to check for an incomplete expire.
857  *
858  * If a process is blocked on the dentry waiting for the expire to finish,
859  * it will invalidate the dentry and try to mount with a new one.
860  *
861  * Also see autofs4_dir_rmdir()..
862  */
863 static int autofs4_dir_unlink(struct inode *dir, struct dentry *dentry)
864 {
865         struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
866         struct autofs_info *ino = autofs4_dentry_ino(dentry);
867         struct autofs_info *p_ino;
868         
869         /* This allows root to remove symlinks */
870         if (!autofs4_oz_mode(sbi) && !capable(CAP_SYS_ADMIN))
871                 return -EACCES;
872
873         if (atomic_dec_and_test(&ino->count)) {
874                 p_ino = autofs4_dentry_ino(dentry->d_parent);
875                 if (p_ino && dentry->d_parent != dentry)
876                         atomic_dec(&p_ino->count);
877         }
878         dput(ino->dentry);
879
880         dentry->d_inode->i_size = 0;
881         clear_nlink(dentry->d_inode);
882
883         dir->i_mtime = CURRENT_TIME;
884
885         spin_lock(&autofs4_lock);
886         autofs4_add_expiring(dentry);
887         spin_lock(&dentry->d_lock);
888         __d_drop(dentry);
889         spin_unlock(&dentry->d_lock);
890         spin_unlock(&autofs4_lock);
891
892         return 0;
893 }
894
895 static int autofs4_dir_rmdir(struct inode *dir, struct dentry *dentry)
896 {
897         struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
898         struct autofs_info *ino = autofs4_dentry_ino(dentry);
899         struct autofs_info *p_ino;
900         
901         DPRINTK("dentry %p, removing %.*s",
902                 dentry, dentry->d_name.len, dentry->d_name.name);
903
904         if (!autofs4_oz_mode(sbi))
905                 return -EACCES;
906
907         spin_lock(&autofs4_lock);
908         spin_lock(&sbi->lookup_lock);
909         spin_lock(&dentry->d_lock);
910         if (!list_empty(&dentry->d_subdirs)) {
911                 spin_unlock(&dentry->d_lock);
912                 spin_unlock(&sbi->lookup_lock);
913                 spin_unlock(&autofs4_lock);
914                 return -ENOTEMPTY;
915         }
916         __autofs4_add_expiring(dentry);
917         spin_unlock(&sbi->lookup_lock);
918         __d_drop(dentry);
919         spin_unlock(&dentry->d_lock);
920         spin_unlock(&autofs4_lock);
921
922         if (atomic_dec_and_test(&ino->count)) {
923                 p_ino = autofs4_dentry_ino(dentry->d_parent);
924                 if (p_ino && dentry->d_parent != dentry)
925                         atomic_dec(&p_ino->count);
926         }
927         dput(ino->dentry);
928         dentry->d_inode->i_size = 0;
929         clear_nlink(dentry->d_inode);
930
931         if (dir->i_nlink)
932                 drop_nlink(dir);
933
934         return 0;
935 }
936
937 static int autofs4_dir_mkdir(struct inode *dir, struct dentry *dentry, int mode)
938 {
939         struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
940         struct autofs_info *ino = autofs4_dentry_ino(dentry);
941         struct autofs_info *p_ino;
942         struct inode *inode;
943
944         if (!autofs4_oz_mode(sbi))
945                 return -EACCES;
946
947         DPRINTK("dentry %p, creating %.*s",
948                 dentry, dentry->d_name.len, dentry->d_name.name);
949
950         ino = autofs4_init_ino(ino, sbi, S_IFDIR | 0555);
951         if (!ino)
952                 return -ENOMEM;
953
954         autofs4_del_active(dentry);
955
956         inode = autofs4_get_inode(dir->i_sb, ino);
957         if (!inode) {
958                 if (!dentry->d_fsdata)
959                         kfree(ino);
960                 return -ENOMEM;
961         }
962         d_add(dentry, inode);
963
964         dentry->d_fsdata = ino;
965         ino->dentry = dget(dentry);
966         atomic_inc(&ino->count);
967         p_ino = autofs4_dentry_ino(dentry->d_parent);
968         if (p_ino && dentry->d_parent != dentry)
969                 atomic_inc(&p_ino->count);
970         ino->inode = inode;
971         inc_nlink(dir);
972         dir->i_mtime = CURRENT_TIME;
973
974         return 0;
975 }
976
977 /* Get/set timeout ioctl() operation */
978 #ifdef CONFIG_COMPAT
979 static inline int autofs4_compat_get_set_timeout(struct autofs_sb_info *sbi,
980                                          compat_ulong_t __user *p)
981 {
982         int rv;
983         unsigned long ntimeout;
984
985         if ((rv = get_user(ntimeout, p)) ||
986              (rv = put_user(sbi->exp_timeout/HZ, p)))
987                 return rv;
988
989         if (ntimeout > UINT_MAX/HZ)
990                 sbi->exp_timeout = 0;
991         else
992                 sbi->exp_timeout = ntimeout * HZ;
993
994         return 0;
995 }
996 #endif
997
998 static inline int autofs4_get_set_timeout(struct autofs_sb_info *sbi,
999                                          unsigned long __user *p)
1000 {
1001         int rv;
1002         unsigned long ntimeout;
1003
1004         if ((rv = get_user(ntimeout, p)) ||
1005              (rv = put_user(sbi->exp_timeout/HZ, p)))
1006                 return rv;
1007
1008         if (ntimeout > ULONG_MAX/HZ)
1009                 sbi->exp_timeout = 0;
1010         else
1011                 sbi->exp_timeout = ntimeout * HZ;
1012
1013         return 0;
1014 }
1015
1016 /* Return protocol version */
1017 static inline int autofs4_get_protover(struct autofs_sb_info *sbi, int __user *p)
1018 {
1019         return put_user(sbi->version, p);
1020 }
1021
1022 /* Return protocol sub version */
1023 static inline int autofs4_get_protosubver(struct autofs_sb_info *sbi, int __user *p)
1024 {
1025         return put_user(sbi->sub_version, p);
1026 }
1027
1028 /*
1029 * Tells the daemon whether it can umount the autofs mount.
1030 */
1031 static inline int autofs4_ask_umount(struct vfsmount *mnt, int __user *p)
1032 {
1033         int status = 0;
1034
1035         if (may_umount(mnt))
1036                 status = 1;
1037
1038         DPRINTK("returning %d", status);
1039
1040         status = put_user(status, p);
1041
1042         return status;
1043 }
1044
1045 /* Identify autofs4_dentries - this is so we can tell if there's
1046    an extra dentry refcount or not.  We only hold a refcount on the
1047    dentry if its non-negative (ie, d_inode != NULL)
1048 */
1049 int is_autofs4_dentry(struct dentry *dentry)
1050 {
1051         return dentry && dentry->d_inode &&
1052                 (dentry->d_op == &autofs4_root_dentry_operations ||
1053                  dentry->d_op == &autofs4_dentry_operations) &&
1054                 dentry->d_fsdata != NULL;
1055 }
1056
1057 /*
1058  * ioctl()'s on the root directory is the chief method for the daemon to
1059  * generate kernel reactions
1060  */
1061 static int autofs4_root_ioctl_unlocked(struct inode *inode, struct file *filp,
1062                                        unsigned int cmd, unsigned long arg)
1063 {
1064         struct autofs_sb_info *sbi = autofs4_sbi(inode->i_sb);
1065         void __user *p = (void __user *)arg;
1066
1067         DPRINTK("cmd = 0x%08x, arg = 0x%08lx, sbi = %p, pgrp = %u",
1068                 cmd,arg,sbi,task_pgrp_nr(current));
1069
1070         if (_IOC_TYPE(cmd) != _IOC_TYPE(AUTOFS_IOC_FIRST) ||
1071              _IOC_NR(cmd) - _IOC_NR(AUTOFS_IOC_FIRST) >= AUTOFS_IOC_COUNT)
1072                 return -ENOTTY;
1073         
1074         if (!autofs4_oz_mode(sbi) && !capable(CAP_SYS_ADMIN))
1075                 return -EPERM;
1076         
1077         switch(cmd) {
1078         case AUTOFS_IOC_READY:  /* Wait queue: go ahead and retry */
1079                 return autofs4_wait_release(sbi,(autofs_wqt_t)arg,0);
1080         case AUTOFS_IOC_FAIL:   /* Wait queue: fail with ENOENT */
1081                 return autofs4_wait_release(sbi,(autofs_wqt_t)arg,-ENOENT);
1082         case AUTOFS_IOC_CATATONIC: /* Enter catatonic mode (daemon shutdown) */
1083                 autofs4_catatonic_mode(sbi);
1084                 return 0;
1085         case AUTOFS_IOC_PROTOVER: /* Get protocol version */
1086                 return autofs4_get_protover(sbi, p);
1087         case AUTOFS_IOC_PROTOSUBVER: /* Get protocol sub version */
1088                 return autofs4_get_protosubver(sbi, p);
1089         case AUTOFS_IOC_SETTIMEOUT:
1090                 return autofs4_get_set_timeout(sbi, p);
1091 #ifdef CONFIG_COMPAT
1092         case AUTOFS_IOC_SETTIMEOUT32:
1093                 return autofs4_compat_get_set_timeout(sbi, p);
1094 #endif
1095
1096         case AUTOFS_IOC_ASKUMOUNT:
1097                 return autofs4_ask_umount(filp->f_path.mnt, p);
1098
1099         /* return a single thing to expire */
1100         case AUTOFS_IOC_EXPIRE:
1101                 return autofs4_expire_run(inode->i_sb,filp->f_path.mnt,sbi, p);
1102         /* same as above, but can send multiple expires through pipe */
1103         case AUTOFS_IOC_EXPIRE_MULTI:
1104                 return autofs4_expire_multi(inode->i_sb,filp->f_path.mnt,sbi, p);
1105
1106         default:
1107                 return -ENOSYS;
1108         }
1109 }
1110
1111 static long autofs4_root_ioctl(struct file *filp,
1112                                unsigned int cmd, unsigned long arg)
1113 {
1114         struct inode *inode = filp->f_dentry->d_inode;
1115         return autofs4_root_ioctl_unlocked(inode, filp, cmd, arg);
1116 }
1117
1118 #ifdef CONFIG_COMPAT
1119 static long autofs4_root_compat_ioctl(struct file *filp,
1120                              unsigned int cmd, unsigned long arg)
1121 {
1122         struct inode *inode = filp->f_path.dentry->d_inode;
1123         int ret;
1124
1125         if (cmd == AUTOFS_IOC_READY || cmd == AUTOFS_IOC_FAIL)
1126                 ret = autofs4_root_ioctl_unlocked(inode, filp, cmd, arg);
1127         else
1128                 ret = autofs4_root_ioctl_unlocked(inode, filp, cmd,
1129                         (unsigned long)compat_ptr(arg));
1130
1131         return ret;
1132 }
1133 #endif