]> git.karo-electronics.de Git - linux-beck.git/commitdiff
autofs: change autofs4_expire_wait()/do_expire_wait() to take struct path
authorIan Kent <ikent@redhat.com>
Wed, 23 Nov 2016 21:03:41 +0000 (08:03 +1100)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 4 Dec 2016 01:51:47 +0000 (20:51 -0500)
In order to use the functions path_is_mountpoint() and path_has_submounts()
autofs needs to pass a struct path in several places.

Start by changing autofs4_expire_wait() and do_expire_wait() to take
a struct path instead of a struct dentry.

Link: http://lkml.kernel.org/r/20161011053408.27645.40091.stgit@pluto.themaw.net
Signed-off-by: Ian Kent <raven@themaw.net>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Cc: Omar Sandoval <osandov@osandov.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/autofs4/autofs_i.h
fs/autofs4/dev-ioctl.c
fs/autofs4/expire.c
fs/autofs4/root.c

index a1fba4285277dde3af647d778b8aefd4c36d2261..45311525ad89b34eabbe4dc2a7dce277ed50e4d2 100644 (file)
@@ -145,7 +145,7 @@ void autofs4_free_ino(struct autofs_info *);
 
 /* Expiration */
 int is_autofs4_dentry(struct dentry *);
-int autofs4_expire_wait(struct dentry *dentry, int rcu_walk);
+int autofs4_expire_wait(const struct path *path, int rcu_walk);
 int autofs4_expire_run(struct super_block *, struct vfsmount *,
                       struct autofs_sb_info *,
                       struct autofs_packet_expire __user *);
index fc09eb77ddf37a4ae27af402553220e4287af92e..40c69f91dc0ae6f41ca355c80b85a14a5e977cd6 100644 (file)
@@ -468,7 +468,7 @@ static int autofs_dev_ioctl_requester(struct file *fp,
        ino = autofs4_dentry_ino(path.dentry);
        if (ino) {
                err = 0;
-               autofs4_expire_wait(path.dentry, 0);
+               autofs4_expire_wait(&path, 0);
                spin_lock(&sbi->fs_lock);
                param->requester.uid =
                        from_kuid_munged(current_user_ns(), ino->uid);
index d8e6d421c27fb74eed07369e83278183bb394f82..6ba6107e6102c2796ed117f4eb78227e6e8ecb39 100644 (file)
@@ -495,8 +495,9 @@ found:
        return expired;
 }
 
-int autofs4_expire_wait(struct dentry *dentry, int rcu_walk)
+int autofs4_expire_wait(const struct path *path, int rcu_walk)
 {
+       struct dentry *dentry = path->dentry;
        struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
        struct autofs_info *ino = autofs4_dentry_ino(dentry);
        int status;
index 3a4328218b71d9d87fe429fa7e3cc162135e66ae..6b06337ca9fc493c257b56b68a8b30e21508d507 100644 (file)
@@ -286,22 +286,24 @@ static int autofs4_mount_wait(struct dentry *dentry, bool rcu_walk)
        return status;
 }
 
-static int do_expire_wait(struct dentry *dentry, bool rcu_walk)
+static int do_expire_wait(const struct path *path, bool rcu_walk)
 {
+       struct dentry *dentry = path->dentry;
        struct dentry *expiring;
 
        expiring = autofs4_lookup_expiring(dentry, rcu_walk);
        if (IS_ERR(expiring))
                return PTR_ERR(expiring);
        if (!expiring)
-               return autofs4_expire_wait(dentry, rcu_walk);
+               return autofs4_expire_wait(path, rcu_walk);
        else {
+               struct path this = { .mnt = path->mnt, .dentry = expiring };
                /*
                 * If we are racing with expire the request might not
                 * be quite complete, but the directory has been removed
                 * so it must have been successful, just wait for it.
                 */
-               autofs4_expire_wait(expiring, 0);
+               autofs4_expire_wait(&this, 0);
                autofs4_del_expiring(expiring);
                dput(expiring);
        }
@@ -354,7 +356,7 @@ static struct vfsmount *autofs4_d_automount(struct path *path)
         * and the directory was removed, so just go ahead and try
         * the mount.
         */
-       status = do_expire_wait(dentry, 0);
+       status = do_expire_wait(path, 0);
        if (status && status != -EAGAIN)
                return NULL;
 
@@ -438,7 +440,7 @@ static int autofs4_d_manage(const struct path *path, bool rcu_walk)
        }
 
        /* Wait for pending expires */
-       if (do_expire_wait(dentry, rcu_walk) == -ECHILD)
+       if (do_expire_wait(path, rcu_walk) == -ECHILD)
                return -ECHILD;
 
        /*