diff options
Diffstat (limited to 'fs/autofs4/expire.c')
| -rw-r--r-- | fs/autofs4/expire.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/fs/autofs4/expire.c b/fs/autofs4/expire.c index cde2f8e8935..4b6fb3f628c 100644 --- a/fs/autofs4/expire.c +++ b/fs/autofs4/expire.c | |||
| @@ -56,12 +56,23 @@ static int autofs4_mount_busy(struct vfsmount *mnt, struct dentry *dentry) | |||
| 56 | mntget(mnt); | 56 | mntget(mnt); |
| 57 | dget(dentry); | 57 | dget(dentry); |
| 58 | 58 | ||
| 59 | if (!autofs4_follow_mount(&mnt, &dentry)) | 59 | if (!follow_down(&mnt, &dentry)) |
| 60 | goto done; | 60 | goto done; |
| 61 | 61 | ||
| 62 | /* This is an autofs submount, we can't expire it */ | 62 | if (is_autofs4_dentry(dentry)) { |
| 63 | if (is_autofs4_dentry(dentry)) | 63 | struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb); |
| 64 | goto done; | 64 | |
| 65 | /* This is an autofs submount, we can't expire it */ | ||
| 66 | if (sbi->type == AUTOFS_TYPE_INDIRECT) | ||
| 67 | goto done; | ||
| 68 | |||
| 69 | /* | ||
| 70 | * Otherwise it's an offset mount and we need to check | ||
| 71 | * if we can umount its mount, if there is one. | ||
| 72 | */ | ||
| 73 | if (!d_mountpoint(dentry)) | ||
| 74 | goto done; | ||
| 75 | } | ||
| 65 | 76 | ||
| 66 | /* Update the expiry counter if fs is busy */ | 77 | /* Update the expiry counter if fs is busy */ |
| 67 | if (!may_umount_tree(mnt)) { | 78 | if (!may_umount_tree(mnt)) { |
