1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright 1997-1998 Transmeta Corporation -- All Rights Reserved
4 * Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org>
5 * Copyright 2001-2006 Ian Kent <raven@themaw.net>
8 #include <linux/capability.h>
9 #include <linux/compat.h>
13 static int autofs_dir_symlink(struct inode
*, struct dentry
*, const char *);
14 static int autofs_dir_unlink(struct inode
*, struct dentry
*);
15 static int autofs_dir_rmdir(struct inode
*, struct dentry
*);
16 static int autofs_dir_mkdir(struct inode
*, struct dentry
*, umode_t
);
17 static long autofs_root_ioctl(struct file
*, unsigned int, unsigned long);
19 static long autofs_root_compat_ioctl(struct file
*,
20 unsigned int, unsigned long);
22 static int autofs_dir_open(struct inode
*inode
, struct file
*file
);
23 static struct dentry
*autofs_lookup(struct inode
*,
24 struct dentry
*, unsigned int);
25 static struct vfsmount
*autofs_d_automount(struct path
*);
26 static int autofs_d_manage(const struct path
*, bool);
27 static void autofs_dentry_release(struct dentry
*);
29 const struct file_operations autofs_root_operations
= {
30 .open
= dcache_dir_open
,
31 .release
= dcache_dir_close
,
32 .read
= generic_read_dir
,
33 .iterate_shared
= dcache_readdir
,
34 .llseek
= dcache_dir_lseek
,
35 .unlocked_ioctl
= autofs_root_ioctl
,
37 .compat_ioctl
= autofs_root_compat_ioctl
,
41 const struct file_operations autofs_dir_operations
= {
42 .open
= autofs_dir_open
,
43 .release
= dcache_dir_close
,
44 .read
= generic_read_dir
,
45 .iterate_shared
= dcache_readdir
,
46 .llseek
= dcache_dir_lseek
,
49 const struct inode_operations autofs_dir_inode_operations
= {
50 .lookup
= autofs_lookup
,
51 .unlink
= autofs_dir_unlink
,
52 .symlink
= autofs_dir_symlink
,
53 .mkdir
= autofs_dir_mkdir
,
54 .rmdir
= autofs_dir_rmdir
,
57 const struct dentry_operations autofs_dentry_operations
= {
58 .d_automount
= autofs_d_automount
,
59 .d_manage
= autofs_d_manage
,
60 .d_release
= autofs_dentry_release
,
63 static void autofs_add_active(struct dentry
*dentry
)
65 struct autofs_sb_info
*sbi
= autofs_sbi(dentry
->d_sb
);
66 struct autofs_info
*ino
;
68 ino
= autofs_dentry_ino(dentry
);
70 spin_lock(&sbi
->lookup_lock
);
71 if (!ino
->active_count
) {
72 if (list_empty(&ino
->active
))
73 list_add(&ino
->active
, &sbi
->active_list
);
76 spin_unlock(&sbi
->lookup_lock
);
80 static void autofs_del_active(struct dentry
*dentry
)
82 struct autofs_sb_info
*sbi
= autofs_sbi(dentry
->d_sb
);
83 struct autofs_info
*ino
;
85 ino
= autofs_dentry_ino(dentry
);
87 spin_lock(&sbi
->lookup_lock
);
89 if (!ino
->active_count
) {
90 if (!list_empty(&ino
->active
))
91 list_del_init(&ino
->active
);
93 spin_unlock(&sbi
->lookup_lock
);
97 static int autofs_dir_open(struct inode
*inode
, struct file
*file
)
99 struct dentry
*dentry
= file
->f_path
.dentry
;
100 struct autofs_sb_info
*sbi
= autofs_sbi(dentry
->d_sb
);
102 pr_debug("file=%p dentry=%p %pd\n", file
, dentry
, dentry
);
104 if (autofs_oz_mode(sbi
))
108 * An empty directory in an autofs file system is always a
109 * mount point. The daemon must have failed to mount this
110 * during lookup so it doesn't exist. This can happen, for
111 * example, if user space returns an incorrect status for a
112 * mount request. Otherwise we're doing a readdir on the
113 * autofs file system so just let the libfs routines handle
116 spin_lock(&sbi
->lookup_lock
);
117 if (!path_is_mountpoint(&file
->f_path
) && simple_empty(dentry
)) {
118 spin_unlock(&sbi
->lookup_lock
);
121 spin_unlock(&sbi
->lookup_lock
);
124 return dcache_dir_open(inode
, file
);
127 static void autofs_dentry_release(struct dentry
*de
)
129 struct autofs_info
*ino
= autofs_dentry_ino(de
);
130 struct autofs_sb_info
*sbi
= autofs_sbi(de
->d_sb
);
132 pr_debug("releasing %p\n", de
);
138 spin_lock(&sbi
->lookup_lock
);
139 if (!list_empty(&ino
->active
))
140 list_del(&ino
->active
);
141 if (!list_empty(&ino
->expiring
))
142 list_del(&ino
->expiring
);
143 spin_unlock(&sbi
->lookup_lock
);
146 autofs_free_ino(ino
);
149 static struct dentry
*autofs_lookup_active(struct dentry
*dentry
)
151 struct autofs_sb_info
*sbi
= autofs_sbi(dentry
->d_sb
);
152 struct dentry
*parent
= dentry
->d_parent
;
153 const struct qstr
*name
= &dentry
->d_name
;
154 unsigned int len
= name
->len
;
155 unsigned int hash
= name
->hash
;
156 const unsigned char *str
= name
->name
;
157 struct list_head
*p
, *head
;
159 head
= &sbi
->active_list
;
160 if (list_empty(head
))
162 spin_lock(&sbi
->lookup_lock
);
163 list_for_each(p
, head
) {
164 struct autofs_info
*ino
;
165 struct dentry
*active
;
166 const struct qstr
*qstr
;
168 ino
= list_entry(p
, struct autofs_info
, active
);
169 active
= ino
->dentry
;
171 spin_lock(&active
->d_lock
);
174 if ((int) d_count(active
) <= 0)
177 qstr
= &active
->d_name
;
179 if (active
->d_name
.hash
!= hash
)
181 if (active
->d_parent
!= parent
)
184 if (qstr
->len
!= len
)
186 if (memcmp(qstr
->name
, str
, len
))
189 if (d_unhashed(active
)) {
191 spin_unlock(&active
->d_lock
);
192 spin_unlock(&sbi
->lookup_lock
);
196 spin_unlock(&active
->d_lock
);
198 spin_unlock(&sbi
->lookup_lock
);
203 static struct dentry
*autofs_lookup_expiring(struct dentry
*dentry
,
206 struct autofs_sb_info
*sbi
= autofs_sbi(dentry
->d_sb
);
207 struct dentry
*parent
= dentry
->d_parent
;
208 const struct qstr
*name
= &dentry
->d_name
;
209 unsigned int len
= name
->len
;
210 unsigned int hash
= name
->hash
;
211 const unsigned char *str
= name
->name
;
212 struct list_head
*p
, *head
;
214 head
= &sbi
->expiring_list
;
215 if (list_empty(head
))
217 spin_lock(&sbi
->lookup_lock
);
218 list_for_each(p
, head
) {
219 struct autofs_info
*ino
;
220 struct dentry
*expiring
;
221 const struct qstr
*qstr
;
224 spin_unlock(&sbi
->lookup_lock
);
225 return ERR_PTR(-ECHILD
);
228 ino
= list_entry(p
, struct autofs_info
, expiring
);
229 expiring
= ino
->dentry
;
231 spin_lock(&expiring
->d_lock
);
233 /* We've already been dentry_iput or unlinked */
234 if (d_really_is_negative(expiring
))
237 qstr
= &expiring
->d_name
;
239 if (expiring
->d_name
.hash
!= hash
)
241 if (expiring
->d_parent
!= parent
)
244 if (qstr
->len
!= len
)
246 if (memcmp(qstr
->name
, str
, len
))
249 if (d_unhashed(expiring
)) {
250 dget_dlock(expiring
);
251 spin_unlock(&expiring
->d_lock
);
252 spin_unlock(&sbi
->lookup_lock
);
256 spin_unlock(&expiring
->d_lock
);
258 spin_unlock(&sbi
->lookup_lock
);
263 static int autofs_mount_wait(const struct path
*path
, bool rcu_walk
)
265 struct autofs_sb_info
*sbi
= autofs_sbi(path
->dentry
->d_sb
);
266 struct autofs_info
*ino
= autofs_dentry_ino(path
->dentry
);
269 if (ino
->flags
& AUTOFS_INF_PENDING
) {
272 pr_debug("waiting for mount name=%pd\n", path
->dentry
);
273 status
= autofs_wait(sbi
, path
, NFY_MOUNT
);
274 pr_debug("mount wait done status=%d\n", status
);
275 ino
->last_used
= jiffies
;
278 if (!(sbi
->flags
& AUTOFS_SBI_STRICTEXPIRE
))
279 ino
->last_used
= jiffies
;
283 static int do_expire_wait(const struct path
*path
, bool rcu_walk
)
285 struct dentry
*dentry
= path
->dentry
;
286 struct dentry
*expiring
;
288 expiring
= autofs_lookup_expiring(dentry
, rcu_walk
);
289 if (IS_ERR(expiring
))
290 return PTR_ERR(expiring
);
292 return autofs_expire_wait(path
, rcu_walk
);
294 const struct path
this = { .mnt
= path
->mnt
, .dentry
= expiring
};
296 * If we are racing with expire the request might not
297 * be quite complete, but the directory has been removed
298 * so it must have been successful, just wait for it.
300 autofs_expire_wait(&this, 0);
301 autofs_del_expiring(expiring
);
307 static struct dentry
*autofs_mountpoint_changed(struct path
*path
)
309 struct dentry
*dentry
= path
->dentry
;
310 struct autofs_sb_info
*sbi
= autofs_sbi(dentry
->d_sb
);
313 * If this is an indirect mount the dentry could have gone away
314 * as a result of an expire and a new one created.
316 if (autofs_type_indirect(sbi
->type
) && d_unhashed(dentry
)) {
317 struct dentry
*parent
= dentry
->d_parent
;
318 struct autofs_info
*ino
;
321 new = d_lookup(parent
, &dentry
->d_name
);
324 ino
= autofs_dentry_ino(new);
325 ino
->last_used
= jiffies
;
332 static struct vfsmount
*autofs_d_automount(struct path
*path
)
334 struct dentry
*dentry
= path
->dentry
;
335 struct autofs_sb_info
*sbi
= autofs_sbi(dentry
->d_sb
);
336 struct autofs_info
*ino
= autofs_dentry_ino(dentry
);
339 pr_debug("dentry=%p %pd\n", dentry
, dentry
);
341 /* The daemon never triggers a mount. */
342 if (autofs_oz_mode(sbi
))
346 * If an expire request is pending everyone must wait.
347 * If the expire fails we're still mounted so continue
348 * the follow and return. A return of -EAGAIN (which only
349 * happens with indirect mounts) means the expire completed
350 * and the directory was removed, so just go ahead and try
353 status
= do_expire_wait(path
, 0);
354 if (status
&& status
!= -EAGAIN
)
357 /* Callback to the daemon to perform the mount or wait */
358 spin_lock(&sbi
->fs_lock
);
359 if (ino
->flags
& AUTOFS_INF_PENDING
) {
360 spin_unlock(&sbi
->fs_lock
);
361 status
= autofs_mount_wait(path
, 0);
363 return ERR_PTR(status
);
368 * If the dentry is a symlink it's equivalent to a directory
369 * having path_is_mountpoint() true, so there's no need to call
370 * back to the daemon.
372 if (d_really_is_positive(dentry
) && d_is_symlink(dentry
)) {
373 spin_unlock(&sbi
->fs_lock
);
377 if (!path_is_mountpoint(path
)) {
379 * It's possible that user space hasn't removed directories
380 * after umounting a rootless multi-mount, although it
381 * should. For v5 path_has_submounts() is sufficient to
382 * handle this because the leaves of the directory tree under
383 * the mount never trigger mounts themselves (they have an
384 * autofs trigger mount mounted on them). But v4 pseudo direct
385 * mounts do need the leaves to trigger mounts. In this case
386 * we have no choice but to use the list_empty() check and
387 * require user space behave.
389 if (sbi
->version
> 4) {
390 if (path_has_submounts(path
)) {
391 spin_unlock(&sbi
->fs_lock
);
395 if (!simple_empty(dentry
)) {
396 spin_unlock(&sbi
->fs_lock
);
400 ino
->flags
|= AUTOFS_INF_PENDING
;
401 spin_unlock(&sbi
->fs_lock
);
402 status
= autofs_mount_wait(path
, 0);
403 spin_lock(&sbi
->fs_lock
);
404 ino
->flags
&= ~AUTOFS_INF_PENDING
;
406 spin_unlock(&sbi
->fs_lock
);
407 return ERR_PTR(status
);
410 spin_unlock(&sbi
->fs_lock
);
412 /* Mount succeeded, check if we ended up with a new dentry */
413 dentry
= autofs_mountpoint_changed(path
);
415 return ERR_PTR(-ENOENT
);
420 static int autofs_d_manage(const struct path
*path
, bool rcu_walk
)
422 struct dentry
*dentry
= path
->dentry
;
423 struct autofs_sb_info
*sbi
= autofs_sbi(dentry
->d_sb
);
424 struct autofs_info
*ino
= autofs_dentry_ino(dentry
);
427 pr_debug("dentry=%p %pd\n", dentry
, dentry
);
429 /* The daemon never waits. */
430 if (autofs_oz_mode(sbi
)) {
431 if (!path_is_mountpoint(path
))
436 /* Wait for pending expires */
437 if (do_expire_wait(path
, rcu_walk
) == -ECHILD
)
441 * This dentry may be under construction so wait on mount
444 status
= autofs_mount_wait(path
, rcu_walk
);
449 /* We don't need fs_lock in rcu_walk mode,
450 * just testing 'AUTOFS_INFO_NO_RCU' is enough.
451 * simple_empty() takes a spinlock, so leave it
453 * We only return -EISDIR when certain this isn't
458 if (ino
->flags
& AUTOFS_INF_WANT_EXPIRE
)
460 if (path_is_mountpoint(path
))
462 inode
= d_inode_rcu(dentry
);
463 if (inode
&& S_ISLNK(inode
->i_mode
))
465 if (list_empty(&dentry
->d_subdirs
))
467 if (!simple_empty(dentry
))
472 spin_lock(&sbi
->fs_lock
);
474 * If the dentry has been selected for expire while we slept
475 * on the lock then it might go away. We'll deal with that in
476 * ->d_automount() and wait on a new mount if the expire
477 * succeeds or return here if it doesn't (since there's no
478 * mount to follow with a rootless multi-mount).
480 if (!(ino
->flags
& AUTOFS_INF_EXPIRING
)) {
482 * Any needed mounting has been completed and the path
483 * updated so check if this is a rootless multi-mount so
484 * we can avoid needless calls ->d_automount() and avoid
485 * an incorrect ELOOP error return.
487 if ((!path_is_mountpoint(path
) && !simple_empty(dentry
)) ||
488 (d_really_is_positive(dentry
) && d_is_symlink(dentry
)))
491 spin_unlock(&sbi
->fs_lock
);
496 /* Lookups in the root directory */
497 static struct dentry
*autofs_lookup(struct inode
*dir
,
498 struct dentry
*dentry
, unsigned int flags
)
500 struct autofs_sb_info
*sbi
;
501 struct autofs_info
*ino
;
502 struct dentry
*active
;
504 pr_debug("name = %pd\n", dentry
);
506 /* File name too long to exist */
507 if (dentry
->d_name
.len
> NAME_MAX
)
508 return ERR_PTR(-ENAMETOOLONG
);
510 sbi
= autofs_sbi(dir
->i_sb
);
512 pr_debug("pid = %u, pgrp = %u, catatonic = %d, oz_mode = %d\n",
513 current
->pid
, task_pgrp_nr(current
),
514 sbi
->flags
& AUTOFS_SBI_CATATONIC
,
515 autofs_oz_mode(sbi
));
517 active
= autofs_lookup_active(dentry
);
522 * A dentry that is not within the root can never trigger a
523 * mount operation, unless the directory already exists, so we
524 * can return fail immediately. The daemon however does need
525 * to create directories within the file system.
527 if (!autofs_oz_mode(sbi
) && !IS_ROOT(dentry
->d_parent
))
528 return ERR_PTR(-ENOENT
);
530 /* Mark entries in the root as mount triggers */
531 if (IS_ROOT(dentry
->d_parent
) &&
532 autofs_type_indirect(sbi
->type
))
533 __managed_dentry_set_managed(dentry
);
535 ino
= autofs_new_ino(sbi
);
537 return ERR_PTR(-ENOMEM
);
539 dentry
->d_fsdata
= ino
;
540 ino
->dentry
= dentry
;
542 autofs_add_active(dentry
);
547 static int autofs_dir_symlink(struct inode
*dir
,
548 struct dentry
*dentry
,
551 struct autofs_sb_info
*sbi
= autofs_sbi(dir
->i_sb
);
552 struct autofs_info
*ino
= autofs_dentry_ino(dentry
);
553 struct autofs_info
*p_ino
;
555 size_t size
= strlen(symname
);
558 pr_debug("%s <- %pd\n", symname
, dentry
);
560 if (!autofs_oz_mode(sbi
))
563 /* autofs_oz_mode() needs to allow path walks when the
564 * autofs mount is catatonic but the state of an autofs
565 * file system needs to be preserved over restarts.
567 if (sbi
->flags
& AUTOFS_SBI_CATATONIC
)
572 autofs_clean_ino(ino
);
574 autofs_del_active(dentry
);
576 cp
= kmalloc(size
+ 1, GFP_KERNEL
);
582 inode
= autofs_get_inode(dir
->i_sb
, S_IFLNK
| 0555);
587 inode
->i_private
= cp
;
588 inode
->i_size
= size
;
589 d_add(dentry
, inode
);
592 atomic_inc(&ino
->count
);
593 p_ino
= autofs_dentry_ino(dentry
->d_parent
);
594 if (p_ino
&& !IS_ROOT(dentry
))
595 atomic_inc(&p_ino
->count
);
597 dir
->i_mtime
= current_time(dir
);
605 * Normal filesystems would do a "d_delete()" to tell the VFS dcache
606 * that the file no longer exists. However, doing that means that the
607 * VFS layer can turn the dentry into a negative dentry. We don't want
608 * this, because the unlink is probably the result of an expire.
609 * We simply d_drop it and add it to a expiring list in the super block,
610 * which allows the dentry lookup to check for an incomplete expire.
612 * If a process is blocked on the dentry waiting for the expire to finish,
613 * it will invalidate the dentry and try to mount with a new one.
615 * Also see autofs_dir_rmdir()..
617 static int autofs_dir_unlink(struct inode
*dir
, struct dentry
*dentry
)
619 struct autofs_sb_info
*sbi
= autofs_sbi(dir
->i_sb
);
620 struct autofs_info
*ino
= autofs_dentry_ino(dentry
);
621 struct autofs_info
*p_ino
;
623 if (!autofs_oz_mode(sbi
))
626 /* autofs_oz_mode() needs to allow path walks when the
627 * autofs mount is catatonic but the state of an autofs
628 * file system needs to be preserved over restarts.
630 if (sbi
->flags
& AUTOFS_SBI_CATATONIC
)
633 if (atomic_dec_and_test(&ino
->count
)) {
634 p_ino
= autofs_dentry_ino(dentry
->d_parent
);
635 if (p_ino
&& !IS_ROOT(dentry
))
636 atomic_dec(&p_ino
->count
);
640 d_inode(dentry
)->i_size
= 0;
641 clear_nlink(d_inode(dentry
));
643 dir
->i_mtime
= current_time(dir
);
645 spin_lock(&sbi
->lookup_lock
);
646 __autofs_add_expiring(dentry
);
648 spin_unlock(&sbi
->lookup_lock
);
654 * Version 4 of autofs provides a pseudo direct mount implementation
655 * that relies on directories at the leaves of a directory tree under
656 * an indirect mount to trigger mounts. To allow for this we need to
657 * set the DMANAGED_AUTOMOUNT and DMANAGED_TRANSIT flags on the leaves
658 * of the directory tree. There is no need to clear the automount flag
659 * following a mount or restore it after an expire because these mounts
660 * are always covered. However, it is necessary to ensure that these
661 * flags are clear on non-empty directories to avoid unnecessary calls
664 static void autofs_set_leaf_automount_flags(struct dentry
*dentry
)
666 struct dentry
*parent
;
668 /* root and dentrys in the root are already handled */
669 if (IS_ROOT(dentry
->d_parent
))
672 managed_dentry_set_managed(dentry
);
674 parent
= dentry
->d_parent
;
675 /* only consider parents below dentrys in the root */
676 if (IS_ROOT(parent
->d_parent
))
678 managed_dentry_clear_managed(parent
);
681 static void autofs_clear_leaf_automount_flags(struct dentry
*dentry
)
683 struct list_head
*d_child
;
684 struct dentry
*parent
;
686 /* flags for dentrys in the root are handled elsewhere */
687 if (IS_ROOT(dentry
->d_parent
))
690 managed_dentry_clear_managed(dentry
);
692 parent
= dentry
->d_parent
;
693 /* only consider parents below dentrys in the root */
694 if (IS_ROOT(parent
->d_parent
))
696 d_child
= &dentry
->d_child
;
697 /* Set parent managed if it's becoming empty */
698 if (d_child
->next
== &parent
->d_subdirs
&&
699 d_child
->prev
== &parent
->d_subdirs
)
700 managed_dentry_set_managed(parent
);
703 static int autofs_dir_rmdir(struct inode
*dir
, struct dentry
*dentry
)
705 struct autofs_sb_info
*sbi
= autofs_sbi(dir
->i_sb
);
706 struct autofs_info
*ino
= autofs_dentry_ino(dentry
);
707 struct autofs_info
*p_ino
;
709 pr_debug("dentry %p, removing %pd\n", dentry
, dentry
);
711 if (!autofs_oz_mode(sbi
))
714 /* autofs_oz_mode() needs to allow path walks when the
715 * autofs mount is catatonic but the state of an autofs
716 * file system needs to be preserved over restarts.
718 if (sbi
->flags
& AUTOFS_SBI_CATATONIC
)
721 spin_lock(&sbi
->lookup_lock
);
722 if (!simple_empty(dentry
)) {
723 spin_unlock(&sbi
->lookup_lock
);
726 __autofs_add_expiring(dentry
);
728 spin_unlock(&sbi
->lookup_lock
);
730 if (sbi
->version
< 5)
731 autofs_clear_leaf_automount_flags(dentry
);
733 if (atomic_dec_and_test(&ino
->count
)) {
734 p_ino
= autofs_dentry_ino(dentry
->d_parent
);
735 if (p_ino
&& dentry
->d_parent
!= dentry
)
736 atomic_dec(&p_ino
->count
);
739 d_inode(dentry
)->i_size
= 0;
740 clear_nlink(d_inode(dentry
));
748 static int autofs_dir_mkdir(struct inode
*dir
,
749 struct dentry
*dentry
, umode_t mode
)
751 struct autofs_sb_info
*sbi
= autofs_sbi(dir
->i_sb
);
752 struct autofs_info
*ino
= autofs_dentry_ino(dentry
);
753 struct autofs_info
*p_ino
;
756 if (!autofs_oz_mode(sbi
))
759 /* autofs_oz_mode() needs to allow path walks when the
760 * autofs mount is catatonic but the state of an autofs
761 * file system needs to be preserved over restarts.
763 if (sbi
->flags
& AUTOFS_SBI_CATATONIC
)
766 pr_debug("dentry %p, creating %pd\n", dentry
, dentry
);
770 autofs_clean_ino(ino
);
772 autofs_del_active(dentry
);
774 inode
= autofs_get_inode(dir
->i_sb
, S_IFDIR
| mode
);
777 d_add(dentry
, inode
);
779 if (sbi
->version
< 5)
780 autofs_set_leaf_automount_flags(dentry
);
783 atomic_inc(&ino
->count
);
784 p_ino
= autofs_dentry_ino(dentry
->d_parent
);
785 if (p_ino
&& !IS_ROOT(dentry
))
786 atomic_inc(&p_ino
->count
);
788 dir
->i_mtime
= current_time(dir
);
793 /* Get/set timeout ioctl() operation */
795 static inline int autofs_compat_get_set_timeout(struct autofs_sb_info
*sbi
,
796 compat_ulong_t __user
*p
)
798 unsigned long ntimeout
;
801 rv
= get_user(ntimeout
, p
);
805 rv
= put_user(sbi
->exp_timeout
/HZ
, p
);
809 if (ntimeout
> UINT_MAX
/HZ
)
810 sbi
->exp_timeout
= 0;
812 sbi
->exp_timeout
= ntimeout
* HZ
;
820 static inline int autofs_get_set_timeout(struct autofs_sb_info
*sbi
,
821 unsigned long __user
*p
)
823 unsigned long ntimeout
;
826 rv
= get_user(ntimeout
, p
);
830 rv
= put_user(sbi
->exp_timeout
/HZ
, p
);
834 if (ntimeout
> ULONG_MAX
/HZ
)
835 sbi
->exp_timeout
= 0;
837 sbi
->exp_timeout
= ntimeout
* HZ
;
844 /* Return protocol version */
845 static inline int autofs_get_protover(struct autofs_sb_info
*sbi
,
848 return put_user(sbi
->version
, p
);
851 /* Return protocol sub version */
852 static inline int autofs_get_protosubver(struct autofs_sb_info
*sbi
,
855 return put_user(sbi
->sub_version
, p
);
859 * Tells the daemon whether it can umount the autofs mount.
861 static inline int autofs_ask_umount(struct vfsmount
*mnt
, int __user
*p
)
868 pr_debug("may umount %d\n", status
);
870 status
= put_user(status
, p
);
875 /* Identify autofs_dentries - this is so we can tell if there's
876 * an extra dentry refcount or not. We only hold a refcount on the
877 * dentry if its non-negative (ie, d_inode != NULL)
879 int is_autofs_dentry(struct dentry
*dentry
)
881 return dentry
&& d_really_is_positive(dentry
) &&
882 dentry
->d_op
== &autofs_dentry_operations
&&
883 dentry
->d_fsdata
!= NULL
;
887 * ioctl()'s on the root directory is the chief method for the daemon to
888 * generate kernel reactions
890 static int autofs_root_ioctl_unlocked(struct inode
*inode
, struct file
*filp
,
891 unsigned int cmd
, unsigned long arg
)
893 struct autofs_sb_info
*sbi
= autofs_sbi(inode
->i_sb
);
894 void __user
*p
= (void __user
*)arg
;
896 pr_debug("cmd = 0x%08x, arg = 0x%08lx, sbi = %p, pgrp = %u\n",
897 cmd
, arg
, sbi
, task_pgrp_nr(current
));
899 if (_IOC_TYPE(cmd
) != _IOC_TYPE(AUTOFS_IOC_FIRST
) ||
900 _IOC_NR(cmd
) - _IOC_NR(AUTOFS_IOC_FIRST
) >= AUTOFS_IOC_COUNT
)
903 if (!autofs_oz_mode(sbi
) && !capable(CAP_SYS_ADMIN
))
907 case AUTOFS_IOC_READY
: /* Wait queue: go ahead and retry */
908 return autofs_wait_release(sbi
, (autofs_wqt_t
) arg
, 0);
909 case AUTOFS_IOC_FAIL
: /* Wait queue: fail with ENOENT */
910 return autofs_wait_release(sbi
, (autofs_wqt_t
) arg
, -ENOENT
);
911 case AUTOFS_IOC_CATATONIC
: /* Enter catatonic mode (daemon shutdown) */
912 autofs_catatonic_mode(sbi
);
914 case AUTOFS_IOC_PROTOVER
: /* Get protocol version */
915 return autofs_get_protover(sbi
, p
);
916 case AUTOFS_IOC_PROTOSUBVER
: /* Get protocol sub version */
917 return autofs_get_protosubver(sbi
, p
);
918 case AUTOFS_IOC_SETTIMEOUT
:
919 return autofs_get_set_timeout(sbi
, p
);
921 case AUTOFS_IOC_SETTIMEOUT32
:
922 return autofs_compat_get_set_timeout(sbi
, p
);
925 case AUTOFS_IOC_ASKUMOUNT
:
926 return autofs_ask_umount(filp
->f_path
.mnt
, p
);
928 /* return a single thing to expire */
929 case AUTOFS_IOC_EXPIRE
:
930 return autofs_expire_run(inode
->i_sb
, filp
->f_path
.mnt
, sbi
, p
);
931 /* same as above, but can send multiple expires through pipe */
932 case AUTOFS_IOC_EXPIRE_MULTI
:
933 return autofs_expire_multi(inode
->i_sb
,
934 filp
->f_path
.mnt
, sbi
, p
);
941 static long autofs_root_ioctl(struct file
*filp
,
942 unsigned int cmd
, unsigned long arg
)
944 struct inode
*inode
= file_inode(filp
);
946 return autofs_root_ioctl_unlocked(inode
, filp
, cmd
, arg
);
950 static long autofs_root_compat_ioctl(struct file
*filp
,
951 unsigned int cmd
, unsigned long arg
)
953 struct inode
*inode
= file_inode(filp
);
956 if (cmd
== AUTOFS_IOC_READY
|| cmd
== AUTOFS_IOC_FAIL
)
957 ret
= autofs_root_ioctl_unlocked(inode
, filp
, cmd
, arg
);
959 ret
= autofs_root_ioctl_unlocked(inode
, filp
, cmd
,
960 (unsigned long) compat_ptr(arg
));